如何让 EC2 上的 Node.js 服务器永远运行?
Posted
技术标签:
【中文标题】如何让 EC2 上的 Node.js 服务器永远运行?【英文标题】:How do I leave Node.js server on EC2 running forever? 【发布时间】:2014-12-02 11:11:52 【问题描述】:从我的问题可以看出,我是新手...
我建立了我的第一个网站,我设置了我的第一个 Node.js 服务器来为其提供服务,然后将所有内容推送到 EC2 上。
我在我的 EC2 IP 地址上测试了所有内容,一切似乎都正常。
到目前为止,我一直在本地测试我的应用程序,因此每当我关闭终端时,app.js 都会停止运行,因此不会在 localhost 上提供任何服务。
现在我的服务器在 EC2 上,每当我关闭终端时,都会发生同样的事情(“显然”有人可以说..)。
所以我的问题是我如何让我的 Node.js 服务器在 EC2 上运行......永远......这样我的网站才能保持活动......永远:)
我读过一些关于名为“永远”的节点模块的内容,但我想知道(作为新的和所有......)为什么这个“永远”功能不是 Node.js-EC2 系统的默认设置?
我的意思是,如果我错了,请纠正我,但设置 Web 服务器并推动它运行以使其永远保持运行不就是重点吗?这不是服务器应该做的事情(无限地监听请求)吗?如果是这样的话,为什么我们需要额外的模块/设置来实现呢?
感谢您的帮助。如您所知,我不仅在寻找解决方案,还在寻找解释,因为我真的很困惑.. :-)
编辑(您可能需要一些详细信息)- 在 EC2 上安装我的应用程序后,这些是我在终端上执行的步骤(顺便说一下,该应用程序在 Amazon Linux
上运行):
我在 ssh -i xxxxxxxxxxx.pem ec2-user@ec2-xx-xx-xx-x.eu-west-1.compute.amazonaws.com 上键入 终端
登录亚马逊机器后,我然后转到相关文件夹并执行 node app.js
机器中有3个文件夹:node
、node_modules
和*name of my app*
app.js
驻留在*name of my app*
之后,网站在我的 EC2 IP 上上线
关闭终端后,一切都关闭了
【问题讨论】:
这里的答案基本上已经过时/错误。您只需使用 pm2。 ***.com/a/36907953/294884 完美解释,很简单 Amazon EC2 NodeJS server stops itself after 2 days even after using sudo nohup的可能重复 【参考方案1】:在调用 Node.js 之前,运行命令:
screen
这将创建一个持久的环境,允许您的进程在断开连接后继续运行。
当你重新连接时,你可以使用这个命令重新连接到那个环境:
screen -r
这里有一个随机链接,可以了解有关屏幕的更多信息:
http://www.rackaid.com/blog/linux-screen-tutorial-and-how-to/
但是,如果您的 EC2 实例重新启动,这将无济于事。有很多不同的方法可以做到这一点。将启动命令添加到 /etc/rc.local 是一种方法。这是亚马逊指南的链接,其中包括向 /etc/rc.local 添加一些内容。
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/building-shared-amis.html
希望对你有帮助,
詹姆斯
【讨论】:
对于测试/开发目的,这就像 NodeJS Express 设置的魅力。很高兴我不必再打开我的 Putty 终端了!另一个注意事项 - 给新手(比如我自己)的提示:要在screen
环境中关闭正在运行的进程,请按 CTRL+C 停止它(如果这不起作用,您可以需要找出进程ID或PID并通过从主环境运行的新Putty /终端将其杀死),最后键入exit
关闭屏幕环境并返回主环境。
如果我想让多个东西保持运行,比如 mongodb 服务器、nodejs 服务器、react 服务器等,该怎么办?我相信 screen -r 只会将我带到以screen
启动的那个。我正在寻找类似screen myScreenOne
、screen myScreenTwo
等的东西?我们可以这样做吗?
在生产环境中使用它安全吗?并且适合java应用吗?
@User-8017771 不,不要在生产中使用。大多数发行版都有 systemd 可用。
@Matt 为什么我不应该在生产中使用它?我目前正在从我的节点 HTTP 服务器提供一个 React 应用程序。【参考方案2】:
我使用了一段时间的有效答案,但有时屏幕会无缘无故地结束,屏幕也没有平衡加载器和其他在生产环境中您应该关心的功能,目前我使用 npm 组件来完成这项工作.
https://www.npmjs.com/package/pm2
这很容易使用。
$ npm install pm2 -g
然后像这样使用 pm2 启动您的应用程序
$ pm2 start app.js
如果需要,您可以在上面的链接中找到要执行的不同任务。
希望对像我这样的新手有所帮助。
【讨论】:
我尝试了 pm2,但我的网站开始出现错误,所以我恢复到现在可以使用的“屏幕”解决方案。我会进一步调查,看看发生了什么。 这似乎是一个非常快速和简单的解决方案。为我工作。 感谢非常好用【参考方案3】:有一个更好的方法。使用forever.js。
在这里查看:https://github.com/foreverjs/forever
这是一个关于如何在 CENTOS 上永远使用 chkconfig 的很好的教程。
http://aronduby.com/starting-node-forever-scripts-at-boot-w-centos/
【讨论】:
【参考方案4】:或者使用 tmux 只需输入一个 tmux 屏幕运行节点服务器 Ctrl+b 点击 D 就完成了。
【讨论】:
【参考方案5】:我加入线程很晚,似乎每个新手都存在基本问题。按照以下步骤正确设置您的第一台服务器。
执行 ec2 实例上的步骤(在执行此操作之前,请确保您的 package.json 文件中有 pm2 的启动脚本):
npm install pm2 -g
pm2 startup systemd
查看输出,在最后一行它必须像..
您必须以 root 身份运行此命令。执行以下命令: sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 启动 systemd -u sammy --hp /home/sammy
获取最后一行命令并以 root 权限再次运行。
(在运行下一个命令之前,在 package.json 文件中为 pm2 提供一个新的启动脚本,例如:"pm2-start": "pm2 start ./bin/www"
)
npm run pm2-start
更多信息请点击链接。
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-16-04
【讨论】:
我将mpm
更改为npm
。如果mpm
是故意的,请告诉我。我不认为这是一件事......(很高兴学习新事物!)以上是关于如何让 EC2 上的 Node.js 服务器永远运行?的主要内容,如果未能解决你的问题,请参考以下文章
AWS EC2 与 AWS API Gateway 上的 Node.js RESTful API 服务器
从 Amazon AWS EC2 服务器上的 Node.js 连接到 Redis 服务器时出错
Amazon EC2 上 Node.js 的 CPU 利用率
无法使用 Node.js 和 AWS EC2 访问 mysql 服务器