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

2019-05-12 14:04发布

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

我有一个Dreamhost的VPS(这就是他们所谓的虚拟机 ),并且我已经能够安装的Node.js和设置代理。 这只要我继续,我开始节点开放的SSH连接的伟大工程。

Answer 1:

2016回答 :几乎所有的Linux发行版自带systemd,这意味着永远的monit等不再是必需的-你的操作系统已经处理了这些任务

做一个myapp.service文件(替换“MYAPP”与您的应用程序的名字,很明显):

[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

请注意,如果你是新来的Unix: /var/www/myapp/app.js应该有#!/usr/bin/env node上的第一行。

你的服务文件复制到/etc/systemd/system文件夹中。

告诉systemd关于与新服务systemctl daemon-reload

启动它systemctl start myapp

使它能够与启动时运行systemctl enable myapp

见原木journalctl -u myapp

这是取自我们如何在Linux上,2018版的部署节点的应用程序 ,其中还包括命令生成AWS / DigitalOcean / Azure的CloudConfig建立的Linux /节点服务器(包括.service文件)。



Answer 2:

使用永远 。 它运行在单独的进程的Node.js程序并重新启动他们,如果任何模具。

用法:

  • forever start example.js启动一个进程。
  • forever list看到的所有进程列表中永远启动
  • forever stop example.js停止的过程中,或forever stop 0以停止索引为0的处理(如图forever list )。


Answer 3:

我已经写在这里我的部署方法: 部署的Node.js应用

简而言之:

  • 使用git后收到钩
  • 杰克的构建工具
  • 新贵作为节点的服务包装
  • monit的监控,并重新启动应用,他们去了
  • nginx的请求路由到不同的应用程序在同一台服务器上


Answer 4:

PM2做的小伎俩。

特点是:监控,热码重装,内置的负载均衡,自动启动脚本,和复活/转储过程。



Answer 5:

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

您可以使用清漆或HAProxy的,而不是Nginx的(Nginx的已知不使用WebSockets工作)。

作为一个快速和肮脏的解决方案,您可以使用nohup node your_app.js &防止您的应用程序与服务器终止,但forevermonit等提出的解决方案是更好的。



Answer 6:

我做目前使用我的应用程序是一个暴发户脚本:

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


Answer 7:

我写了一个非常全面的指导部署的Node.js,与示例文件:

教程:如何部署的Node.js应用,例如

它涵盖的东西,如HTTP代理, SSL和Socket.IO 。



Answer 8:

下面是关于解决这一问题,systemd较长的文章: http://savanne.be/articles/deploying-node-js-with-systemd/

有些事情要记住:

  • 谁将会启动过程监控? 永远是一个伟大的工具,但它需要一个监测工具,以保持自身的运行。 这是一个有点傻,为什么不使用你的init系统?
  • 你可以充分地监控你的流程?
  • 你运行多个后端? 如果是这样,你有没有到位,以防止任何人从打倒在资源使用方面的其他规定?
  • 将服务需要所有的时间? 如果没有,考虑插座激活(见文章)。

所有这些事情都容易与systemd完成。



Answer 9:

如果你有root权限,你将能更好地建立一个守护进程,使其运行安全和无害的背景。 你可以阅读如何做到这一点的Debian的与Ubuntu的在博客中运行的Node.js作为Ubuntu的服务



Answer 10:

永远会做的伎俩。

@Kevin:你应该能够终止进程的罚款。 我会仔细检查文档一点。 如果你能重现错误,将是巨大的,它张贴作为GitHub上的问题。



Answer 11:

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

部署的Node.js应用与Capistrano的,新贵和Nginx的一个伟大的和详细的指南



Answer 12:

作为BOX9说, 永远是产品代码一个不错的选择。 但它也有可能保持一个过程,即使准备SSH连接,从客户端关闭。

虽然不一定是一个好主意的生产,这是非常方便的在长调试会话的中间的时候,还是要遵循漫长进程的控制台输出,或只要是有用的断开你的SSH连接,但保持终端活着服务器后来重新连接(如在国内首发Node.js的应用程序,并重新连接到控制台后来在工作中检查的事情是怎么回事)。

假设你的服务器是* nix中框,您可以使用屏幕命令从壳里做保留,即使客户端SSH关闭运行的进程。 您也可以下载/如果尚未安装从网络安装屏幕(寻找一个包为您分配,如果Linux或使用MacPorts的 ,如果OS X)。

它的工作原理如下:

  1. 当你第一次打开SSH连接,键入“屏幕” - 这将启动你的屏幕会话。
  2. 开始工作正常(即启动的Node.js应用程式)
  3. 当你完成后,关闭您的终端。 你的服务器进程(ES)将继续运行。
  4. 要重新连接到您的控制台,SSH回服务器,登录,并进入“屏幕-r”重新连接。 您的旧控制台上下文将弹回为你准备好继续使用它。
  5. 要退出屏幕,同时连接到控制台提示符的服务器上,键入“exit” - 这将下降到普通的shell。

你可以有多个屏幕会话像这样同时运行的,如果你需要,你可以从任何客户端连接到它的任何。 在线阅读的文档的所有选项。



Answer 13:

永远是保持应用程序运行的一个很好的选择(和它的NPM安装的模块,这是很好)。

但是对于更严重的“部署” - 比如部署,重新启动,运行命令等的远程管理 - 我会用Capistrano的与节点的延伸。

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



Answer 14:

https://paastor.com是一个相对较新的服务,做部署对你来说,VPS或其他服务器。 有一个CLI推代码。 Paastor有一个免费的层级,至少它没有在此发布的时间。



Answer 15:

在你的情况,你可以使用暴发户守护进程。 对于一个完整的部署解决方案,我建议Capistrano的 。 两个有用的导游是如何设置的Node.js ENV如何通过Capistrano的新贵+部署



Answer 16:

尝试节点部署服务器 。 它是将应用程序部署到您的私人服务器,一个复杂的工具集。 这是写在Node.js和受使用NPM安装。



文章来源: How do I run a Node.js application as its own process?