PM2 入门教程
PM2 是一个强大的 Node.js 进程管理器,可以帮助你:
- 保持应用始终运行
- 自动重启崩溃的应用
- 零停机部署
- 实时监控应用性能
- 日志管理
1. 安装 PM2
全局安装
验证安装
2. 常用命令
启动应用
1
2
3
4
5
6
7
8
9
10
11
|
# 启动单个应用
pm2 start app.js
# 启动 TypeScript/ES6 应用
pm2 start npm --name "my-app" start
# 启动多个进程(集群模式)
pm2 start ecosystem.config.js
# 指定端口和环境变量
pm2 start app.js --name "production-app" --env production
|
停止应用
1
2
3
4
5
|
# 停止单个应用
pm2 stop <app-name|app-id>
# 停止所有应用
pm2 stop all
|
重启应用
1
2
3
4
5
|
# 重启单个应用
pm2 restart <app-name|app-id>
# 重启所有应用
pm2 restart all
|
删除应用
1
2
3
4
5
|
# 从 PM2 管理中删除应用
pm2 delete <app-name|app-id>
# 删除所有应用
pm2 delete all
|
查看应用状态
1
2
3
4
5
6
7
8
9
10
11
|
# 查看所有应用状态
pm2 list
# 查看应用详情
pm2 show <app-name|app-id>
# 查看实时日志
pm2 logs <app-name|app-id>
# 查看监控图表
pm2 monit
|
生成启动脚本
1
2
3
4
5
|
# 生成启动脚本(让应用开机自启)
pm2 startup
# 保存当前应用列表(用于恢复)
pm2 save
|
3. 零停机部署
PM2 的一个核心特性是零停机部署(Zero Downtime Deployments)。
使用 reload 命令
1
2
|
# 重新加载应用(不会中断服务)
pm2 reload <app-name>
|
使用 deploy 流程
1
2
3
4
5
6
7
8
|
# 1. 部署新版本代码
# git pull 或 npm install 等
# 2. 重新加载应用(零停机)
pm2 reload all
# 3. 检查状态
pm2 list
|
使用 ecosystem.config.js
创建一个配置文件来管理多个应用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
module.exports = {
apps: [{
name: 'my-app',
script: 'app.js',
instances: 2, // 集群模式
autorestart: true,
watch: false,
max_memory_restart: '1G',
env: {
NODE_ENV: 'development',
PORT: 3000
},
env_production: {
NODE_ENV: 'production',
PORT: 8080
}
}]
};
|
使用配置启动:
1
2
3
4
5
|
# 开发环境
pm2 start ecosystem.config.js
# 生产环境
pm2 start ecosystem.config.js --env production
|
4. 日志管理
1
2
3
4
5
6
7
8
|
# 查看日志
pm2 logs <app-name>
# 清空日志
pm2 flush
# 指定日志文件路径
pm2 start app.js --log ~/logs/my-app.log
|
5. 生产环境部署示例
步骤 1: 准备项目
1
2
3
4
5
|
# 安装依赖
npm install
# 构建项目(如果是 TypeScript 或需要构建)
npm run build
|
步骤 2: 使用 PM2 启动
1
2
3
4
5
6
7
8
|
# 启动应用
pm2 start dist/app.js --name production-app
# 查看状态
pm2 list
# 监控应用
pm2 monit
|
步骤 3: 设置开机自启
1
2
3
4
5
|
# 生成启动脚本
pm2 startup
# 保存当前配置
pm2 save
|
步骤 4: 更新应用(零停机)
1
2
3
4
5
6
7
8
9
10
11
|
# 拉取最新代码
git pull
# 安装新依赖
npm install
# 重新加载应用
pm2 reload production-app
# 检查状态
pm2 list
|
6. 实用技巧
使用环境变量
1
2
3
4
5
6
7
8
9
10
11
12
|
# 命令行方式
pm2 start app.js --name my-app --env production PORT=3000
# 使用配置文件
# ecosystem.config.js 中
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production',
PORT: 8080
}
|
使用进程集群模式
1
2
|
# 使用 CPU 核心数启动多个实例
pm2 start app.js -i max --name my-cluster-app
|
查看进程详情
1
2
3
4
5
6
7
8
|
# 查看 CPU、内存使用
pm2 monit
# 查看详细信息
pm2 show <app-id>
# 查看性能指标
pm2 metrics <app-id>
|
7. 故障排查
应用崩溃自动重启
PM2 默认会在应用崩溃时自动重启:
1
2
3
4
5
|
# 查看崩溃历史
pm2 logs | grep "Error"
# 查看应用日志
pm2 logs <app-name> --lines 100
|
检查端口占用
1
2
|
# 如果端口被占用,使用 --port 选项
pm2 start app.js --port 3001
|
内存限制
1
2
|
# 设置内存限制,超过会自动重启
pm2 start app.js --max-memory-restart 1G
|
8. PM2 高级功能
使用 ecosystem.config.js 的高级配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
module.exports = {
apps: [{
name: 'my-app',
script: './app.js',
// 集群模式
instances: 'max',
// 自动重启
autorestart: true,
// 监控文件变化(开发环境)
watch: true,
ignore_watch: ['node_modules', 'logs'],
// 内存限制
max_memory_restart: '500M',
// 错误日志
error_file: './logs/err.log',
out_file: './logs/out.log',
// 环境变量
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
}
}]
};
|
总结
PM2 是 Node.js 生产环境部署的必备工具:
✅ 简单易用 - 常用命令简单易记
✅ 零停机部署 - reload 命令保证服务不中断
✅ 自动重启 - 崩溃自动恢复
✅ 进程管理 - 集群模式充分利用多核 CPU
✅ 日志管理 - 集中管理应用日志
✅ 开机自启 - 系统重启后自动恢复服务
开始使用 PM2,让你的 Node.js 应用更加稳定可靠!
参考资料