Migrate from Hetzner / VPS

Move from a self-managed VPS to RaidFrame — keep the price, lose the ops.

Overview

You picked Hetzner (or DigitalOcean, Vultr, Linode) because it's cheap. $5/mo for a server is hard to beat. But you're also the sysadmin — security patches, nginx config, SSL renewals, database backups, Docker updates, disk monitoring, and 2am outage alerts are all on you.

RaidFrame gives you the same price point with zero ops.

What You're Currently Managing

On a typical VPS setup:

TaskFrequencyYour Time
OS security patchesWeekly30 min
Docker engine updatesMonthly15 min
SSL certificate renewalEvery 90 days15 min (if certbot breaks, 2 hours)
Nginx configurationPer deploy20 min
Database backupsDaily (if automated)Setup: 2 hrs, monitor: 30 min/mo
Disk space monitoringOngoing15 min/incident
Firewall / fail2banSetup + maintain1 hr setup, 15 min/mo
Log rotationSetup30 min
Server migration (upgrade)Yearly4-8 hours
Debugging downtimeWhen it happens1-4 hours

Estimated: 10-20 hours/month. At $50/hr, that's $500-1000/month in hidden costs on your "$5 server."

Step 1: Install the CLI

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

Step 2: Import from Docker Compose

Most VPS setups use Docker Compose:

rf init --from docker-compose

If you're not using Docker Compose, create a raidframe.yaml manually:

services:
  web:
    type: web
    build:
      dockerfile: Dockerfile
    port: 3000
    scaling:
      min: 1
      max: 5

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

Step 3: Migrate Data

Database

# SSH into your VPS and export
ssh root@your-vps "docker exec postgres pg_dump -U postgres mydb" > backup.sql

# Import to RaidFrame
rf add postgres
rf db import main backup.sql

Files / Uploads

# Download from VPS
scp -r root@your-vps:/data/uploads ./uploads

# Upload to RaidFrame storage
rf add storage
rf storage sync ./uploads/ s3://my-app-uploads/

Environment Variables

# Copy .env from VPS
scp root@your-vps:/app/.env ./.env

# Push to RaidFrame
rf env push

Step 4: Deploy

rf deploy

Step 5: Point DNS

rf domains add myapp.com

Update your DNS A record from your VPS IP to RaidFrame. Once propagated, decommission the VPS.

VPS → RaidFrame Comparison

Hetzner VPSRaidFrame
Price$5-20/mo$7-25/mo
SSLManual (certbot)Automatic
BackupsManual (cron + pg_dump)Automatic (daily, 30-day retention)
ScalingManual (bigger server)Automatic (horizontal)
Zero-downtime deployManual (blue/green script)Built-in
MonitoringManual (set up Grafana)Built-in
Log aggregationManual (Loki/ELK)Built-in
FirewallManual (ufw/iptables)Built-in
DDoS protectionNoneBuilt-in
OS patchesManualNot your problem
Docker updatesManualNot your problem
Disk spaceMonitor manuallyAuto-scaled
Multi-regionRun multiple VPSrf regions add
Preview environmentsNot practicalAutomatic per PR
CI/CDSet up yourselfBuilt-in
Recovery from failureSSH in and debugAuto-restart + rollback

Keep Your Dockerfile

Your existing Dockerfile works on RaidFrame with zero changes. If you were running:

docker compose up -d

You now run:

rf deploy

Same container, managed infrastructure.

What About Coolify / Dokploy?

If you're using Coolify or Dokploy on your VPS to get a PaaS-like experience — those are great tools. But you're still responsible for the underlying server. When Hetzner has a network issue, or your disk fills up, or the Docker daemon crashes at 3am — that's on you.

On RaidFrame, infrastructure is our problem. You write code. We run it.

Decommission Your VPS

Once everything is verified on RaidFrame:

# Final backup (just in case)
ssh root@your-vps "tar czf /tmp/full-backup.tar.gz /data"
scp root@your-vps:/tmp/full-backup.tar.gz ./vps-backup.tar.gz

# Cancel Hetzner server
# (do this through the Hetzner dashboard)