PM2简介
PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,而且使用非常简单。
为什么使用pm2
平时在本地进行node项目开发时一般直接使用node app.js启动服务,虽然可以用这种方式启动服务,但是这种方式只能应对一些访问量较少的形式,而且如果当node遇到错误导致线程挂掉会造成网站的无法访问,因此需要一种工具帮助node管理繁琐任务,当node进程挂掉时能够帮助机器自动重启、或者当node服务部署在多台机器时可以帮助机器实现负载均衡,因此需要使用pm2来进行node进程管理。
pm2配置文件
项目的运行环境可能会有多个,如线上的生产环境、测试的test环境、开发的dev环境及本地的local环境,使用vue进行项目构建时需要区分不同环境,因此使用pm2进行node进程管理时也需要区分不同的环境,因此pm2需要一个全局的配置文件进行项目的配置。
通过在项目根目录创建pm2.json配置文件。
1 | { |
通过配置不同环境的env来区分不同环境,为了更好区分环境可以设置不同name,在package.json中根据不同名称来运行不同环境的服务。
1 | "pm2-dev": "pm2 start pm2.json --only YUANNODE-DEV-SERVER --watch", |
通过配置pm2可以设置不同环境下log存放的位置,可以配置pm2启动模式,通过设置”exec_mode”: “fork”/“cluster”设置不同的pm2启动模式,pm2默认为fork模式。
“fork”/“cluster”启动模式:
fork模式,单实例多进程,常用于多语言混编,比如php、python等,不支持端口复用,需要自己做应用的端口分配和负载均衡的子进程业务代码。
缺点就是单服务器实例容易由于异常会导致服务器实例崩溃。
- cluster模式,多实例多进程,但是只支持node,端口可以复用,不需要额外的端口配置,0代码实现负载均衡。
优点就是由于多实例机制,可以保证服务器的容错性,就算出现异常也不会使多个服务器实例同时崩溃。
pm2监控
部署到线上的服务一般需要监控系统,可以时刻帮助开发者了解服务运行情况,pm2提供了pm2 Monitoring进行pm2监控,或者使用pm2-web进行监控,如果只是进行常见的服务器异常重启或者过载等监控可以直接使用pm2 monit进行监控,由于不同环境需要监控的服务不同,因此也需要区分监控的命令。
1 | "pm2-monitor-dev": "pm2 link -- -- YUANNODE-DEV-SERVER", |
pm2在nginx上的配置
通过pm2启动node,再使用nginx做反向代理
1 | upstream my_nodejs_upstream { |
pm2命令-CLI参考
pm2有很多使用命令,可以通过查看pm2命令