Nodejs开发部署环节整理
做web网站开发一般都会分为三个环节:开发阶段【开发模式】、调试阶段【调试模式】、部署阶段【部署模式】
在Node的环境中:
开发阶段我们希望能够即使响应我们的开发速度,node启动的方式大家都知道 node app.js ,如果中间有修改的话,就不能即使响应了,需要我们自己再去重新启动。
所以我们的开发阶段最好是安装一下supervisor
安装
1 | npm install --save-dev supervisor |
启动
1 | supervisor app.js or supervisor www/bin |
【此种方法启动,需要作为一个全局去安装supervisor】
我的实践是把package.json里的start
1 | "scripts": { |
然后
1 | npm start |
调试阶段,我们肯定是希望监测每个请求的响应结果,一旦出现问题可以直接更加友好的展示给我们:
推荐node-inspector
安装
1 | npm install --save node-inspector |
启动
1 | node-inspector app.js or node-debug www/bin |
【此种方法启动,需要作为一个全局去安装supervisor】
我的实践是把package.json里的d里
1 | "scripts": { |
然后执行
1 | npm run d |
部署阶段就是我们通常所说的生产环境或者是产品上线
推荐使用pm2
pm2是非常优秀工具,它提供对基于node.js的项目运行托管服务。它基于命令行界面,提供很多特性:
内置的负载均衡器(使用nodecluster module)
以守护进程运行
0s(不间断)重启
为ubuntu/ CentOS 提供启动脚本
关闭不稳定的进程(避免无限死循环)
基于控制台监控
HTTP API
远程控制以及实时监控接口
pm2使用nodecluster构建一个内置的负载均衡器。部署多个app的实例来达到分流的目的以减轻单app处理的压力。
安装pm2
1 | npm install -g pm2 |
查看基本帮助文档
Basic Examples:
Start an app using all CPUs available + set a name : $ pm2 start app.js -i 0 --name "api" Restart the previous app launched, by name : $ pm2 restart api Stop the app : $ pm2 stop api Restart the app that is stopped : $ pm2 restart api Remove the app from the process list : $ pm2 delete api Kill daemon pm2 : $ pm2 kill Update pm2 : $ npm install pm2@latest -g ; pm2 updatePM2 More examples in https://github.com/Unitech/pm2#usagefeatures
Deployment help:
$ pm2 deploy help
上面基本是我们比较常用的
我们也可以把启动信息写入到json配置文件中->ecosystem.json
1 | { |
pm2的当然还有一些其他的用法:
1、pm2远程部署
1 | pm2 deploy ecosystem.json production setup |
2、pm2 cluster启动
1 | pm2 start app.js -i 0 --name "apps" |
3、pm2 重启实例
1 | pm2 reload <name> |
4、pm2 命令行监测
1 | pm2 monit |
5、pm2 查看实例日志
1 | pm2 logs 或 pm2 logs <name> 或 pm2 flush |
6、pm2 开机启动
1 | pm2 startup <ubuntu|centos|gentoo|systemd> |
7、pm2 web方式监测
1 | pm2 web |
之后要考虑的就是服务器的监测以及如果给node做反向代理
比如:
nginx或haproxy的部署,也可以使用nginx+passenger进行部署
mongodb的部署
mysql的部署
redis的部署
还要对服务器进行压测
apache ab
wrk
以及性能调优和监控