如何将Node.js应用程序作为自己的进程运行?

203

什么是部署Node.js的最佳方式?

我有一个Dreamhost VPS(他们称之为VM),我已经能够安装Node.js并设置代理。只要保持我用来启动node的SSH连接开放,这个方法就很好用。


6
嗯,你称使用Forever为“deploying node.js”让我感到有些奇怪。它不仅是一个进程监控和管理工具吗?通常,“web deployment”(至少在我读到的文章中)指的是一系列相关活动,使Web应用程序可用(这个工具只是其中的一部分)。无论如何,这篇在StackOverflow的帖子还是很棒的,因为我从所有人的回答中学到了很多。 - mikong
这只是在Dreamhost上最简单的node.js部署。目标仅仅是可靠地运行node,作为构建的起点。 - respectTheCode
你是如何处理将域名转发到节点运行的端口上的? - grm
2
@grm 我使用HTTP-Proxy https://github.com/nodejitsu/node-http-proxy - respectTheCode
我们现在正在使用弹性 Beanstalk,它运行得非常好。 - respectTheCode
可能是Node.js作为后台服务的重复问题。 - mikemaccana
17个回答

2

2
如Box9所说,Forever是生产代码的不错选择。但是即使从客户端关闭了SSH连接,也有可能保持进程运行。
虽然这不一定是生产环境下的好主意,但在长时间调试会话中非常方便,或者跟踪漫长进程的控制台输出时非常有用,或者在断开SSH连接的同时保持服务器终端处于活动状态以便稍后重新连接(例如,在家中启动Node.js应用程序,然后在工作中重新连接到控制台以检查事务进展情况)。
假设您的服务器是*nix系统,您可以使用screen命令来保持进程运行,即使客户端SSH已关闭。如果尚未安装,请从网络下载/安装screen(如果是Linux,则查找适合您发行版的软件包,或者使用MacPorts如果是OS X)。
它的工作原理如下:
当您首次打开SSH连接时,请输入“screen” - 这将启动您的屏幕会话。
正常工作(即启动您的Node.js应用程序)。
完成后,关闭终端。您的服务器进程将继续运行。
要重新连接到控制台,请ssh回服务器,登录并输入'screen -r'以重新连接。您的旧控制台上下文将弹回准备让您恢复使用它。
要退出屏幕,在连接到服务器的同时,在控制台提示符上键入“exit” - 这将使您进入常规shell。
如果需要,您可以同时运行多个屏幕会话,并且可以从任何客户端连接到其中任何一个。阅读在线文档以获取所有选项。

很有用的信息。我同意它在生产环境下不起作用,但在远程服务器上进行调试时可能非常有用。 - respectTheCode
为什么不直接使用nohup node myapp.js & 2>/var/log/myapp.log 1>/dev/null呢? - markus_p
我发现这个视频很有用 https://www.youtube.com/watch?v=P4mT5Tbx_KE,它解释了`nohup`和`forever`。 - Vinod Srivastav

1

Forever是一个不错的选项,可以保持应用程序运行(它还可以作为模块进行npm安装,这很好)。

但对于更严肃的“部署”——例如远程管理部署、重启、运行命令等——我会使用带有node扩展的capistrano。

https://github.com/loopj/capistrano-node-deploy


1

https://paastor.com 是一个相对较新的服务,可以为您部署到VPS或其他服务器。有一个CLI可以推送代码。Paastor有一个免费层,至少在发布此文时是这样。


1

最后两个链接已经失效。 - Pat

1

尝试使用node-deploy-server。它是一个用于将应用程序部署到您的私有服务器的复杂工具集。它是用Node.js编写的,并使用npm进行安装。


0
我正在使用Dreamhost上的express,并在后台运行pm2。方便。可以查看日志甚至保存日志文件(pm2 logs mylogs.txt)。
pm2 monit - monitoring metrics of app

pm2 list - table view of processes

你可以配置PM2,如果一个进程超过了一定的内存使用阈值,它会自动重启。这有助于防止内存泄漏或过度使用内存。
pm2 start app.js --name=myapp --max-memory-restart 200M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接