← 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
}
}
}
};