结合过去一周内收集的所有知识和经过测试的方法,我决定选择以下所述的部署解决方案(我想与其他人分享类似的问题,我很乐意为他人提供帮助) ):
只要脚本是在node.js脚本中生成的, forever
就可以自动处理脚本错误 并 在脚本更改时自动重新加载 ,因为它还包括脚本监视功能。
****
为此,我添加了一个
server.js启动
app.js我们实际上要运行的脚本:
server.js
var forever = require('forever'), child = new(forever.Monitor)('app.js', { 'silent': false, 'pidFile': 'pids/app.pid', 'watch': true, 'watchDirectory': '.', // Top-level directory to watch from. 'watchIgnoreDotFiles': true, // whether to ignore dot files 'watchIgnorePatterns': [], // array of glob patterns to ignore, merged with contents of watchDirectory + '/.foreverignore' file 'logFile': 'logs/forever.log', // Path to log output from forever process (when daemonized) 'outFile': 'logs/forever.out', // Path to log output from child stdout 'errFile': 'logs/forever.err' });child.start();forever.startServer(child);这将监视应用程序目录中的所有文件的更改,并在更改一次后重新启动运行的脚本
forever。由于日志和pidfile位于应用程序的子目录中,因此必须从文件监视中忽略它们,否则脚本将循环重启:
.foreverignore
pids/**logs/**
为了使这一切在系统启动时启动,并使我们能够轻松地使用来控制服务
start node-app,
stop node-app我们使用Ubuntu的Upstart。我将两个示例(这个和这个例子)组合在一起,可以很好地完成工作:
/etc/init/node-app.conf
# This is an upstart (http://upstart.ubuntu.com/) script# to run the node.js server on system boot and make it# manageable with commands such as# 'start node-app' and 'stop node-app'## This script is to be placed in /etc/init to work with upstart.## Internally the 'initctl' command is used to manage:# initctl help# initctl status node-app# initctl reload node-app# initctl start node-appdescription "node.js forever server for node-app"author "Remco Overdijk <remco@maxserv.nl>"version "1.0"expect fork# used to be: start on startup# until we found some mounts weren't ready yet while booting:start on started mountallstop on shutdown# Automatically Respawn:respawnrespawn limit 99 5env HOME=/home/user/node-app-dirscript # Not sure why $HOME is needed, but we found that it is: export HOME=$HOME chdir $HOME exec /usr/local/bin/node server.js > logs/node.log &end script#post-start script# # Optionally put a script here that will notifiy you node has (re)started# # /root/bin/hoptoad.sh "node.js has started!"#end script
正如Kevin在他的文章中明智地提到的那样,以root身份运行节点是不明智的,因此我们将其更改为
execsudo -u www-data /usr/local/bin/node下周移至新服务器的时间。
因此,
forever会自动启动
node server.js,由来启动
upstart,并监视崩溃和文件更改,从而使整个设置始终保持运行所需的时间。
我希望这对任何人都有帮助。



