Migrate from Docker Compose

Move your self-hosted Docker Compose setup to RaidFrame with one command.

Overview

If you're running Docker Compose on a VPS, you already have everything you need to deploy on RaidFrame. Your Dockerfiles work as-is. The migration adds auto-scaling, managed databases, SSL, monitoring, and zero-ops maintenance.

Step 1: Install the CLI

curl -fsSL https://get.raidframe.com | sh
rf auth login

Step 2: Import from Docker Compose

rf init --from docker-compose
Reading docker-compose.yml...

Found 4 services:
  web (build: ./web, ports: 3000)        → web service
  api (build: ./api, ports: 8080)        → web service
  worker (build: ./worker)               → worker service
  postgres (image: postgres:16)          → managed database

Found 2 volumes:
  postgres_data                          → managed database (auto)
  uploads                                → object storage bucket

Generated: raidframe.yaml

Review and deploy: rf deploy

The importer reads your docker-compose.yml and creates an equivalent raidframe.yaml, replacing self-managed services (Postgres, Redis, Nginx) with managed equivalents.

docker-compose.yml → raidframe.yaml

Before (Docker Compose)

version: "3.8"
services:
  web:
    build: ./web
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgresql://user:pass@postgres:5432/myapp
      - REDIS_URL=redis://redis:6379
    depends_on:
      - postgres
      - redis

  api:
    build: ./api
    ports:
      - "8080:8080"
    environment:
      - DATABASE_URL=postgresql://user:pass@postgres:5432/myapp

  worker:
    build: ./worker
    environment:
      - DATABASE_URL=postgresql://user:pass@postgres:5432/myapp
      - REDIS_URL=redis://redis:6379

  postgres:
    image: postgres:16
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=myapp

  redis:
    image: redis:7-alpine

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf

volumes:
  postgres_data:

After (raidframe.yaml)

project: my-app
region: us-east-1

services:
  web:
    type: web
    build:
      context: ./web
    port: 3000
    scaling:
      min: 2
      max: 10

  api:
    type: web
    build:
      context: ./api
    port: 8080
    scaling:
      min: 1
      max: 5

  worker:
    type: worker
    build:
      context: ./worker

databases:
  main:
    engine: postgres
    version: "16"

  cache:
    engine: redis
    version: "7.2"

What changed:

Docker ComposeRaidFrame
postgres service (self-managed)Managed PostgreSQL (backups, replicas, pooling)
redis service (self-managed)Managed Redis (persistence, failover)
nginx service (reverse proxy)Built-in load balancer + SSL
Manual SSL (certbot)Automatic SSL (Let's Encrypt)
depends_onAutomatic service discovery
Docker volumesManaged database storage
Manual scalingAuto-scaling
No monitoringBuilt-in logs, metrics, traces

Step 3: Migrate Data

Database

# Export from your VPS
ssh your-vps "docker exec postgres pg_dump -U postgres myapp" > backup.sql

# Import to RaidFrame
rf db import main backup.sql

Files/Uploads

# Copy files from VPS to RaidFrame storage
rf add storage
scp -r your-vps:/data/uploads ./uploads
rf storage sync ./uploads s3://my-app-uploads/

Step 4: Deploy

rf deploy

Step 5: Move DNS

rf domains add myapp.com

Update your DNS A/CNAME record from your VPS IP to RaidFrame.

What You Stop Managing

Before (VPS)After (RaidFrame)
OS security patchesManaged
Docker engine updatesManaged
PostgreSQL backupsAutomatic (daily, 30-day retention)
SSL certificate renewalAutomatic
Nginx configurationNot needed (built-in LB)
Disk space monitoringNot needed (auto-scaling)
Uptime monitoringBuilt-in
Log aggregationBuilt-in
Firewall rulesBuilt-in
DDoS mitigationBuilt-in

Estimated time saved: 10-20 hours/month in operations overhead.