部署在aws上使用mongodb的节点js app

时间:2014-09-25 11:40:50

标签: node.js mongodb amazon-web-services amazon-ec2

我对亚马逊网络服务和弹性beanstalk很新。

虽然很多人说使用起来既简单又直接,但我认为这是一个非常主观的陈述。对于像我这样对云托管和虚拟私人服务器不熟悉的人来说,我相信学习曲线与那些必须学会“艰难”地学习的人并没有太大的不同。

我正在开发一个nodejs网站,它使用expressjs作为核心框架,MongoDB作为其数据库。我的雇主希望我们使用AWS。现在问题开始了。

我已经能够在弹性beanstalk上建立一个环境甚至上传应用程序并启动环境,但没有任何工作。

我遇到的第一个问题是,尽管我成功地设置了环境,但我几乎不知道所有配置意味着什么,我的脑袋在旋转。官方AWS文档对此没有多大帮助。

其次,我不知道如何让它与MongoDB一起使用,在仪表板上我唯一看到的选项是Amazon RDS,我搜索的任何解释对于像我这样的新手来说都非常复杂。

有没有人有链接到某个地方我可以得到所有这些的简单解释,或者有人可以简单解释如何做到这一点?

PS:我创建的AWS环境是运行Node.js的64位Amazon Linux 2014.03 v1.0.6

编辑:我收到错误502 Bad Gateway。该应用程序在面向前端的nginx代理后面运行。

1 个答案:

答案 0 :(得分:3)

AWS在配置服务器和应用程序方面做得更先进,因此难怪它会让人感到困惑。大多数时候,文档也没有多大帮助。亚马逊引导您使用他们的RDS / nosql(DynamoDB)。您可以在AMI市场中添加许多不同类型的数据库,但我发现这些数据库太昂贵且不必要。

对于以下内容,ssh进入您的EC2实例ssh -i <your .pem key> ec2-user@ec2-xx-xx-xx-xx.us-west-2.compute.amazonaws.com(应该与此类似)

对于AWS上的MongoDB:

echo "[MongoDB]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
enabled=1" | sudo tee -a /etc/yum.repos.d/mongodb.repo

sudo yum install -y mongodb-org-server mongodb-org-shell mongodb-org-tools

sudo mkdir /data /log /journal

//Mount partitions -- Find available ones for /data /log /journal
sudo mkfs.ext4 /dev/xvdf
sudo mkfs.ext4 /dev/xvdg
sudo mkfs.ext4 /dev/xvdh

echo '/dev/xvdf /data ext4 defaults,auto,noatime,noexec 0 0
/dev/xvdg /journal ext4 defaults,auto,noatime,noexec 0 0
/dev/xvdh /log ext4 defaults,auto,noatime,noexec 0 0' | sudo tee -a /etc/fstab

sudo mount /data
sudo mount /journal
sudo mount /log

sudo chown mongod:mongod /data /journal /log

sudo ln -s /journal /data/journal

nano /etc/mongod.conf
//Change to 
dbpath = /data
logpath = /log/mongod.log

sudo nano /etc/security/limits.conf
* soft nofile 64000
* hard nofile 64000
* soft nproc 32000
* hard nproc 32000

sudo nano /etc/security/limits.d/90-nproc.conf
* soft nproc 32000
* hard nproc 32000

sudo blockdev --setra 32 /dev/xvdf

echo 'ACTION=="add", KERNEL=="xvdf", ATTR{bdi/read_ahead_kb}="16"' | sudo tee -a /etc/udev/rules.d/85-ebs.rules

//Run persistent
mongod --fork --logpath /var/log/mongodb/mongod.log

参考:gist

您可以在当前的ssh会话中运行mongo,以确保其正常运行。