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
No Comments