在Webfaction上设置Node.js.

时间:2013-09-08 19:37:50

标签: node.js web-applications installation webfaction

Node.js共享主机帐户上设置Webfaction申请所需的步骤是什么?

3 个答案:

答案 0 :(得分:55)

简介

以下说明的结果是一个连续运行的Node.js应用程序,即使在重新启动服务器计算机后也会生成日志文件并重新启动。该说明特别针对Webfaction上的共享主机帐户,但也可用于一般用途。

安装Node.js

尽管Node.js download page提供了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

下一步是编译和安装代码。为此,使用了Python。因为默认的python版本是2.4(至少在我的Webfaction服务器web223上)并且因为Node.js安装需要其中一个版本2.6+,所以必须临时将较新的版本设置为默认版本。请参阅以下代码段(有关详细信息,另请参阅this article)。请注意由于Webfaction的环境限制而需要的--prefix=$HOME(您只能访问您的主目录)。

> cd node-v0.10.18/
> alias python=python2.7
> python configure --prefix=$HOME
> make
> make install

安装了Node.js.

验证成功
> node -v
v0.10.18

这也安装了节点包管理器npm

> npm -v
1.3.8

永久安装

要尽可能长时间地运行Node.js应用程序并记录输出以进行维护,您需要Forever。为方便起见,使用标记-g全局(为您)安装它。

> cd ~
> npm install -g forever
> forever --version
v0.10.8

您可以稍后通过

永久更新
> npm update -g forever

启动应用程序

首先,通过Webfaction Control Panel创建自定义应用程序(自定义应用程序(侦听端口))。将其命名为例如 foonode 。您还可以为该应用创建域名和网站。

其次,记下Webfaction为应用程序提供的套接字端口号。让示例为 48888

第三步,将您的应用程序代码复制到应用程序目录,即~/webapps/foonode/。之后,目录内容将例如如下。

> cd ~/webapps/foonode/
> ls
node_modules/
index.js

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/');

现在您可以按node index.js运行该应用。但是有一个问题:退出shell时,也会退出应用程序。因此,您应该将Node.js作为a daemon运行。这就是Forever为你做的很多事情。永远启动节点:

> cd ~/webapps/foonode/
> forever start index.js

现在应用程序在您注销后继续运行,并且作为一件非常好的事情,如果发生崩溃,将很快重新启动。这很多但仍然不够。如果服务器重新启动怎么办?应用程序的输出在哪里?如果脚本连续崩溃怎么办?如果您有多个名称为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

停止执行:

> forever stop /home/foouser/webapps/foonode/index.js

这可确保只停止预期的应用程序。这种使用绝对路径的习惯对forever list也有积极的影响。有关详细信息,请参阅this issue

登录

要将应用程序输出存储到某处,请指定以下参数。

-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.

拥有日志的子目录似乎很方便,例如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

检测并重新启动旋转过程

Forever的参数--minUptime--spinSleepTime目前尚未完整记录。参数的含义是控制脚本崩溃的情况,并在重启后几乎立即崩溃。由于永远尝试在崩溃后尽快重启脚本,这可能导致繁忙的循环,这可能会占用服务器的大量资源。

--minUptime指定脚本必须启动并运行的毫秒数,而不会立即重新启动崩溃。如果崩溃脚本的正常运行时间小于minUptime,则认为脚本正在旋转,即有问题。如果正常运行时间更长,那么脚本将被视为非旋转

如果旋转脚本崩溃,即脚本的正常运行时间小于--minUptime,则在重新启动脚本之前永远等待--spinSleepTime毫秒。否则,脚本会尽快重启。这可以防止资源循环。有关进一步的讨论,请参阅this answer

我个人使用5000 --minUptime来确保Node在声明非旋转之前完全启动。对于--spinSleepTime来说,2000是一个很好的避免循环,但在问题情况解决后仍然试图快速启动脚本。

> forever start -a -l forever.log -o logs/out.log -e logs/err.log --minUptime=5000 --spinSleepTime=2000 /home/foouser/webapps/foonode/index.js

管理应用程序

随着命令的增长,记忆和编写命令变得越来越麻烦。因此,将它们复制到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

保持应用程序运行

永远不包括服务器重新启动的情况。为此,您需要使用@reboot规则指定a cronjob,以便在重新启动后永久启动。

> export EDITOR=nano   # Editor to use to edit crontab. A matter of taste.
> crontab -e

添加以下行并保存。

@reboot make -C ~/webapps/foonode/ -f ~/webapps/foonode/Makefile foreverstart

该行确保在服务器重启后立即启动foonode。标志-C指定运行makefile的目录,并-f指定makefile的实际位置。请参阅this answer for details about using @reboot

结论

现在你有一个节点进程真正永远运行,或者至少只要有维护人员给服务器供电。很多事情已经完成,但可能还会有更多。您可能希望将来做的事情包括以下内容:

  • 观察文件更改并在检测到时自动重新启动(请参阅--watch中的forever --help
  • 使用Grunt.js而不是Make(请参阅bustardcelly/grunt-forever
  • 偶尔备份应用程序。

另见

任何想法,评论或更正?

答案 1 :(得分:6)

好吧,你可能已经按照了另一个答案中的所有步骤(哇!这么详细!很棒),但它现在变得容易多了:他们now有一个node.js的单击安装程序。

答案 2 :(得分:1)

另一种选择是安装nvm(节点版本管理器)并输入:

nvm install node

它不仅对Webfaction有效。