精华 阿里云主机Nginx下配置NodeJS、Express和Forever
发布于 12 年前 作者 zensh 93327 次浏览 最后一次编辑是 8 年前

AngularJS中文社区即运行在阿里云主机上,本站使用Nginx引擎,为了AngularJS,我决定将它的黄金搭档NodeJS也架设起来。

我使用了LuManager来管理服务器,LuManager是十分强大且方便的服务器管理软件,没接触过的朋友建议去官网看看。

一、Nginx站点与NodeJS站点共存的配置

首先是网站入口问题,Nginx使用了80端口,NodeJS使用8080端口。我们利用Nginx的“proxy_pass”将对80端口NodeJS站点的访问导向8080端口,在LuManager中,这个配置十分简单:<!–more–>

*1、*进入LuManager后台,用“快速建站”建立NodeJS网站,如testnodejs.com网站,这里也可建立多个NodeJS网站,网站域名按如下方式填写即可:

testnodejs.com *.testnodejs.com testnodejs2.com *.testnodejs2.com

使他们指向共同的NodeJS网站群根目录,如nodejs目录。

2、然后为NodeJS网站配置Nginx,修改该NodeJS网站配置,进入选填项,在Nginx扩展设置(location段)**添加如下代码:

proxy_pass http://127.0.0.1:8080;

如此以来,外部对testnodejs.com、testnodejs2.com等NodeJS网站的访问全部转向了8080端口,NodeJS监听8080端口即可。而该NodeJS网站群的根目录即上面设置的nodejs目录,我们可在该目录中再搭设testnodejs.com、testnodejs2.com等虚拟站点。

二、安装NodeJS

NodejS目前最新稳定版是0.8.9,在阿里云CentOS6.2环境中,根据以下步骤即可成功安装:

wget http://nodejs.org/dist/v0.8.9/node-v0.8.9.tar.gz
tar zxvf node-v0.8.9.tar.gz
cd node-v0.8.9
./configure --prefix=/home/node/0.8.9
make
make install

我的阿里云主机编译过程大概花了7分钟,安装成功后配置系统环境,使node命令可用:

echo "export PATH=$PATH:/home/node/0.8.9/bin" >> ~/.bash_profile
. ~/.bash_profile

第一行将/home/node/0.8.9/bin添加到系统环境(root目录下的.bash_profile文件),第二行执行该文件更新$PATH变量,我们可以使用echo $PATH命令查看是否添加进去。现在,我们在命令行输入node --help测试一下:

enter image description here

至此,NodeJS安装完毕。

三、安装Express框架

使用NodeJS几乎是必装express框架,使用下面命令即可安装:

npm install express -gd

其中g参数是把express安装到NodeJS的lib目录,d参数表示同时安装依赖模块包。安装完毕后切换到NodeJS模块目录,然后执行npm命令查看所有NodeJS模块:

cd /home/node/0.8.9/lib
npm list
npm outdated
npm update

上面第二个命令是列出所有NodeJS目录下的模块,第三个命令是检查模块是否有更新,第四个命令是更新当前目录可更新的模块。

至此,Express安装完毕,我们可以在网站目录下建一个基于express的应用:

express testapp
cd testapp
npm install
node app.js

上面第三个命令是安装该testapp应用的依赖模块包,第四个命令即运行testapp应用。我们看到提示“Express server listening on port 3000”,目前该应用使用的是3000端口,我们要改成8080端口,用编辑器打开app.js,代码如下:

/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 8080);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

app.get('/', routes.index);
app.get('/users', user.list);

http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

上面第14行,我已将端口改成8080,然后运行node app.js,这个简单的基于NodeJS和Express的网站就开始运行了,从浏览器进入该NodeJS站点,即可看到效果(我使用了域名weizt.com):

enter image description here

四、安装Forever后台管理器

我们不可能直接通过node命令来管理远程站点,这样无法保证网站的可持续运行。我们用Forever来解决这个问题,它可以将NodeJS应用以后台守护进程的方式运行,我们还可以将NodeJS应用设成随系统启动而自动运行。

首先,安装Forever:

npm install forever -gd

这样Forever就安装好了,我们可以直接运行Forever命令:

forever --help
forever start app.js
forever stop app.js

上面命令先查看Forever帮助文件,然后运行app.js,然后停止app.js。我们要让Forever自动运行,先在/etc/init.d目录创建一个文件node,内容如下:

#!/bin/bash
#
# node      Start up node server daemon
#
# chkconfig: 345 85 15
# description: Forever for Node.js
#
PATH=/home/node/0.8.9/bin
DEAMON=/home/ftp/1520/weizt-20120918-tKx/weizt.com/app.js
LOG=/home/hosts_log
PID=/tmp/forever.pid

case "$1" in
    start)
        forever start -l $LOG/forever.log -o $LOG/forever_out.log -e $LOG/forever_err.log --pidFile $PID -a $DEAMON
        ;;
    stop)
        forever stop --pidFile $PID $DEAMON
        ;;
    stopall)
        forever stopall --pidFile $PID
        ;;
    restartall)
        forever restartall --pidFile $PID
        ;;
    reload|restart)
        forever restart -l $LOG/forever.log -o $LOG/forever_out.log -e $LOG/forever_err.log --pidFile $PID -a $DEAMON
        ;;
    list)
        forever list
        ;;
    *)
        echo "Usage: /etc.init.d/node {start|stop|restart|reload|stopall|restartall|list}"
        exit 1
        ;;
esac
exit 0

以上代码是我在本地虚拟机的配置,根据实际情况修改相关参数,主要是DEAMON的路径参数,赋予该文件可执行权限,并运行chkconfig添加自动运行:

chmod 755 /etc/init.d/node
chkconfig /etc/init.d/node on

reboot重启系统,通过浏览器进入网站可发现,该NodeJS已经可自动运行了,剩下的工作,就是好好研究NodeJS、Express和AngularJS,做一个真正属于自己的应用!

37 回复

收藏,感谢分享

好文章啊,收藏关注啦~

好文,顶起来~

赞,对我的帮助很大,非常感谢

赞,不过有些图片显示不了

强烈不建议你使用阿里去 linode性价比比阿里云高多了

很有帮助,多谢

非常好,必须收藏

阿里云不行了,你就提工单,立马有工程师给你解决

我用的就是阿里云,forever没有做到开机启动项里而已,http://www.9958.pw

@ldl694178563 我用forever 启动node.js 但是服务挂掉后。不会自动重起。

是不会,挂的几率比较小,如果挂了,上去手动重启下,我现在就是这么干的,个人的嘛,就先这样了

Perl is not installed 安装失败。。。。换了好几台机器都不行,阿里云 Ubuntu 14

@jeremy16601 这帖子有点老了

我正在做 哈哈 加个好友吧~~

不错 图挂了

forever 和 pm2 大家推荐用哪个呢?

mongodb 国内有好的服务商吗 没数据库你就把app放到阿里云上面也没有用啊

XEN的512M够玩这些吗 买不起好的呀…

@chloe 已经入坑,就图个快,某天不想用阿里云了,就去linode

forever 性能怎么样?

mark,5 年前发的贴。被人 mark 出来了。

这帖子也太老了吧 nodejs 0.8.9

@frank320 是啊,那时候我刚开始学编程

哈哈,挖坟了

回到顶部