今天偶然发现一个部署 Node 生产环境的神器,pm2.5,哦,不,是PM2


pm2 是一个带有负载均衡功能的 Node 应用的进程管理器
它有如下特点:

  • 后台运行
  • 内建负载均衡
  • 无间断重载
  • 具有启动脚本
  • 停止不稳定的进程
  • 强大的控制台检测
  • 远程控制和实时的接口API

下载

1
$ npm install pm2 -g

创建应用

1
$ pm2 start index.js    # 快速启动应用

Node 生产环境部署神器 PM2-LMLPHP
当看到类似的信息,并且 status=online 时,代表应用启动成功
更多命令如下

1
2
3
4
5
6
7
8
$ pm2 start | restart | stop index.js       # 启动、重启、停止
$ pm2 start app.py # 使用 python 命令启动脚本
$ pm2 start index.js -n index # 启动并指定进程名
$ pm2 start index.js --watch # “热启动” 应用
# --ignore-watch 可以排除再热启动时需要检测的文件,也可以是正则
$ pm2 start index.js -i max # 启动并根据 CPU 开启相应进程数
# 也可以用 -i 2 手动设置
$ pm2 delete <app_name|id|'all'|json_conf> # 删除应用

配置文件

pm2 的启动参数有很多,每次输入这些参数也是很烦人的,我们可以将这些参数放到配置文件中,然后直接启动配置文件即可,创建文件 pm2_config.json

1
2
3
4
5
6
7
8
9
{
"apps" : [{
"name" : "tmdapi",
"script" : "./run_api.py",
"interpreter" : "/Users/wxnacy/.pyenv/shims/python",
"watch" : true,
"ignore_watch" : ['winn', 'tests', 'db'],
}]
}

1
$ pm2 start pm2_config.json

文件格式支持很多种,如 yml, js, json5,更多配置见文档

目录文件

pm2 启动一次后就会生成如下目录,相关日志、pid、配置等都在其中

  • $HOME/.pm2 will contain all PM2 related files
  • $HOME/.pm2/logs will contain all applications logs
  • $HOME/.pm2/pids will contain all applications pids
  • $HOME/.pm2/pm2.log PM2 logs
  • $HOME/.pm2/pm2.pid PM2 pid
  • $HOME/.pm2/rpc.sock Socket file for remote commands
  • $HOME/.pm2/pub.sock Socket file for publishable events
  • $HOME/.pm2/conf.js PM2 Configuration

应用列表

1
$ pm2 list

执行该命令,会显示上图一样的信息,也就是应用列表 pm2 (ls | l) 都可以

1
2
3
$ pm2 logs jlist            # 使用 json 格式在一行中展示
$ pm2 logs prettylist # 将 json 数据格式化后展示出来
$ pm2 list --sort=id # 根据id排序

查看日志

1
$ pm2 logs              # 查看所有进程日志

Node 生产环境部署神器 PM2-LMLPHP
更多命令

1
2
3
4
5
6
7
$ pm2 logs [app-name | id]      # 查看指定应用日志
$ pm2 logs /api/ # 使用正则来匹配日志
$ pm2 logs --format # 格式化输出
$ pm2 logs --json # json 格式输出日志
$ pm2 logs --lines 1000 # 返回 1000 行日志
$ pm2 flush # 清空所有日志
$ pm2 reloadLogs # 重新加载所有日志

监控

1
$ pm2 monit             # 检测当前进程 CPU、内存、日志

Node 生产环境部署神器 PM2-LMLPHP
当输入上述命令时,会出现类似上图的界面,在这里我们可以清楚的看到当前进行列表、日志、活跃度、进程详情等信息,使用 左右 来控制面板的焦点,使用 上下键 来滚动屏幕查看信息

keymetrics

如果配合 keymetrics 来使用,监控将变的更加强大
输入注册命令

1
$ pm2 register

根据命令行提示一步步完善注册信息,然后运行

1
$ pm2 monitor [app-name]


1
$ pm2 web

会在返回的进程列表中看到一个地址
Node 生产环境部署神器 PM2-LMLPHP

进入该地址,并使用刚注册的信息登陆,就可以看到一个更加强大的检测系统
Node 生产环境部署神器 PM2-LMLPHP

自启动

1
2
3
$ pm2 startup                               # 开机自启动
$ pm2 unstartup # 关闭自启
# 或者指定自己的机型

或者指定自己的系统

1
$ pm2 startup [ubuntu | ubuntu14 | ubuntu12 | centos | centos6 | arch | oracle | amazon | macos | darwin | freebsd | systemd | systemv | upstart | launchd | rcd | openrc]

备份和恢复

假如出现机器出现崩溃,那 pm2 进程信息很可能丢失,但是我们可以利用备份来避免这种情况

1
$ pm2 (save | dump)

保存完以后我们利用 kill 来模拟 pm2 丢失的情况

1
$ pm2 kill

接下来使用恢复命令

1
$ pm2 resurrect

这样我们又可以愉快的开发了

其他常用命令

更多的进程命令如下

1
2
3
4
$ pm2 (show | describe) (app-name| id)      # 显示进程详情
$ pm2 reload all # 重新加载索引进程
$ pm2 scale [app-name] 10 # 扩展应用进程数
# 但是如果应用涉及到端口号,则不应该使用这种方式,否则会引起端口冲突

pm2 还有很多强大的功能是我没有提到的,你需要经常使用 pm2 -h /pm2 start -h 等命令查看帮助文档,来更好的完成工作,或者干脆扒一遍文档

03-16 18:29