====== Node.js的安装和配置 ====== 本文以[[http://www.centos.org/|CentOS]] 6为例,讲述在Linux下安装配置[[http://nodejs.org/|Node.js]]的过程。 ===== 安装 ===== ==== Node安装 ==== Node.js的安装方法有很多种:可从源代码编译安装,可通过发行版的包管理器安装(CentOS需要启用[[https://fedoraproject.org/wiki/EPEL|EPEL]]源),也可从官网下载二进制包手工安装。详情可参考官方说明:[[https://github.com/joyent/node/wiki/Installation|Installation]]。 由于Node的开发非常活跃,版本更新很快,第三方软件源的更新不一定及时。而且实际应用中会安装很多包模块,这些包模块同样可手工安装,部分也可以通过包管理器安装,从而可能会导致潜在的冲突。因此,当你决定了某种安装方式后,最好坚持使用它。 这里选择手工安装方式。 从官方下载最新的二进制安装包,如node-v0.10.13-linux-x64.tar.gz,由root安装到/usr/local下: cd /usr/local/ tar xzvf node-v0.10.13-linux-x64.tar.gz chown -R root:root node-v0.10.13-linux-x64/ 使用时,在环境变量PATH中增加Node的所在路径。如编辑用户的.bashrc,添加: export PATH=$PATH:/usr/local/node-v0.10.13-linux-x64/bin export MANPATH=$MANPATH:/usr/local/node-v0.10.13-linux-x64/share/man ==== 全局包的安装 ==== 所有的Node包都统一选择[[https://npmjs.org/|npm]]工具来安装。 对于全局安装的包,需要root权限。 例如,安装[[http://expressjs.com/|express]](一个轻量级的web框架): npm install express -g npm会将express与node安装在一起,即/usr/local/node-v0.10.13-linux-x64/bin目录下。 ==== 普通包的安装 ==== 编辑应用的package.json,指定依赖的软件包,如: "dependencies": { "mongodb": "1.3.9", ... } 然后执行: npm install 软件包的相关文件会安装到应用的node_modules目录下。 ===== 升级 ===== ==== Node升级 ==== Node的升级很简单,获取新版的软件(如node-v0.10.15-linux-x64.tar.gz),解压到指定目录下,重新设置用户的PATH环境变量即可。 这样做的一个额外好处是,多个版本的Node可以共存,用户可以自由选择想用的版本。 ==== 全局包的升级 ==== 需要root执行。如升级express: npm update express -g ==== 普通包的升级 ==== 编辑应用的package.json,更新软件包的版本号,如: "dependencies": { "mongodb": "1.3.11", ... } 完毕执行: npm install npm会自动更新软件包的相关文件。 ===== 运行 ===== ==== 手工模式 ==== 在开发阶段,一般都是手工运行程序。假设当前以一个普通用户nodejs的身份,要开发一个基于express框架的web应用。 首先运行express命令生成基本的代码结构: express -e -s site 安装所有依赖包: cd site npm install 运行: node app.js 这样,一个简单的web服务就运行起来了。 ==== Init脚本 ==== 当应用开发完毕后,最终要象其他服务器那样部署,为此,要编写相关的init控制脚本。 CentOS 6的init系统是[[http://upstart.ubuntu.com/|Upstart]],故这里按照Upstart的机制来编写脚本。其他的init控制系统思路类似,请参考相关文档。 新建配置文件/etc/init/node.conf: # simple Node.js script description "Node.js service" start on runlevel [2345] stop on runlevel [06] env PATH=/usr/local/node-v0.10.15-linux-x64/bin/:$PATH #env NODE_ENV=production chdir /home/nodejs/site exec node app.js >/home/nodejs/site/log/console.log 2>&1 几点说明: * 这里需要设置PATH环境变量,因为node不在系统基本的PATH路径里;也可在exec处,提供绝对路径的node,效果是一样的。 * 环境变量NODE_ENV与express框架相关。 * 较新版本的Upstart提供了console log功能,可以将控制台输出到日志里,就不用象上面那样手工定向了。 * 这样配置的进程运行在root权限下,较新版本的Upstart提供了setuid/setgid可以降权,但如果服务要绑定特权端口(1024以下),则只能在代码里调用process.setuid/process.setgid来实现了。 配置完毕,系统启动时,应用服务也将自动启动。 手动启动: start node 手动停止: stop node 查看状态: status node 有关Upstart的更多信息可参考[[http://upstart.ubuntu.com/cookbook/|Upstart Intro, Cookbook and Best Practises]]。 {{tag>Node.js}}