什么是部署的Node.js的最佳方式?
我有一个Dreamhost的VPS(这就是他们所谓的虚拟机 ),并且我已经能够安装的Node.js和设置代理。 这只要我继续,我开始节点开放的SSH连接的伟大工程。
什么是部署的Node.js的最佳方式?
我有一个Dreamhost的VPS(这就是他们所谓的虚拟机 ),并且我已经能够安装的Node.js和设置代理。 这只要我继续,我开始节点开放的SSH连接的伟大工程。
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
文件)。
使用永远 。 它运行在单独的进程的Node.js程序并重新启动他们,如果任何模具。
用法:
forever start example.js
启动一个进程。 forever list
看到的所有进程列表中永远启动 forever stop example.js
停止的过程中,或forever stop 0
以停止索引为0的处理(如图forever list
)。 我已经写在这里我的部署方法: 部署的Node.js应用
简而言之:
PM2做的小伎俩。
特点是:监控,热码重装,内置的负载均衡,自动启动脚本,和复活/转储过程。
您可以使用monit
, forever
, upstart
或systemd
来启动服务器。
您可以使用清漆或HAProxy的,而不是Nginx的(Nginx的已知不使用WebSockets工作)。
作为一个快速和肮脏的解决方案,您可以使用nohup node your_app.js &
防止您的应用程序与服务器终止,但forever
, monit
等提出的解决方案是更好的。
我做目前使用我的应用程序是一个暴发户脚本:
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
我写了一个非常全面的指导部署的Node.js,与示例文件:
教程:如何部署的Node.js应用,例如
它涵盖的东西,如HTTP代理, SSL和Socket.IO 。
下面是关于解决这一问题,systemd较长的文章: http://savanne.be/articles/deploying-node-js-with-systemd/
有些事情要记住:
所有这些事情都容易与systemd完成。
如果你有root权限,你将能更好地建立一个守护进程,使其运行安全和无害的背景。 你可以阅读如何做到这一点的Debian的与Ubuntu的在博客中运行的Node.js作为Ubuntu的服务 。
永远会做的伎俩。
@Kevin:你应该能够终止进程的罚款。 我会仔细检查文档一点。 如果你能重现错误,将是巨大的,它张贴作为GitHub上的问题。
试试这个: http://www.technology-ebay.de/the-teams/mobile-de/blog/deploying-node-applications-with-capistrano-github-nginx-and-upstart.html
部署的Node.js应用与Capistrano的,新贵和Nginx的一个伟大的和详细的指南
作为BOX9说, 永远是产品代码一个不错的选择。 但它也有可能保持一个过程,即使准备SSH连接,从客户端关闭。
虽然不一定是一个好主意的生产,这是非常方便的在长调试会话的中间的时候,还是要遵循漫长进程的控制台输出,或只要是有用的断开你的SSH连接,但保持终端活着服务器后来重新连接(如在国内首发Node.js的应用程序,并重新连接到控制台后来在工作中检查的事情是怎么回事)。
假设你的服务器是* nix中框,您可以使用屏幕命令从壳里做保留,即使客户端SSH关闭运行的进程。 您也可以下载/如果尚未安装从网络安装屏幕(寻找一个包为您分配,如果Linux或使用MacPorts的 ,如果OS X)。
它的工作原理如下:
你可以有多个屏幕会话像这样同时运行的,如果你需要,你可以从任何客户端连接到它的任何。 在线阅读的文档的所有选项。
永远是保持应用程序运行的一个很好的选择(和它的NPM安装的模块,这是很好)。
但是对于更严重的“部署” - 比如部署,重新启动,运行命令等的远程管理 - 我会用Capistrano的与节点的延伸。
https://github.com/loopj/capistrano-node-deploy
https://paastor.com是一个相对较新的服务,做部署对你来说,VPS或其他服务器。 有一个CLI推代码。 Paastor有一个免费的层级,至少它没有在此发布的时间。
在你的情况,你可以使用暴发户守护进程。 对于一个完整的部署解决方案,我建议Capistrano的 。 两个有用的导游是如何设置的Node.js ENV和如何通过Capistrano的新贵+部署 。
尝试节点部署服务器 。 它是将应用程序部署到您的私人服务器,一个复杂的工具集。 这是写在Node.js和受使用NPM安装。