简介:本文详细介绍如何使用PM2实现Node.js应用的自动化部署,涵盖环境准备、配置管理、集群部署、日志监控等关键环节。通过标准化流程和配置示例,帮助开发者快速掌握生产环境部署技巧,提升服务稳定性和运维效率。
PM2作为Node.js生态中最流行的进程管理工具,提供进程守护、负载均衡、日志管理、集群部署等核心功能。本文将系统讲解如何通过PM2实现Node.js应用的自动化部署,重点解决生产环境部署中的进程管理、集群扩展、日志拆分、远程部署等关键问题。
适用场景包括:
典型部署场景包含:
某电商平台案例显示,通过PM2集群模式部署后,QPS提升300%,服务可用性达到99.99%。
核心部署架构包含:
graph TDA[应用代码] --> B[PM2进程管理]B --> C[Node.js运行时]C --> D[系统资源]B --> E[日志系统]E --> F[日志轮转]B --> G[监控告警]
关键组件说明:
instances参数实现CPU核心绑定env_*配置实现多环境管理服务器环境:
权限配置:
node用户)代码准备:
网络配置:
创建ecosystem.config.js配置文件:
module.exports = {apps: [{name: 'API-Service',script: './src/app.js',instances: 'max', // 自动绑定所有CPU核心exec_mode: 'cluster',watch: false, // 生产环境关闭监听max_memory_restart: '1G',env: {NODE_ENV: 'production',PORT: 8080},output: './logs/out.log',error: './logs/error.log',merge_logs: true,log_type: 'json',log_date_format: 'YYYY-MM-DD HH:mm:ss'}],deploy: {production: {user: 'node',host: '212.83.163.1',ref: 'origin/master',repo: 'git@github.com:your-repo.git',path: '/var/www/production',post_deploy: 'npm install && pm2 reload ecosystem.config.js --env production'}}};
集群配置:
instances: 'max':自动检测CPU核心数exec_mode: 'cluster':启用集群模式max_memory_restart:内存泄漏防护日志配置:
pm2-logrotate模块环境隔离:
env和env_production实现配置隔离sudo mkdir -p /var/www/production
sudo chown -R node:node /var/www
2. **本地配置SSH免密登录**:```bashssh-keygen -t rsassh-copy-id node@212.83.163.1
pm2 deploy ecosystem.config.js production setuppm2 deploy ecosystem.config.js production
# 开发环境启动pm2 start ecosystem.config.js --env development# 查看进程状态pm2 ls# 查看实时日志pm2 logs# 生成启动脚本pm2 startuppm2 save
基础验证:
pm2 ls显示onlinenetstat -tulnp | grep 8080curl http://localhost:8080/health日志检查:
性能验证:
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| SSH连接失败 | 权限不足/网络问题 | 检查SSH配置和防火墙规则 |
| Git拉取失败 | 仓库权限问题 | 验证部署密钥有效性 |
| 依赖安装失败 | 网络问题/版本冲突 | 使用cnpm或指定registry |
| 服务启动失败 | 端口冲突/代码错误 | 检查错误日志和端口占用 |
内存泄漏:
max_memory_restart--max-old-space-size调整内存限制进程崩溃:
pm2-logrotate日志轮转pm2.dump实现自动恢复集群失衡:
instances配置
// 优化配置示例{node_args: ['--optimize-for-size', '--max-old-space-size=2048'],autorestart: true,min_uptime: '30s',max_restarts: 10}
通过标准化PM2部署流程,可实现:
建议建立持续部署流水线,结合CI/CD工具实现代码提交→自动测试→生产部署的全流程自动化。定期审查部署配置,根据业务发展调整集群规模和资源配额。