如何让EC2上的Node.js服务器永远运行?

时间:2014-10-07 21:53:32

标签: node.js amazon-ec2 webserver

正如你可以从我的问题中看出来的,我是新手......

我建立了我的第一个网站,我设置了我的第一个Node.js服务器来提供它,然后在EC2上推送所有内容。

我测试了EC2 IP地址上的所有内容,一切似乎都在运行。

现在到目前为止,我一直在本地测试我的应用程序,所以每当我关闭终端时,app.js会停止运行,因此无法在localhost上提供任何内容。

既然我的服务器在EC2上,每当我关闭终端时,都会发生同样的事情(“显然”可以说......)。

所以我的问题是我如何让我的Node.js服务器在EC2上运行...就像...永远......我的网站永远存在..永远:)

我读了一些名为“永远”的节点模块,但我想知道(新的和所有..)为什么这个“永远”功能不是Node.js-EC2系统的默认设置?

我的意思是,如果我错了,请纠正我,但是不是设置一个网络服务器并将其推送到现场让它永远存在的全部意义吗?这不是服务器应该做什么(无限听取请求)?如果是这种情况,为什么我们需要额外的模块/设置才能实现呢?

感谢您的帮助..您可以告诉我,我不仅要寻找解决方案,还要解释因为我真的很困惑.. :-)

编辑(您可能需要的一些详细信息) - 在EC2上安装我的应用后,这些是我在终端上执行的步骤(该应用程序正在Amazon Linux上运行):

  • 我输入ssh -i xxxxxxxxxxx.pem ec2-user@ec2-xx-xx-xx-x.eu-west-1.compute.amazonaws.com 终端

  • 登录到亚马逊机器后,我转到相关文件夹并执行节点app.js

  • 本机中有3个文件夹:nodenode_modules*name of my app*

  • app.js位于*name of my app*

  • 之后,该网站将在我的EC2 IP上发布

  • 关闭终端后,所有内容都将关闭

5 个答案:

答案 0 :(得分:58)

在调用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

希望这有帮助,

詹姆斯

答案 1 :(得分:25)

我使用了有效的答案了一段时间,但有时候屏幕刚刚没有理由结束屏幕也没有平衡装载器和其他功能,在生产环境中你应该关心,目前我使用npm组件来完成这项工作

https://www.npmjs.com/package/pm2

这很容易使用。

$ npm install pm2 -g

然后就像这个

一样用pm2启动你的应用程序
$ pm2 start app.js

在上面的链接中,您可以找到需要执行的差异任务。

希望这有助于像我这样的新手。

答案 2 :(得分:12)

有更好的方法。使用forever.js。

请在此处查看:https://github.com/foreverjs/forever

这是一个关于如何在CENTOS上永远使用chkconfig的很好的教程。

http://aronduby.com/starting-node-forever-scripts-at-boot-w-centos/

答案 3 :(得分:2)

或者使用tmux 只需输入tmux屏幕运行节点服务器 按Ctrl + b点击D,你就完成了。

答案 4 :(得分:2)

我很晚才加入这个主题并且似乎是每个新手的基本问题。按照以下说明正确设置您的第一台服务器。

按照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 startup   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