在 aws 上部署使用 mongodb 的节点 js 应用程序

Posted

技术标签:

【中文标题】在 aws 上部署使用 mongodb 的节点 js 应用程序【英文标题】:Deploying a node js app that uses mongo db on aws 【发布时间】:2014-11-20 04:13:00 【问题描述】:

我对亚马逊网络服务和弹性 beantalk 还是很陌生。

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

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

我已经能够在 elastic beanstalk 上设置一个环境,甚至上传应用程序和环境启动,但没有任何工作。

我遇到的第一个问题是,尽管我成功地设置了环境,但我几乎不知道所有配置的含义,而且我的头脑在旋转。官方的 AWS 文档在那里没有多大帮助。

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

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

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

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

【问题讨论】:

您的 502 可能是无法连接到 mongo 的问题,如果实际上您的应用程序正在尝试连接。请参阅我关于让 mongo 在 AWS 上运行的答案。 【参考方案1】:

AWS 在配置服务器和应用程序方面更先进一些,因此难怪它会让人感到困惑。大多数时候,文档也没有多大帮助。 Amazon 引导您使用他们的 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", ATTRbdi/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 以确保它正常运行。

【讨论】:

以上是关于在 aws 上部署使用 mongodb 的节点 js 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 连接到 AWS 上的节点 平均堆栈

使用 AWS Amplify 和 App Sync 与使用 Mongodb 的现有节点服务器

在 aws 上部署应用程序时在 package.json 中指定节点 js 版本

nodejs mongoose在部署到aws时显示错误,在本地机器上工作

无法使节点j在端口3000上运行

Amazon AWS Elastic Beanstalk - 连接到 mongodb