部署Node.js的最佳方法是什么?
我有一个Dreamhost VPS(这就是他们所说的VM),并且我已经能够安装Node.js并设置代理。只要我保持打开节点时启动的SSH连接就可以了。
部署Node.js的最佳方法是什么?
我有一个Dreamhost VPS(这就是他们所说的VM),并且我已经能够安装Node.js并设置代理。只要我保持打开节点时启动的SSH连接就可以了。
https://paastor.com是一项相对较新的服务,可以为您部署到VPS或其他服务器。有一个CLI可以推送代码。Paastor有一个免费层,至少在发布此页面时就是如此。
您可以使用upstart守护程序。对于完整的部署解决方案,我建议使用capistrano。两个有用的指南是如何设置Node.js env和如何通过capistrano + upstart进行部署。
正如Box9所说,Forever是生产代码的不错选择。但是,即使从客户端关闭了SSH连接,也可以使进程继续运行。
虽然不一定是生产的好主意,但是在调试会话很长的过程中,或者遵循冗长的进程的控制台输出时,或者在断开SSH连接但仍使终端在服务器中保持活动的任何时候,这非常方便以便稍后重新连接(例如在家中启动Node.js应用程序并稍后在工作中重新连接到控制台以检查运行情况)。
假设您的服务器是一个* nix框,那么即使关闭客户端SSH ,也可以使用shell中的screen命令保持进程运行。如果尚未安装,则可以从Web下载/安装屏幕(如果是Linux,请查找要分发的软件包;如果是OS X ,请使用MacPorts)。
它的工作方式如下:
您可以根据需要同时运行多个屏幕会话,并且可以从任何客户端连接到其中的任何一个。有关所有选项,请在线阅读文档。
Forever是保持应用程序运行的好选择(它可以作为模块安装npm,这很好)。
但是对于更严重的“部署”(例如部署,重新启动,运行命令的远程管理等),我会在节点扩展中使用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
自定义#########之前的所有内容,在/etc/init/your-service.conf中创建一个文件并将其粘贴到此处。
那么你就可以:
start your-service
stop your-service
restart your-service
status your-service
试试这个: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应用程序的详尽指导
永远会成功。
@Kevin:您应该可以杀死进程。我会仔细检查一下文档。如果您可以重现该错误,那么将其作为问题发布到GitHub上将是很棒的。
您可以使用monit
,forever
,upstart
或systemd
来启动服务器。
您可以使用Varnish或HAProxy代替Nginx(已知Nginx不适用于websocket)。
作为一种快速而肮脏的解决方案,您可以使用它nohup node your_app.js &
来防止您的应用程序终止于服务器,但是forever
,monit
和其他建议的解决方案更好。
我在这里已经介绍了我的部署方法:部署node.js应用
简而言之:
如果您具有root用户访问权限,则最好设置一个守护进程,以使其在后台安全无虞地运行。您可以在博客文章“在Ubuntu上将Node.js作为服务运行”中了解如何为Debian和Ubuntu做到这一点。
这是有关使用systemd解决此问题的较长文章:http : //savanne.be/articles/deploying-node-js-with-systemd/
注意事项:
所有这些事情都可以通过systemd轻松完成。
永远使用。它在单独的进程中运行Node.js程序,如果有死机,则重新启动它们。
用法:
forever start example.js
开始一个过程。forever list
查看永远启动的所有进程的列表forever stop example.js
以停止该进程,或forever stop 0
以索引0停止该进程(如所示forever list
)。pm2可以解决问题。
功能包括:监视,热代码重载,内置负载平衡器,自动启动脚本以及复活/转储过程。
尝试node-deploy-server。它是用于将应用程序部署到专用服务器上的复杂工具集。它是用Node.js编写的,并使用npm进行安装。