Aks*_*lén 19 installation web-applications webfaction node.js
在Webfaction共享主机帐户上设置Node.js应用程序需要哪些步骤?
Aks*_*lén 56
以下指令的结果是一个连续运行的Node.js应用程序,即使在重新启动服务器计算机后也会生成日志文件并重新启动.这些说明特别针对Webfaction上的共享主机帐户,但也可用于通用目的.
尽管Node.js下载页面提供了Linux二进制文件,但从源代码安装Node.js会更加健壮.下载最新的源代码并将其解压缩到~/src/
.
(log in to your webfaction console)
> mkdir -p ~/src/
> cd src/
> wget http://nodejs.org/dist/v0.10.18/node-v0.10.18.tar.gz
> tar -xzf node-v0.10.18.tar.gz
Run Code Online (Sandbox Code Playgroud)
下一步是编译和安装代码.为此,使用了Python.因为默认python
版本是2.4(至少在我的Webfaction服务器web223上)并且因为Node.js安装需要2.6+版本之一,所以必须临时将较新版本设置为默认版本.请参阅以下代码段(有关详细信息,另请参阅此文章).注意--prefix=$HOME
由于Webfaction的环境限制而需要哪些(您只能访问您的主目录).
> cd node-v0.10.18/
> alias python=python2.7
> python configure --prefix=$HOME
> make
> make install
Run Code Online (Sandbox Code Playgroud)
已安装Node.js. 验证成功
> node -v
v0.10.18
Run Code Online (Sandbox Code Playgroud)
那还安装了节点包管理器npm
.
> npm -v
1.3.8
Run Code Online (Sandbox Code Playgroud)
要尽可能长时间地运行Node.js应用程序并记录输出以进行维护,您需要Forever.为方便起见,使用flag在全局(为您)安装它-g
.
> cd ~
> npm install -g forever
> forever --version
v0.10.8
Run Code Online (Sandbox Code Playgroud)
您可以稍后更新
> npm update -g forever
Run Code Online (Sandbox Code Playgroud)
首先,通过Webfaction控制面板(自定义应用程序(侦听端口))创建自定义应用程序.将其命名为例如foonode.您还可以为该应用创建域和网站.
其次,记下Webfaction为应用程序提供的套接字端口号.让这个例子是48888.
第三,将您的应用程序代码复制到应用程序的目录即~/webapps/foonode/
.之后,目录内容将例如如下.
> cd ~/webapps/foonode/
> ls
node_modules/
index.js
Run Code Online (Sandbox Code Playgroud)
Index.js就像下面的代码片段.关键点是使用应用程序的给定端口号.
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello Universe.\n');
}).listen(48888, '127.0.0.1');
console.log('Listening at http://127.0.0.1:48888/');
Run Code Online (Sandbox Code Playgroud)
现在你可以运行应用程序了node index.js
.但是有一个问题:退出shell时,也会退出应用程序.因此,您应该将Node.js作为守护程序运行.这就是Forever为你做的很多事情.永远启动节点:
> cd ~/webapps/foonode/
> forever start index.js
Run Code Online (Sandbox Code Playgroud)
现在,应用程序在您注销后继续运行,并且作为一件非常好的事情,如果碰巧崩溃,将很快重新启动.这很多但仍然不够.如果服务器重新启动怎么办?应用程序的输出在哪里?如果脚本连续崩溃怎么办?如果您有多个带有名称的脚本index.js
怎么办?继续阅读.
Forever通过输入的脚本的文件名识别进程forever start <filename_of_script>
.当您有多个具有相同文件名的应用程序时,会出现问题.
例如,考虑您有两个应用程序/home/foouser/webapps/foonode/index.js
和/home/foouser/webapps/barnode/index.js
.如果现在forever start index.js
在应用程序的目录中启动,然后forever stop index.js
只运行一次,结果是两个应用程序都停止了.发生这种情况是因为它们都具有相同的身份index.js
解决方案是在指定脚本时使用绝对文件路径.
> forever start /home/foouser/webapps/foonode/index.js
Run Code Online (Sandbox Code Playgroud)
并停止执行:
> forever stop /home/foouser/webapps/foonode/index.js
Run Code Online (Sandbox Code Playgroud)
这可确保仅停止预期的应用程序.这种使用绝对路径的习惯也会产生积极的影响forever list
.有关详细信息,请参阅此问
要将应用程序输出存储到某处,请指定以下参数.
-l <logfile> = stream all output to this file. Relative to ~/.forever/
-o <logfile> = stream script's stdout to this file. Relative to current dir.
-e <logfile> = stream script's stderr to this file. Relative to current dir.
-a = append to the files instead of overwriting them.
Run Code Online (Sandbox Code Playgroud)
拥有日志的子目录似乎很方便,例如logs/
.使用参数,绝对路径和子目录logs /该命令将变为以下内容:
> cd ~/webapps/foonode/
> mkdir -p logs/
> forever start -a -l forever.log -o logs/out.log -e logs/err.log /home/foouser/webapps/foonode/index.js
Run Code Online (Sandbox Code Playgroud)
永远有参数--minUptime
和--spinSleepTime
未这么好当前记录.参数的含义是控制脚本崩溃的情况,并在重启后几乎立即崩溃.由于永远尝试在崩溃后尽快重启脚本,这可能导致繁忙的循环,这可能会占用服务器的大量资源.
--minUptime
指定脚本必须启动并运行的毫秒数,而不会立即重新启动崩溃.如果崩溃脚本的正常运行时间小于minUptime,那么脚本被认为是旋转,即有问题.如果正常运行时间更长,那么脚本将被视为非旋转.
如果旋转脚本崩溃,即脚本的正常运行时间小于,--minUptime
则--spinSleepTime
在重新启动脚本之前永远等待毫秒数.否则,脚本会尽快重启.这可以防止资源循环.请参阅此答案以进一步讨论.
我个人使用5000 --minUptime
来确保Node在声明非旋转之前完全启动.2000将是一个很好的--spinSleepTime
避免循环,但仍然试图在问题情况结束后快速启动脚本.
> forever start -a -l forever.log -o logs/out.log -e logs/err.log --minUptime=5000 --spinSleepTime=2000 /home/foouser/webapps/foonode/index.js
Run Code Online (Sandbox Code Playgroud)
随着命令的增长,记忆和编写它们变得越来越麻烦.因此,将它们复制到Makefile很方便.当您需要指定在服务器重新启动后运行的命令时,makefile也会变得很方便.
> cd ~/webapps/foonode/
> cat Makefile
foreverstart:
# Run server forever (until reboot)
mkdir -p logs
forever start -a -l forever.log -o logs/out.log -e logs/err.log --minUptime 5000 --spinSleepTime 2000 /home/foouser/webapps/foonode/index.js
foreverstop:
forever stop /home/foouser/webapps/foonode/index.js
Run Code Online (Sandbox Code Playgroud)
Forever不包括服务器重新启动的情况.为此,您需要指定一个带有@reboot
规则的cronjob,它可以在重新启动后立即启动.
> export EDITOR=nano # Editor to use to edit crontab. A matter of taste.
> crontab -e
Run Code Online (Sandbox Code Playgroud)
添加以下行并保存.
@reboot make -C ~/webapps/foonode/ -f ~/webapps/foonode/Makefile foreverstart
Run Code Online (Sandbox Code Playgroud)
该行确保在服务器重新启动后立即启动foonode.该标志-C
指定运行makefile的目录以及makefile -f
的实际位置.见这个答案如何使用的详细信息@reboot
.
现在你有一个节点进程真正永远运行,或者至少只要有维护人员给服务器供电.很多事情已经完成,但可能还会有更多.您可能希望将来做的事情包括以下内容.
--watch
中forever --help
)也可以看看
任何想法,评论或更正?