self-replicating/docs/deployment-guide.md

9.4 KiB

Deployment Guide

Complete guide for deploying the Self-Replicating Business System to production.

Production Deployment Options

Specifications:

  • 4 vCPU
  • 8GB RAM
  • 160GB SSD
  • Ubuntu 22.04 LTS

Providers:

  • DigitalOcean ($48/month)
  • Hetzner ($35/month)
  • Linode ($48/month)

Option 2: Kubernetes (For Scale)

For managing 10+ businesses simultaneously.

Step-by-Step Production Deployment

1. Server Setup

# SSH into your VPS
ssh root@your-server-ip

# Update system
apt update && apt upgrade -y

# Install Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

# Install Docker Compose
apt install docker-compose-plugin -y

# Install Node.js
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs

# Install pnpm
npm install -g pnpm

2. Clone Repository

# Create application directory
mkdir -p /opt/srb
cd /opt/srb

# Clone repository (or upload files)
git clone <your-repo-url> .

# Or upload via SCP
# scp -r self-replicating-business/* root@your-server:/opt/srb/

3. Configure Environment

# Copy environment template
cp .env.example .env

# Edit with production values
nano .env

Critical Production Settings:

# Set to production
NODE_ENV=production

# Use strong passwords
POSTGRES_PASSWORD=<strong-random-password>

# Production database URL
DATABASE_URL=postgresql://srb:<strong-password>@postgres:5432/srb

# All your API keys
ANTHROPIC_API_KEY=sk-ant-...
FACEBOOK_ACCESS_TOKEN=...
GOOGLE_ADS_DEVELOPER_TOKEN=...
# ... etc

# Production alerts
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
ALERT_EMAIL=alerts@yourdomain.com

# n8n auth
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=<strong-random-password>

4. Start Services

# Build and start all services
docker-compose -f infra/docker/docker-compose.yml up -d

# Check status
docker ps

# View logs
docker-compose -f infra/docker/docker-compose.yml logs -f

5. Initialize Database

# Run migrations
docker exec srb-orchestrator pnpm db:migrate

# Verify database
docker exec -it srb-postgres psql -U srb -d srb -c "\dt"

6. SSL/TLS Setup

Using Nginx reverse proxy with Let's Encrypt:

# Install Nginx
apt install nginx certbot python3-certbot-nginx -y

# Create Nginx config
nano /etc/nginx/sites-available/srb

Nginx Configuration:

server {
    listen 80;
    server_name yourdomain.com;

    # Orchestrator API
    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    # Dashboard
    location /dashboard {
        proxy_pass http://localhost:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    # n8n
    location /n8n {
        proxy_pass http://localhost:5678;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
# Enable site
ln -s /etc/nginx/sites-available/srb /etc/nginx/sites-enabled/

# Test config
nginx -t

# Restart Nginx
systemctl restart nginx

# Get SSL certificate
certbot --nginx -d yourdomain.com

# Auto-renewal
systemctl enable certbot.timer

7. Systemd Service (Auto-restart)

Create /etc/systemd/system/srb.service:

[Unit]
Description=Self-Replicating Business System
After=docker.service
Requires=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/srb
ExecStart=/usr/bin/docker-compose -f infra/docker/docker-compose.yml up -d
ExecStop=/usr/bin/docker-compose -f infra/docker/docker-compose.yml down

[Install]
WantedBy=multi-user.target
# Enable service
systemctl enable srb.service
systemctl start srb.service

# Check status
systemctl status srb.service

8. Monitoring Setup

# Install monitoring tools
apt install prometheus grafana -y

# Configure Prometheus
nano /etc/prometheus/prometheus.yml

Prometheus Config:

scrape_configs:
  - job_name: 'srb-orchestrator'
    static_configs:
      - targets: ['localhost:3000']

  - job_name: 'postgres'
    static_configs:
      - targets: ['localhost:5432']

  - job_name: 'redis'
    static_configs:
      - targets: ['localhost:6379']
# Start monitoring
systemctl start prometheus grafana-server
systemctl enable prometheus grafana-server

# Access Grafana at http://your-server:3000

9. Backup Setup

# Create backup script
nano /opt/srb/scripts/backup.sh

Backup Script:

#!/bin/bash

BACKUP_DIR="/opt/srb/backups"
DATE=$(date +%Y%m%d_%H%M%S)

# Create backup directory
mkdir -p $BACKUP_DIR

# Backup database
docker exec srb-postgres pg_dump -U srb srb > $BACKUP_DIR/db_$DATE.sql

# Backup business data
tar -czf $BACKUP_DIR/data_$DATE.tar.gz /opt/srb/data

# Upload to S3 (optional)
# aws s3 cp $BACKUP_DIR/db_$DATE.sql s3://your-bucket/backups/

# Delete old backups (keep last 30 days)
find $BACKUP_DIR -name "*.sql" -mtime +30 -delete
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete

echo "Backup completed: $DATE"
# Make executable
chmod +x /opt/srb/scripts/backup.sh

# Add to crontab (daily at 2 AM)
crontab -e
# Add: 0 2 * * * /opt/srb/scripts/backup.sh

10. Firewall Configuration

# Install UFW
apt install ufw -y

# Allow SSH
ufw allow 22/tcp

# Allow HTTP/HTTPS
ufw allow 80/tcp
ufw allow 443/tcp

# Enable firewall
ufw enable

# Check status
ufw status

Post-Deployment Checklist

  • All Docker containers running (docker ps)
  • Database accessible and migrated
  • SSL certificate installed (https://yourdomain.com)
  • Environment variables configured
  • Backups running daily
  • Monitoring dashboards accessible
  • Alerts configured (Slack/Email)
  • Firewall enabled
  • systemd service enabled
  • Test creating a business

Creating First Production Business

# SSH into server
ssh root@your-server

# Enter orchestrator container
docker exec -it srb-orchestrator sh

# Run CLI
node dist/cli/create-business.js \
  --name "My First Business" \
  --idea "AI-powered meal planning SaaS"

Monitoring Production

Health Checks

# Check all services
docker ps

# Check logs
docker-compose logs -f orchestrator

# Check database
docker exec -it srb-postgres psql -U srb -d srb -c "SELECT COUNT(*) FROM \"Business\";"

# Check n8n
curl http://localhost:5678

# Check dashboard
curl http://localhost:3001

Key Metrics to Monitor

  1. System Health

    • CPU usage < 70%
    • Memory usage < 80%
    • Disk space > 20% free
  2. Application Health

    • Workflow success rate > 95%
    • API response time < 500ms
    • Database connections < 100
  3. Business Health

    • Active businesses count
    • Total monthly revenue
    • Workflow execution rate

Scaling Production

Vertical Scaling (Upgrade VPS)

# Stop services
docker-compose down

# Resize VPS in provider panel

# Start services
docker-compose up -d

Horizontal Scaling (Multiple Workers)

Edit docker-compose.yml:

orchestrator:
  ...
  deploy:
    replicas: 3  # Run 3 instances

Database Scaling

For high load:

postgres:
  ...
  environment:
    - POSTGRES_MAX_CONNECTIONS=200
    - POSTGRES_SHARED_BUFFERS=2GB

Troubleshooting

Container Won't Start

# Check logs
docker logs srb-orchestrator

# Restart container
docker restart srb-orchestrator

# Rebuild if needed
docker-compose build orchestrator
docker-compose up -d

Database Connection Issues

# Check PostgreSQL logs
docker logs srb-postgres

# Verify connection
docker exec -it srb-postgres psql -U srb -d srb

# Reset database (DANGER: loses data)
docker-compose down -v
docker-compose up -d

High CPU/Memory Usage

# Check resource usage
docker stats

# Limit resources in docker-compose.yml
services:
  orchestrator:
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 4G

Security Best Practices

  1. API Keys

    • Rotate every 90 days
    • Use different keys for dev/prod
    • Never commit to git
  2. Database

    • Strong passwords (20+ chars)
    • Disable remote access if not needed
    • Regular backups
  3. Server

    • Keep system updated
    • Disable root SSH (use sudo user)
    • Enable fail2ban
  4. Application

    • Set budget limits
    • Monitor spending daily
    • Review decisions weekly

Maintenance

Weekly Tasks

  • Review business performance
  • Check error logs
  • Verify backups

Monthly Tasks

  • Update dependencies
  • Review and optimize budgets
  • Audit API usage and costs
  • Security updates

Quarterly Tasks

  • Rotate API keys
  • Review and update strategies
  • Performance optimization
  • Capacity planning

Cost Optimization

  1. Use Reserved Instances (save 30-50%)
  2. Optimize Docker Images (smaller = faster)
  3. Cache Aggressively (reduce API calls)
  4. Schedule Non-Critical Tasks (off-peak hours)
  5. Monitor API Usage (avoid overages)

Deployment Status: Ready for Production

For support: See logs or contact admin