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

如何将Node.js应用程序作为自己的进程运行?,node.js,service,deployment,daemon,Node.js,Service,Deployment,Daemon,部署Node.js的最佳方式是什么 我有一个Dreamhost VPS(这就是他们所说的VPS),我已经能够安装Node.js并设置一个代理。只要我保持启动node时使用的SSH连接处于打开状态,这就非常有效。如果您具有root访问权限,最好设置一个守护进程,以便它在后台安全可靠地运行。你可以在博客文章中阅读如何做到这一点。使用。它在单独的进程中运行Node.js程序,如果有任何进程死亡,则重新启动它们 用法: forever start example.js启动流程 永久列表查看由永久启动的

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


我有一个Dreamhost VPS(这就是他们所说的VPS),我已经能够安装Node.js并设置一个代理。只要我保持启动node时使用的SSH连接处于打开状态,这就非常有效。

如果您具有root访问权限,最好设置一个守护进程,以便它在后台安全可靠地运行。你可以在博客文章中阅读如何做到这一点。

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

用法:

  • forever start example.js
    启动流程
  • 永久列表
    查看由永久启动的所有进程的列表
  • 永久停止示例.js
    停止进程,或
    永久停止0
    停止索引为0的进程(如
    永久列表所示)
    • 就可以了


      @凯文:你应该可以很好地杀死进程。我会仔细检查一下文档。如果您可以重现错误,最好将其作为问题发布在GitHub上。

      在您的情况下,您可以使用守护进程。对于完整的部署解决方案,我建议。两个有用的指南是和。

      我在这里写了我的部署方法:

      简言之:

      • 使用git-post接收钩子
      • 对于构建工具
      • Upstart作为节点的服务包装
      • Monit在应用程序停止时监视并重新启动应用程序
      • 将请求路由到同一服务器上的不同应用程序

      您可以使用
      monit
      永远
      upstart
      systemd
      启动服务器

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


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

      我已经编写了一份关于部署node.js的非常全面的指南,其中包含示例文件:

      它涵盖了http代理之类的内容,并且。

      如Box9所述,对于生产代码来说是一个不错的选择。但是,即使与客户端的连接已关闭,也可以保持进程继续运行

      虽然不一定是一个好的生产思路,但是在长调试会话的中间,或者遵循长过程的控制台输出,或者无论何时断开SSH连接都是有用的,但是在服务器上保持终端重新连接时,这是非常方便的。(比如在家中启动Node.js应用程序,然后在工作时重新连接到控制台以检查情况)

      假设您的服务器是一个*nix框,您可以使用shell中的命令来保持进程运行,即使客户端SSH已关闭。如果尚未安装,您可以从web下载/安装screen(如果是Linux,请查找发行版的软件包,如果是OSX,请使用)

      其工作原理如下:

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

    • 如果需要,您可以像这样同时运行多个屏幕会话,并且可以从任何客户端连接到其中的任何一个。有关所有选项,请联机阅读文档。

      这里有一篇关于使用systemd解决此问题的较长文章:

      要记住的一些事情:

      • 谁来启动您的流程监控?Forever是一个很棒的工具,但它需要一个监控工具来保持自身运行。这有点愚蠢,为什么不直接使用您的init系统呢
      • 您能否充分监控您的流程
      • 您是否正在运行多个后端?如果是,您是否制定了相应的规定,以防止其中任何一个在资源使用方面拖累其他后端
      • <> LI>会一直需要服务吗?如果没有,请考虑套接字激活(参见文章)。

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

      永久是保持应用程序运行的一个好选择(而且它可以作为一个模块安装,这很好)

      但对于更严重的“部署”——如远程管理部署、重新启动、运行命令等——我将使用capistrano和节点扩展


      我制作了一个目前用于我的应用程序的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
      
      自定义所有before,在/etc/init/your-service.conf中创建一个文件并粘贴到那里

      然后你可以:

      start your-service
      stop your-service
      restart your-service
      status your-service
      
      他会耍花招

      功能包括:监视、热代码重新加载、内置负载平衡器、自动启动脚本和恢复/转储进程。

      尝试以下操作:


      这是一本关于使用Capistrano、Upstart和Nginx部署Node.js应用程序的优秀而详细的指南。它是一个复杂的工具集,用于将应用程序部署到您的专用服务器上。它是在Node.js中编写的,并使用npm进行安装。

      是一项相对较新的服务,可为您部署到VPS或其他服务器上。有一个CLI可用于推送代码。Paastor有一个免费层,至少在发布这篇文章时是这样。

      2016答案:几乎每一个Linux发行版都配有systemd,这意味着永远不再需要monit、PM2等-您的操作系统已经处理了这些任务

      制作一个
      myapp.service
      文件(显然,将“myapp”替换为应用的名称):

      如果您是Unix新手,请注意:
      /var/www/myapp/app.js
      sho
      [Unit]
      Description=My app
      
      [Service]
      ExecStart=/var/www/myapp/app.js
      Restart=always
      User=nobody
      # Note Debian/Ubuntu uses 'nogroup', RHEL/Fedora uses 'nobody'
      Group=nobody
      Environment=PATH=/usr/bin:/usr/local/bin
      Environment=NODE_ENV=production
      WorkingDirectory=/var/www/myapp
      
      [Install]
      WantedBy=multi-user.target