/** * PM2 进程管理器配置文件 * * 环境区分说明: * 1. 通过 --env 参数指定环境:pm2 start ecosystem.config.js --env <环境名> * 2. 环境配置会自动合并:基础配置(env) + 环境特定配置(env_<环境名>) * 3. 测试环境: --env test (端口 3001, 2个实例) * 4. 生产环境: --env production (端口 3000, 最大实例数) */ const baseAppConfig = { script: './dist/src/main.js', // 日志文件路径 error_file: './logs/pm2-error.log', out_file: './logs/pm2-out.log', log_file: './logs/pm2-combined.log', // 日志日期格式 log_date_format: 'YYYY-MM-DD HH:mm:ss Z', // 合并日志(所有实例的日志合并到一个文件) merge_logs: true, // 自动重启配置 autorestart: true, // 监听文件变化(生产环境建议关闭) watch: false, // 忽略监听的文件/目录 ignore_watch: ['node_modules', 'logs', 'dist', '.git', '*.log'], // 最大内存限制(超过后自动重启) max_memory_restart: '1G', // 最小正常运行时间(秒),小于此时间重启不计入重启次数 min_uptime: '10s', // 最大重启次数(在 min_uptime 时间内) max_restarts: 10, // 重启延迟(毫秒) restart_delay: 4000, // 等待就绪信号的时间(毫秒) wait_ready: true, listen_timeout: 10000, // 优雅关闭超时时间(毫秒) kill_timeout: 5000, // 应用启动后的等待时间(毫秒) shutdown_with_message: true, // 源代码映射支持 source_map_support: true, // 实例间负载均衡策略 instance_var: 'INSTANCE_ID', }; module.exports = { apps: [ { ...baseAppConfig, // 生产环境应用 name: 'competition-api', instances: 2, exec_mode: 'cluster', env_file: '.env.production', env: { NODE_ENV: 'production', PORT: 3234, }, }, { ...baseAppConfig, // 测试环境应用 name: 'competition-api-test', instances: 2, exec_mode: 'cluster', env_file: '.env.test', env: { NODE_ENV: 'test', PORT: 3234, }, }, ], // ============================================ // 部署配置(用于 PM2 自动化部署) // 使用方式: pm2 deploy ecosystem.config.js <环境名> // ============================================ deploy: { // 测试环境部署配置 test: { user: 'deploy', host: ['119.29.229.174'], ref: 'origin/develop', repo: 'git@github.com:your-username/competition-management-system.git', path: '/var/www/competition-management-test', 'post-deploy': 'cd backend && pnpm install && pnpm run build && pm2 reload ecosystem.config.js --only competition-api-test', 'pre-setup': 'apt-get update && apt-get install -y git', }, // 生产环境部署配置 production: { user: 'deploy', host: ['your-prod-server-ip'], ref: 'origin/master', repo: 'git@github.com:your-username/competition-management-system.git', path: '/var/www/competition-management', 'post-deploy': 'cd backend && pnpm install && pnpm run build && pm2 reload ecosystem.config.js --only competition-api', 'pre-setup': 'apt-get update && apt-get install -y git', }, }, };