在VPS上直接运行 node app.js 存在一个严重问题——关闭终端后应用就会停止,崩溃后也不会自动重启。PM2(进程管理器2) 是解决这些问题的一站式工具,提供自动重启、集群模式、日志管理和开机启动脚本。
1. PM2是什么及为什么使用它
PM2是最受欢迎的Node.js生产级进程管理器,主要功能如下:
| 功能 | 说明 |
|---|---|
| 自动重启 | 崩溃或内存溢出时自动重启应用 |
| 集群模式 | 利用多个CPU核心提高吞吐量 |
| 日志管理 | 分别记录stdout/stderr,支持实时查看 |
| 开机启动 | VPS重启后应用自动启动 |
| 零停机部署 | 不中断连接地重载应用 |
| 监控 | 查看每个进程的CPU/内存使用情况 |
2. 前提条件
- Ubuntu 20.04/22.04/24.04(或Debian)VPS
- 已安装 Node.js ≥ 16 LTS
- npm 或 yarn
- 非root用户(推荐)
建议: 使用 nvm 安装Node.js,便于管理多个版本。
3. 通过NVM安装Node.js
# 安装nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
# 安装Node.js LTS
nvm install --lts
nvm use --lts
# 验证安装
node -v
npm -v
4. 安装PM2
npm install -g pm2
pm2 -v
5. 使用PM2启动应用
# 基本启动
pm2 start app.js
# 指定名称(推荐)
pm2 start app.js --name "myapp"
# 带参数启动
pm2 start app.js --name "myapp" -- --port 3000
# 查看状态
pm2 status
# 实时查看日志
pm2 logs myapp
最佳实践: 始终使用
--name 指定名称,方便在同一VPS上管理多个应用。
6. 使用ecosystem.config.js管理配置
// ecosystem.config.js
module.exports = {
apps: [{
name: 'myapp',
script: './app.js',
instances: 'max', // 集群模式 — 使用所有CPU核心
exec_mode: 'cluster',
watch: false,
max_memory_restart: '500M',
env: {
NODE_ENV: 'production',
PORT: 3000
},
error_file: './logs/err.log',
out_file: './logs/out.log',
log_date_format: 'YYYY-MM-DD HH:mm:ss'
}]
};
# 从配置文件启动
pm2 start ecosystem.config.js
# 零停机重载
pm2 reload ecosystem.config.js
7. 集群模式 — 提升性能
Node.js是单线程的。集群模式允许PM2使用多个CPU核心:
# 使用所有CPU核心
pm2 start app.js -i max
# 使用4个核心
pm2 start app.js -i 4
# 零停机重载
pm2 reload myapp
注意: 集群模式仅适用于无状态应用。如果应用在内存中存储会话,需改用Redis作为会话存储。
8. 开机启动脚本设置
# 生成启动脚本(复制输出的命令并用sudo运行)
pm2 startup
# 启动应用后保存状态
pm2 save
重要: 每次添加或删除进程后都要运行
pm2 save 以保存当前进程列表。
9. 日志管理
# 查看所有日志
pm2 logs
# 查看特定应用日志
pm2 logs myapp --lines 100
# 清空日志
pm2 flush
# 安装自动日志轮转
pm2 install pm2-logrotate
10. 监控与基本命令
# 实时仪表板
pm2 monit
# 列出所有进程
pm2 list
# 应用详细信息
pm2 show myapp
# 重启 / 停止 / 删除
pm2 restart myapp
pm2 stop myapp
pm2 delete myapp
| 命令 | 说明 |
|---|---|
pm2 start | 启动新进程 |
pm2 restart | 重启(短暂停机) |
pm2 reload | 零停机重载 |
pm2 stop | 停止(保留在列表中) |
pm2 delete | 从列表中删除 |
pm2 save | 保存当前状态 |
11. Nginx反向代理配置
# /etc/nginx/sites-available/myapp
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache_bypass $http_upgrade;
}
}
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
12. 零停机部署
# 拉取新代码
git pull origin main
# 安装依赖
npm install --production
# 零停机重载(集群模式)
pm2 reload myapp
# 或重启(非集群模式)
pm2 restart myapp
AsiaGB VPS: AsiaGB VPS采用SSD存储,提供高I/O性能,非常适合需要低响应时间的Node.js + PM2应用。提供泰国和新加坡数据中心,99%正常运行时间。
常见问题解答
PM2是什么?为什么要与Node.js一起使用?
PM2是生产级进程管理器,通过自动重启、集群模式和日志管理让Node.js应用24/7稳定运行,无需保持终端开启。
PM2和nodemon有什么区别?
nodemon用于开发环境(文件更改时自动重启),PM2用于生产环境——持续运行应用、支持多核集群模式并管理日志。
PM2的集群模式是什么?
集群模式让PM2根据CPU核心数生成多个工作进程,大幅提高高流量Node.js应用的吞吐量。
VPS重启后PM2还会继续运行吗?
是的,执行 pm2 startup 和 pm2 save 后,每次VPS重启时PM2都会自动启动您的应用。
PM2日志存储在哪里?
日志存储在 ~/.pm2/logs/,使用 pm2 logs 实时查看,通过 pm2 install pm2-logrotate 实现自动轮转。
可以在AsiaGB VPS上部署Node.js吗?
完全可以。AsiaGB VPS采用SSD存储,全面支持Node.js、PM2和Nginx,99%正常运行时间。
总结
PM2是在VPS上生产部署Node.js的必备工具。核心流程:安装PM2 → 使用ecosystem配置启动应用 → 启用集群模式 → 设置开机启动脚本 → 配置Nginx反向代理。需要可靠VPS来运行Node.js应用?查看 AsiaGB VPS,SSD存储,99%正常运行时间,专业支持。