【介绍】
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用来方便地搭建快速的易于扩展的网络应用。
Node.js 的包管理器 npm,是全球最大的开源库生态系统。
【环境】
注意:操作系统的版本会影响,Nodejs的特性在64位、32位下很可能不兼容。别用老旧系统版本,直接使用最新的64位CentOS7。
比如:在搬瓦工的CentOS6系统下报错:
-bash: /usr/local/bin/node: cannot execute binary file
【安装】
NVM(Node version manager)是Node.js的版本管理软件,使用户可以轻松在Node.js各个版本间进行切换。
git clone https://github.com/cnpm/nvm.git ~/.nvm && cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`
激活NVM:
echo ". ~/.nvm/nvm.sh" >> /etc/profile source /etc/profile
列出Node.js的所有版本:
nvm list-remote
安装多个Node.js版本:
nvm install v6.9.5 nvm install v7.4.0
注意,不同的Node.js版本对应不同的gzip版本。
gzip版本符合要求,返回:
######################################################################## 100.0% Checksums empty Now using node v7.4.0
gzip版本不符合要求,返回:
######################################################################## 100.0% Checksums empty gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting now Binary download failed, trying source.
查看已安装Node.js版本:
nvm ls
输出:
v6.9.5 -> v7.4.0 system stable -> 7.4 (-> v7.4.0) (default) unstable -> 6.9 (-> v6.9.5) (default)
切换Node.js版本:
nvm use v6.9.5
输出:
Now using node v6.9.5
NVM的更多操作请参考帮助文档:
nvm help
【部署】
参考:http://www.tfan.org/nodejs-running-on-port-80-with-apache/
参考:https://blog.csdn.net/gaoxuaiguoyi/article/details/50927661
参考:https://blog.csdn.net/ruzhuxiaogu/article/details/52663657
参考:http://stackoverflow.com/questions/12701259/how-to-make-a-node-js-application-run-permanently
参考:https://zfanw.com/blog/apache-proxy-node-js.html
参考:https://help.aliyun.com/document_detail/50775.html
参考:https://www.zhihu.com/question/19887245
参考:https://www.jianshu.com/p/ee935729f49c
参考:https://segmentfault.com/a/1190000010205995
可使用 Apache 的 Proxy mode 使 Node.js 和 Apache 共用 80 端口。
首先,在 Apache 的配置文件中,开启 mod_proxy 和 mod_proxy_http:
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so
在vhost文件中添加:
<VirtualHost *:80> ServerName amon.org ServerAlias www.amon.org ProxyRequests off <Proxy *> Order deny,allow Allow from all </Proxy> <Location /> ProxyPass https://amon.org:3000/ ProxyPassReverse https://amon.org:3000/ </Location> DocumentRoot /usr/local/apache2/htdocs/amon.org <Directory "/usr/local/apache2/htdocs/amon.org"> AllowOverride All </Directory> ErrorLog /usr/local/apache2/htdocs/logs/error.log CustomLog /usr/local/apache2/htdocs/logs/access.log combined </VirtualHost>
写一个index.js文件
var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); app.get('/', function(req, res){ res.send('<h1>Welcome Realtime Server</h1>'); }); http.listen(3000, function(){ console.log('listening on *:3000'); });
运行一下 Node.js 脚本:
node index.js
报错:
... Error: Cannot find module 'express' ...
参考:http://www.cnblogs.com/yumianhu/p/3732668.html
到当前项目目录下执行命令:
npm link express
报错:
... Error: Cannot find module 'socket.io' ...
参考:http://www.cnblogs.com/yumianhu/p/3732668.html
到当前项目目录下执行命令:
npm link socket.io
输出:
listening on *:3000
重启httpd,然后访问配置的虚拟主机 www.amon.org ,页面显示:
Welcome Realtime Server
证明部署成功。