在 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 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
使用 AWS Amplify 和 App Sync 与使用 Mongodb 的现有节点服务器
在 aws 上部署应用程序时在 package.json 中指定节点 js 版本