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

node.js Node.js

小哥Gil

2020-03-23

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

我有一个Dreamhost VPS(这就是他们所说的VM),并且我已经能够安装Node.js并设置代理。只要我保持打开节点时启动的SSH连接就可以了。

第3086篇《如何将Node.js应用程序作为其自己的进程运行?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

15个回答
番长猴子 2020.03.23

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

神无 2020.03.23

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

西里Near 2020.03.23

您可以使用upstart守护程序。对于完整的部署解决方案,我建议使用capistrano两个有用的指南是如何设置Node.js env如何通过capistrano + upstart进行部署

GilGilPro 2020.03.23

正如Box9所说,Forever是生产代码的不错选择。但是,即使从客户端关闭SSH连接,也可以使进程继续运行

虽然不一定是生产的好主意,但是在调试会话很长的过程中,或者遵循冗长的进程的控制台输出时,或者在断开SSH连接但仍使终端在服务器中保持活动的任何时候,这非常方便以便稍后重新连接(例如在家中启动Node.js应用程序并稍后在工作中重新连接到控制台以检查运行情况)。

假设您的服务器是一个* nix框,那么即使关闭客户端SSH ,也可以使用shell中screen命令保持进程运行。如果尚未安装,则可以从Web下载/安装屏幕(如果是Linux,请查找要分发的软件包;如果是OS X ,请使用MacPorts)。

它的工作方式如下:

  1. 首次打开SSH连接时,键入“ screen”-这将启动屏幕会话。
  2. 开始正常工作(即启动Node.js应用程序)
  3. 完成后,关闭终端。您的服务器进程将继续运行。
  4. 要重新连接到控制台,请ssh返回服务器,登录,然后输入“ screen -r”以重新连接。您的旧控制台上下文将弹出以供您继续使用。
  5. 要在连接到服务器时退出屏幕,请在控制台提示符下键入“ exit”,这将使您进入常规外壳。

您可以根据需要同时运行多个屏幕会话,并且可以从任何客户端连接到其中的任何一个。有关所有选项,请在线阅读文档。

Jim泡芙 2020.03.23

Forever是保持应用程序运行的好选择(它可以作为模块安装npm,这很好)。

但是对于更严重的“部署”(例如部署,重新启动,运行命令的远程管理等),我会在节点扩展中使用capistrano。

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

小宇宙阿飞 2020.03.23

我制作了当前用于我的应用程序的Upstart脚本:

description "YOUR APP NAME"
author "Capy - http://ecapy.com"

env LOG_FILE=/var/log/node/miapp.log
env APP_DIR=/var/node/miapp
env APP=app.js
env PID_NAME=miapp.pid
env USER=www-data
env GROUP=www-data
env POST_START_MESSAGE_TO_LOG="miapp HAS BEEN STARTED."
env NODE_BIN=/usr/local/bin/node
env PID_PATH=/var/opt/node/run
env SERVER_ENV="production"

######################################################

start on runlevel [2345]
stop on runlevel [016]

respawn
respawn limit 99 5

pre-start script
    mkdir -p $PID_PATH
    mkdir -p /var/log/node
end script

script
    export NODE_ENV=$SERVER_ENV
    exec start-stop-daemon --start --chuid $USER:$GROUP --make-pidfile --pidfile $PID_PATH/$PID_NAME --chdir $APP_DIR --exec $NODE_BIN -- $APP >> $LOG_FILE 2>&1
end script

post-start script
    echo $POST_START_MESSAGE_TO_LOG >> $LOG_FILE
end script

自定义#########之前的所有内容,在/etc/init/your-service.conf中创建一个文件并将其粘贴到此处。

那么你就可以:

start your-service
stop your-service
restart your-service
status your-service
小胖Gil 2020.03.23

试试这个:http : //www.technology-ebay.de/the-teams/mobile-de/blog/deploying-node-applications-with-capistrano-github-nginx-and-upstart.html

关于通过Capistrano,Upstart和Nginx部署Node.js应用程序的详尽指导

小宇宙 2020.03.23

我已经用示例文件编写了一份相当全面的部署Node.js指南:

教程:如何通过示例部署Node.js应用程序

它涵盖了诸如http-proxy,SSLSocket.IO之类的内容

JinJin 2020.03.23

永远会成功。

@Kevin:您应该可以杀死进程。我会仔细检查一下文档。如果您可以重现该错误,那么将其作为问题发布到GitHub上将是很棒的。

Gil伽罗小宇宙 2020.03.23

您可以使用monitforeverupstartsystemd来启动服务器。

您可以使用Varnish或HAProxy代替Nginx(已知Nginx不适用于websocket)。

作为一种快速而肮脏的解决方案,您可以使用它nohup node your_app.js &来防止您的应用程序终止于服务器,但是forevermonit和其他建议的解决方案更好。

TonyItachi 2020.03.23

我在这里已经介绍了我的部署方法:部署node.js应用

简而言之:

  • 使用git post-receive钩子
  • 杰克的构建工具
  • Upstart作为节点的服务包装器
  • 监视和重启应用程序,使其崩溃
  • nginx将请求路由到同一服务器上的不同应用程序
LEY神无 2020.03.23

如果您具有root用户访问权限,则最好设置一个守护进程,以使其在后台安全无虞地运行。您可以在博客文章“在Ubuntu上将Node.js作为服务运行”中了解如何为DebianUbuntu做到这一点

Stafan猴子 2020.03.23

这是有关使用systemd解决此问题的较长文章:http : //savanne.be/articles/deploying-node-js-with-systemd/

注意事项:

  • 谁将开始您的过程监控?永远是一个很棒的工具,但是它需要一个监视工具来保持自身运行。有点傻,为什么不只使用您的init系统呢?
  • 您可以充分监控流程吗?
  • 您是否在运行多个后端?如果是这样,您是否已制定条款以防止其中任何一个在资源使用方面降低其他标准?
  • 是否会一直需要该服务?如果没有,请考虑激活套接字(请参阅文章)。

所有这些事情都可以通过systemd轻松完成。

理查德A小宇宙 2020.03.23

永远使用它在单独的进程中运行Node.js程序,如果有死机,则重新启动它们。

用法:

  • forever start example.js 开始一个过程。
  • forever list 查看永远启动的所有进程的列表
  • forever stop example.js以停止该进程,或forever stop 0以索引0停止该进程(如所示forever list)。
阿飞 2020.03.23

pm2可以解决问题。

功能包括:监视,热代码重载,内置负载平衡器,自动启动脚本以及复活/转储过程。

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android