pm2搭建node生产环境 Linux & FreeBSD

CentOS 下的pm2布署

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

$ npm -v
v5.6.0

如果npm版本小于v.6.1.0 在线升级 npm

$ npm i -g npm

1. 安装pm2 (-g 全局安装)

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    │
├───────┼──────┼─────────┼───┼─────┼───────────┤
│ test  │ fork │ online  │ 0 │ 0%  │ 19.4 MB   │
└───────┴──────┴─────────┴───┴─────┴───────────┘
 Use `pm2 show <id|name>` to get more details about an app

2. 把pm2加入系统启动中

pm2的启动脚本

vi /usr/lib/systemd/system/pm2-root.service

[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

设置为开机启动

systemctl enable pm2-root

保存 pm2 的当前运行环境

$ pm2 save

[PM2] Saving current process list...
[PM2] Successfully saved in /root/.pm2/dump.pm2

然后 reboot 重启系统

 

执行 pm2-root 的命令 

systemctl start pm2-root #启动pm2
systemctl restart pm2-root #重启pm2
systemctl enable pm2-root #停止pm2

 

FreeBSD 下的布署

1、BSD下环境安装,采用 ports 安装 

cd /usr/ports/www/node && make install clean
cd /usr/ports/www/npm && make install clean

2、全局安装PM2 

npm install -g pm2

3、布置应用环境,如上CENTOS相同

先在布署目录下执行  pm2 start index.js --name 'test'# index.js

再保存pm2的运行状态 pm2 save

4、设置PM2随系统自动启动
pm2 的执行脚本,放到 /usr/local/etc/rc.d/ 目录下。

vi /usr/local/etc/rc.d/pm2

#!/bin/sh

# PM2 Startup script
#
# Make the file executable with:
# /usr/local/etc/rc.d/pm2 (chmod +x)
#
# add to /etc/rc.conf
#
# pm2_enable="YES"
# pm2_user="root"

# PROVIDE: pm2
# REQUIRE: NETWORK mongod
# KEYWORD: shutdown
#
 
. /etc/rc.subr
 
name=pm2
rcvar=pm2_enable
 
PM2=/usr/local/lib/node_modules/pm2/bin/pm2
 
load_rc_config $name
 
start_cmd="pm2_start"
stop_cmd="pm2_stop"
restart_cmd="pm2_restart"
reload_cmd="pm2_reload"

: ${pm2_user="freebsd"}
: ${pm2_enable="NO"}
 
pm2_start()
{
        CMD="${PM2} resurrect"
        su -l ${pm2_user} -c "${CMD}"
 
}
 
pm2_stop()
{
        CMD="${PM2} kill"
        su -l ${pm2_user} -c "${CMD}"
}
 
pm2_restart()
{
        pm2_stop
        pm2_start
}
 
pm2_reload()
{
        CMD="${PM2} reload all"
        su -l ${pm2_user} -c "${CMD}"
}
 
run_rc_command "$1"

/etc/rc.conf 下面增加如下启动命令

pm2_enable="YES"
pm2_user="root"

然后 reboot 重启你的系统  进入系统执行

# pm2 list                                                              
┌────────────┬────┬─────────┬──────┬─────┬────────┬─────────┬────────┬───────┬────────────┬──────┬──────────┐
│ App name   │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu   │ mem        │ user │ watching │
├────────────┼────┼─────────┼──────┼─────┼────────┼─────────┼────────┼───────┼────────────┼──────┼──────────┤
│ test       │ 0  │ 0.0.0   │ fork │ 821 │ online │ 0       │ 4D     │ 25.9% │ 115.1 MB   │ root │ enabled  │
└────────────┴────┴─────────┴──────┴─────┴────────┴─────────┴────────┴───────┴────────────┴──────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app

你会发现 布署的应用已经自动启动了。

BSD 程序管理命令

/usr/local/etc/rc.d/pm2 start
/usr/local/etc/rc.d/pm2 restart
/usr/local/etc/rc.d/pm2 stop