部署 Node.js 应用之 PM2
什么是 pm2
PM2 是一个非常流行的 Node.js 应用进程管理工具,它帮助你管理和保持 Node.js 应用的高可用性。PM2 提供了进程守护、日志管理、负载均衡等功能,非常适合生产环境使用。
安装 pm2
npm install pm2 -g
验证是否安装成功
pm2 --version
PM2 常用命令
启动 Node.js 应用(启动打包后的)
pm2 start app.js
停止 Node.js 应用(启动打包后的)
pm2 stop app.js
停止 Node.js 应用,使用 pid 停止
pm2 stop <pid>
重启 Node.js 应用
pm2 restart app.js
重启 Node.js 应用,使用 pm2 应用名称的方式
pm2 restart <name>
查看所有正在运行的应用
pm2 list
查看应用状态
pm2 status
删除 Node.js 应用
pm2 delete <入口js文件>
pm2 delete <pm2应用名称>
查看日志
pm2 logs
pm2 logs <pm2应用名称> # 查看某个应用的日志
清空日志
pm2 flush
PM2 配置文件
pm2.json
{
"apps": [{
"name": "app1", // 应用名称
"script": "./app.js", // 启动脚本
"instances": "max", // 启动实例数量
"exec_mode": "cluster", // 使用 cluster 模式
"watch": true, // 启用文件监控(自动重启)
"env": { // 开发环境变量
"NODE_ENV": "development"
},
"env_production": { // 生产环境变量
"NODE_ENV": "production"
},
"log_file": "./logs/app.log", // 日志文件路径
"error_file": "./logs/error.log", // 错误日志文件路径
"log_date_format": "YYYY-MM-DD HH:mm:ss" // 日志日期格式
},
{
"name": "app2",
"script": "./app2.js",
"instances": 1,
"exec_mode": "fork",
"watch": false
}
]
}
参数说明:
apps 是一个数组,其中包含要启动的多个应用配置。每个应用可以有以下字段:
- name: 应用的名称,用于标识应用。
- script: 启动应用的脚本文件路径,通常是 Node.js 应用的入口文件,例如 app.js。
- instances: 指定应用实例的数量。每个实例都将启动一个独立的 Node.js 进程。你可以使用它来并行处理多个请求,从而提升应用的性能,尤其是在多核 CPU 上,例如:
- exec_mode: 执行模式,值为 fork(单进程)或 cluster(多进程)。以便更好地利用多核 CPU。当instances设置为多个时,fork 相当于独立的进程,没有多进程间的共享内存。cluster 自动为这些进程提供负载均衡,每个进程会共享主进程。
- watch: 是否监视文件变化,并在文件变化时自动重启应用。在开发环境中非常有用。
- env: 定义开发环境中的环境变量,通常用于开发模式。
- env_production: 定义生产环境中的环境变量,用于生产模式。
- log_file: 设置日志文件路径,记录应用的输出日志。例如:"./logs/app.log"
- out_file:设置标准输出日志文件路径。例如:"./logs/app-out.log"
- error_file: 设置错误日志文件的路径。例如:"./logs/app-error.log"
- merge_logs: 设置是否合并多个实例的日志输出。默认值为 false
- log_date_format: 设置日志输出的日期格式。例如:YYYY-MM-DD HH:mm:ss
- autorestart:当应用崩溃或退出时是否自动重启。默认值为 true
- min_uptime: 设置应用稳定运行的最小时间(以毫秒为单位)。如果应用崩溃或重启时间短于该时间,PM2 会认为它失败并停止重启。
- max_restarts: 设置最大重启次数。如果应用在启动时多次失败(超过该次数),PM2 会停止重启。
- max_memory_restart:应用的内存限制(以 MB 或 GB 为单位)。当应用的内存使用超过此限制时,PM2 会重启应用。例如:512M
- pid_file:设置应用的 PID 文件路径。例如:"./logs/app.pid"
- kill_timeout:设置在 PM2 终止应用时,等待进程停止的超时时间(毫秒)。默认为 1600 毫秒。
- cron_restart:设置一个 Cron 表达式,根据定时任务重启应用。例如:"0 0 * * *"
- interpreter:指定应用程序运行时使用的解释器
- interpreter_args:为 Node.js 解释器传递的额外参数。
- node_args:设置启动应用时传递给 Node.js 进程的命令行参数。
使用 pm2.json 文件 启动应用
pm2 start pm2.json
停止所有通过 pm2.json 文件启动的应用
pm2 stop pm2.json
如果你修改了 pm2.json 文件,可以使用以下命令重新加载配置
pm2 reload pm2.json