AI Skill Library

PM2 Node.js Deployment

PM2 process manager: start, cluster mode, ecosystem config, log management, startup.

pm2nodejsdevopsdeployment
# PM2 Node.js Deployment

## Install
```bash
npm install -g pm2
```

## Basic commands
```bash
pm2 start app.js --name api
pm2 start npm --name web -- start   # npm script
pm2 stop api
pm2 restart api
pm2 delete api
pm2 list
pm2 monit                            # live monitor
pm2 logs api --lines 100
pm2 logs api --err
```

## Cluster mode (uses all CPU cores)
```bash
pm2 start app.js -i max            # max = num CPUs
pm2 start app.js -i 4
pm2 reload api                     # zero-downtime reload
pm2 scale api 6                    # scale to 6 instances
```

## ecosystem.config.cjs
```js
module.exports = {
  apps: [
    {
      name: 'api',
      script: 'dist/index.js',
      instances: 'max',
      exec_mode: 'cluster',
      watch: false,
      max_memory_restart: '500M',
      env: {
        NODE_ENV: 'development',
        PORT: 3000,
      },
      env_production: {
        NODE_ENV: 'production',
        PORT: 3000,
      },
      error_file: 'logs/err.log',
      out_file: 'logs/out.log',
      log_date_format: 'YYYY-MM-DD HH:mm:ss',
      merge_logs: true,
    },
    {
      name: 'worker',
      script: 'dist/worker.js',
      instances: 1,
      cron_restart: '0 2 * * *',    // restart daily at 2am
    },
  ],
}
```
```bash
pm2 start ecosystem.config.cjs --env production
pm2 reload ecosystem.config.cjs --env production
```

## Startup on reboot
```bash
pm2 startup            # generates systemd command, run it
pm2 save               # save current process list
# To restore after reboot: pm2 resurrect
```

## Log rotation
```bash
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 50M
pm2 set pm2-logrotate:retain 7
pm2 set pm2-logrotate:compress true
```

## Zero-downtime deploy script
```bash
#!/bin/bash
git pull origin main
npm install --omit=dev
npm run build
pm2 reload ecosystem.config.cjs --env production
echo "Deploy done: $(date)"
```

API: /api/skills/pm2-node-deploy