PM2 对 Node 项目进行线上部署与配置
pm2 是一个带有负载均衡功能的 Node 应用的进程管理器。
1. pm2 主要特点
- 内建负载均衡(使用Node cluster 集群模块)
- 保持后台运行
- 进程守护,系统崩溃后自动重启
- 启动多进程,充分利用CPU和内存
- 自带日志记录功能
- 控制台检测
- 提供 HTTP API
2. pm2 安装及常用命令
安装
$ npm install pm2 -g // 全局安装
$ pm2 --version // 查看版本
pm2 命令
启动(入口文件为app.js, 配置文件为pm2.conf.json):
// 直接启动
$ pm2 start app.js
// 通过配置文件启动
$ pm2 start app.js
查看启动历史:
$ pm2 list
重启:
修改代码后需要执行:
$ pm2 restart <AppName>/<id>
<!-- <AppName>/<id> 可通过 pm2 list 查看-->
停止进程(可重新启动)
$ pm2 stop <AppName>/<id>
删除进程(不可重新启动)
$ pm2 delete <AppName>/<id>
其他命令
pm2 info <AppName>/<id> // 查看进程详细信息
pm2 log <AppName>/<id> // 查看进程日志, 执行后,可进行线上调试,查看打印日志
pm2 monit <AppName>/<id> // 打开监控 logs
3. pm2 常用配置
根目录下,新建空文件 /logs/err.log 和 /logs/out.log
新建配置文件 pm2.conf.json
pm2.conf.json:
{
"apps": {
"name": "pm2-test-server", // 起个进程名,即AppName
"script": "app.js", // 启动的入口文件(koa2项目中为/bin/www.js)
"watch": true, // 监听文件变化,自动重启
"ignore_watch": [ // 不需要监听的文件
"node_modules",
"logs"
],
"instances": 4, // 设置多进程
"error_file": "logs/err.log", // 错误日志存储的文件
"out_file": "logs/out.log", // console.log()打印的都会放进去
"log_date_format": "YYYY-MM-DD HH:mm:ss" // 给每行日志标记一个时间
}
}
修改package.json:
{
"name": "pm2-test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "cross-env NODE_ENV=dev nodemon app.js",
"prd": "cross-env NODE_ENV=production pm2 start pm2.conf.json"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
...
"cross-env": "^5.2.0",
"nodemon": "^1.19.1"
...
}
}
配置完后,执行下面命令,即可启动项目
$ npm run prd