318-pm2搭建node生产环境(第一步)

96
霄峰
2018.06.24 16:23* 字数 377

PM2

地址 : https://github.com/Unitech/pm2

pm2 是一个带有负载均衡功能的Node应用的进程管理器.
当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的。它非常适合IaaS结构,但不要把它用于PaaS方案(随后将开发Paas的解决方案).

备注:SaaS、PaaS和IaaS是云服务模式。
SaaS 软件即服务,例如Google的 Gmail 邮箱服务.面向应用型用户.
PaaS 平台即服务.例如Google的GAE,面向开发型用户
IaaS 基础架构即服务,例如亚马逊的AWS,IaaS对于不知道新推出的应用程序/网站会有多成功的创业公司来说非常有用
请参考 云服务模式:SaaS、PaaS和IaaS,哪一种适合你?

主要特性:
内建负载均衡(使用Node cluster 集群模块)
后台运行
0秒停机重载,我理解大概意思是维护升级的时候不需要停机.
具有Ubuntu和CentOS 的启动脚本
停止不稳定的进程(避免无限循环)
控制台检测
提供 HTTP API
远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )

检查npm版本,最小版本v6.1.0

$ npm -v

v5.6.0

升级npm

$ npm i -g npm

1. 安装pm2

npm install -g pm2

进入到你的node项目下:

pm2 start index.js --name 'test' # index.js是我的启动脚本

scort@scort-Lenovo-IdeaPad-U310:~/websocket$ pm2 start index.js --name 'test'
[PM2] Starting /home/scort/websocket/index.js in fork_mode (1 instance)
[PM2] Done.
┌───────┬──────┬─────────┬───┬─────┬───────────┐
│ Name  │ mode │ status  │ ↺ │ cpu │ memory    │
├───────┼──────┼─────────┼───┼─────┼───────────┤
│ index │ fork │ stopped │ 0 │ 0%  │ 0 B       │
│ test  │ fork │ online  │ 0 │ 0%  │ 19.4 MB   │
└───────┴──────┴─────────┴───┴─────┴───────────┘
 Use `pm2 show <id|name>` to get more details about an app

监视

$ pm2 moint  
image.png

2. 把pm2加入系统启动中

$ pm2 startup ubuntu

[PM2] Init System found: systemd
-----------------------------------------------------------
 PM2 detected systemd but you precised ubuntu
 Please verify that your choice is indeed your init system
 If you arent sure, just run : pm2 startup
-----------------------------------------------------------
Platform ubuntu
Template
[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target

[Service]
Type=forking
User=root
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/usr/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/root/.pm2
PIDFile=/root/.pm2/pm2.pid

ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/usr/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/usr/lib/node_modules/pm2/bin/pm2 kill

[Install]
WantedBy=multi-user.target

Target path
/etc/systemd/system/pm2-root.service
Command list
[ 'systemctl enable pm2-root' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-root.service
[PM2] Making script booting at startup...
[PM2] [-] Executing: systemctl enable pm2-root...
Created symlink from /etc/systemd/system/multi-user.target.wants/pm2-root.service to /etc/systemd/system/pm2-root.service.
[PM2] [v] Command successfully executed.
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save

[PM2] Remove init script via:
$ pm2 unstartup ubuntu

保存

$ pm2 save

[PM2] Saving current process list...
[PM2] Successfully saved in /root/.pm2/dump.pm2
Ubuntu服务器