Files
dwroller/docs/pm2.md
alex a4cabbd2b8 Clean rules database and add documentation
- Remove OCR noise, credits, and duplicates from rules-database.json (288→255 rules)
- Add clean_rules.py script for rule cleanup
- Add CLAUDE.md, docs/, and update README with documentation links

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 17:35:36 +02:00

2.7 KiB

PM2 Configuration

This document explains how to use PM2 for managing Deathwatch Roller in production.

What is PM2?

PM2 is a production process manager for Node.js that keeps your application running 24/7.

Installation

# Install PM2 globally
npm install -g pm2

# Initialize PM2 ecosystem file
pm2 init

Application Configuration

Create ecosystem.config.js:

module.exports = {
  apps: [
    {
      name: 'dwroller-frontend',
      cwd: './frontend',
      script: 'npm',
      args: 'start',
      env: {
        NODE_ENV: 'production',
        PORT: 3000
      },
      env_development: {
        NODE_ENV: 'development'
      },
      instances: 1,
      autorestart: true,
      max_memory_restart: '500M'
    },
    {
      name: 'dwroller-backend',
      cwd: './backend',
      script: 'npm',
      args: 'start',
      env: {
        NODE_ENV: 'production',
        PORT: 5000
      },
      env_development: {
        NODE_ENV: 'development'
      },
      instances: 1,
      autorestart: true,
      max_memory_restart: '500M'
    }
  ]
};

Starting the Application

# Start both apps
pm2 start ecosystem.config.js

# Start only backend
pm2 start ecosystem.config.js --only backend

# Start only frontend
pm2 start ecosystem.config.js --only frontend

Managing Apps

# View status
pm2 list

# View logs
pm2 logs

# Restart app
pm2 restart all

# Stop app
pm2 stop all

# Delete app
pm2 delete all

Monitoring

# Enable monitoring
pm2 monitortype --interval 10000

# View stats
pm2 stats

Logging

# Rotate logs
pm2 rotate logs

# Save log
pm2 save

# Load saved PM2 process list
pm2 startup
pm2 save

NPM Scripts

Update package.json with PM2 scripts:

{
  "scripts": {
    "start": "npm run build && pm2 start ecosystem.config.js",
    "pm2:start": "pm2 start ecosystem.config.js",
    "pm2:stop": "pm2 stop all",
    "pm2:restart": "pm2 restart all",
    "pm2:logs": "pm2 logs",
    "pm2:list": "pm2 list",
    "pm2:save": "pm2 save",
    "pm2:startup": "pm2 startup"
  }
}

Production Build

# Build frontend
cd frontend
npm run build

# Start with PM2
cd ../..
npm run pm2:start

Environment Variables

Store secrets in .env or use PM2 env:

# Set environment variable
pm2 set ecosystem.config.js:* env:SESSION_SECRET="your-secret"

# List all env variables
pm2 env ecosystem.config.js

Backup Strategy

# Create database backup
npm run backup

# Schedule backup with cron
0 2 * * * /path/to/db/backup.sh

Scaling

For horizontal scaling, configure multiple instances:

{
  instances: 'max',
  exec_mode: 'cluster',
  watch: false
}

Auto-restart on reboot

pm2 startup
pm2 save