Move from a self-managed VPS to RaidFrame — keep the price, lose the ops.
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.
On a typical VPS setup:
| Task | Frequency | Your Time |
|---|---|---|
| OS security patches | Weekly | 30 min |
| Docker engine updates | Monthly | 15 min |
| SSL certificate renewal | Every 90 days | 15 min (if certbot breaks, 2 hours) |
| Nginx configuration | Per deploy | 20 min |
| Database backups | Daily (if automated) | Setup: 2 hrs, monitor: 30 min/mo |
| Disk space monitoring | Ongoing | 15 min/incident |
| Firewall / fail2ban | Setup + maintain | 1 hr setup, 15 min/mo |
| Log rotation | Setup | 30 min |
| Server migration (upgrade) | Yearly | 4-8 hours |
| Debugging downtime | When it happens | 1-4 hours |
Estimated: 10-20 hours/month. At $50/hr, that's $500-1000/month in hidden costs on your "$5 server."
curl -fsSL https://get.raidframe.com | sh
rf auth login
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
# 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
# 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/
# Copy .env from VPS
scp root@your-vps:/app/.env ./.env
# Push to RaidFrame
rf env push
rf deploy
rf domains add myapp.com
Update your DNS A record from your VPS IP to RaidFrame. Once propagated, decommission the VPS.
| Hetzner VPS | RaidFrame | |
|---|---|---|
| Price | $5-20/mo | $7-25/mo |
| SSL | Manual (certbot) | Automatic |
| Backups | Manual (cron + pg_dump) | Automatic (daily, 30-day retention) |
| Scaling | Manual (bigger server) | Automatic (horizontal) |
| Zero-downtime deploy | Manual (blue/green script) | Built-in |
| Monitoring | Manual (set up Grafana) | Built-in |
| Log aggregation | Manual (Loki/ELK) | Built-in |
| Firewall | Manual (ufw/iptables) | Built-in |
| DDoS protection | None | Built-in |
| OS patches | Manual | Not your problem |
| Docker updates | Manual | Not your problem |
| Disk space | Monitor manually | Auto-scaled |
| Multi-region | Run multiple VPS | rf regions add |
| Preview environments | Not practical | Automatic per PR |
| CI/CD | Set up yourself | Built-in |
| Recovery from failure | SSH in and debug | Auto-restart + rollback |
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.
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.
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)