← back to Watches

ecosystem.config.cjs

97 lines

/**
 * PM2 Ecosystem Configuration
 * Production-ready process management for Omega Watch Price History
 */

module.exports = {
  apps: [
    {
      name: 'omega-watches',
      script: './server.js',
      cwd: '/root/Projects/watches',
      instances: 1,
      exec_mode: 'cluster',

      // Environment
      env: {
        NODE_ENV: 'production',
        PORT: 7600
      },

      // Restart strategy
      autorestart: true,
      max_restarts: 10,
      min_uptime: '10s',
      max_memory_restart: '500M',

      // Logging
      error_file: './logs/pm2-error.log',
      out_file: './logs/pm2-out.log',
      log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
      merge_logs: true,

      // Advanced features
      watch: false,
      ignore_watch: ['node_modules', 'logs', 'data/backups'],

      // Graceful shutdown
      kill_timeout: 5000,
      wait_ready: true,
      listen_timeout: 3000,

      // Health monitoring
      max_memory_restart: '500M',
      exp_backoff_restart_delay: 100
    },
    {
      name: 'omega-health-monitor',
      script: './monitoring/health-monitor.js',
      cwd: '/root/Projects/watches',
      instances: 1,
      exec_mode: 'fork',

      env: {
        NODE_ENV: 'production'
      },

      autorestart: true,
      max_restarts: 5,
      min_uptime: '10s',

      error_file: './logs/monitor-error.log',
      out_file: './logs/monitor-out.log',
      log_date_format: 'YYYY-MM-DD HH:mm:ss Z'
    }
  ],

  // Deployment configuration
  deploy: {
    production: {
      user: 'root',
      host: '45.61.58.125',
      ref: 'origin/main',
      repo: 'git@github.com:username/omega-watches.git',
      path: '/root/Projects/watches',
      'post-deploy': 'npm ci --production && pm2 reload ecosystem.config.js --env production && pm2 save',
      'pre-deploy-local': 'echo "Deploying to production..."',
      'post-deploy-local': 'echo "Deployment complete!"',
      env: {
        NODE_ENV: 'production',
        PORT: 7600
      }
    },
    staging: {
      user: 'root',
      host: '45.61.58.125',
      ref: 'origin/develop',
      repo: 'git@github.com:username/omega-watches.git',
      path: '/root/Projects/watches-staging',
      'post-deploy': 'npm ci && pm2 reload ecosystem.config.js --env staging && pm2 save',
      env: {
        NODE_ENV: 'staging',
        PORT: 7601
      }
    }
  }
};