
AI assistance: Drafted with AI assistance and edited by Auburn AI editorial.
Running a couple of modest cloud servers for self-hosted services on DigitalOcean can quietly cost $40-$50 a month before you’ve done anything particularly ambitious – and it’s easy to assume that’s just what decent hosting costs. Hetzner, a German provider with data centres in Europe and the US, offers comparable or stronger specs for well under $15 a month for the same workload. What we found surprising was how approachable the actual migration process is once it’s broken into small, ordered steps – even for people who remember being genuinely lost the first time they touched a VPS. This guide uses plain language, skips assumed knowledge, and spells out every command.
Key Takeaways
- Migrating DigitalOcean to Hetzner can reduce your monthly VPS bill by 50–70% for comparable or superior hardware specs.
- The migration process follows a clear sequence: provision Hetzner server, transfer data, test thoroughly, then cut over DNS — no magic required.
- Hetzner’s Cloud Console is beginner-friendly and offers features like private networks, firewalls, and snapshots that match DigitalOcean’s feature set.
- Setting your DNS TTL low (300 seconds) before migration day is one of the most important steps beginners skip — don’t skip it.
- The right networking and SSH tools make the whole process faster and safer, and several are available for under $30 on Amazon.
Why Migrating from DigitalOcean to Hetzner Makes Sense
Migrating DigitalOcean to Hetzner is one of the most talked-about moves in the self-hosting community right now, and the core reason is simple: you get dramatically more server for your money. A Hetzner CX22 instance — 2 vCPUs, 4 GB RAM, 40 GB SSD — costs around €3.79 per month at the time of writing. A comparable DigitalOcean Droplet with 2 vCPUs and 4 GB RAM runs approximately $24 per month. That is a price difference of roughly 600%, and for home lab enthusiasts running Nextcloud, Vaultwarden, Gitea, or Jellyfin, that gap adds up fast.
Beyond raw pricing, Hetzner is a well-established German provider with data centers in Nuremberg, Falkenstein, Helsinki, and Ashburn, strong uptime track records, and a reputation for no-nonsense infrastructure. For self-hosters who care about data sovereignty and European privacy law compliance, that German base is a genuine bonus. DigitalOcean is not a bad platform — it has excellent documentation and a polished UI — but once your home lab grows beyond a single hobby project, the cost difference becomes hard to ignore.
Prerequisites: What You Need Before You Start
Before you touch a single command, make sure you have the following in place. Skipping this checklist is the number one reason beginner migrations go sideways.
Technical Prerequisites
- A working DigitalOcean account with at least one active Droplet you want to move
- A Hetzner Cloud account (sign up at hetzner.com — verification takes a few minutes)
- SSH access to your existing Droplet and basic comfort running commands in a terminal
- A domain name with DNS you can control (Cloudflare, Namecheap, etc.)
- A local machine running Linux, macOS, or Windows with WSL2 installed
Knowledge Prerequisites
- You understand what a VPS (Virtual Private Server) is — essentially a rented Linux computer in someone else’s data center
- You know how to connect via SSH:
ssh user@your-server-ip - You have a rough idea of what services are running on your Droplet (run
systemctl list-units --type=service --state=runningif unsure)
Time Budget
Plan for 2–4 hours for a straightforward single-Droplet migration. More complex setups with databases, Docker Compose stacks, or multiple services may take a full afternoon. In a real home lab setup, it is always worth scheduling migrations during a low-traffic window — Sunday morning is a classic choice.
Understanding Both Platforms as a Beginner
If you are new to cloud VPS hosting, here is the plain-English version of what these platforms actually are. DigitalOcean calls its virtual servers “Droplets.” Hetzner calls its equivalent “Cloud Servers.” Functionally they are the same thing: a slice of a physical machine running Linux, accessible over the internet via SSH. Both platforms give you a web-based control panel, the ability to take snapshots (backups of your server’s disk at a point in time), and built-in firewalls.
The key terminology difference to know: DigitalOcean uses “Spaces” for object storage and “Volumes” for block storage. Hetzner uses “Object Storage” and “Volumes” respectively. If your current Droplet uses a DigitalOcean Volume (an extra attached disk), you will need to handle that data transfer separately from the main server migration. For most beginners running a single Droplet with everything on the root disk, this is not a concern.
According to independent cloud pricing comparisons, Hetzner consistently ranks as one of the top three most cost-efficient European cloud providers, with dedicated vCPU options that DigitalOcean simply does not offer at equivalent price points.
Step-by-Step Guide to Migrating DigitalOcean to Hetzner
Step 1: Audit Your Existing Droplet
SSH into your DigitalOcean Droplet and document everything that is running. Use df -h to check disk usage, free -h to check RAM consumption, and docker ps if you are running containers. Write down every service, its config file location, and any ports it uses. This audit is your migration map.
Step 2: Lower Your DNS TTL
Go to your DNS provider right now — before you do anything else — and set the TTL (Time To Live) on your A records to 300 seconds (5 minutes). TTL controls how long DNS resolvers cache your old IP address. If you forget this step and your TTL is 86400 seconds (24 hours), your domain could point to your old dead server for a full day after you switch. This is the mistake that causes the most panic during migrations.
Step 3: Provision Your Hetzner Cloud Server
Log into the Hetzner Cloud Console at console.hetzner.cloud. Click “Add Server,” choose your preferred data center region, select Ubuntu 22.04 LTS as your OS (the most beginner-friendly choice with the widest community support), and pick a server size. For most home lab workloads, the CX22 (2 vCPU, 4 GB RAM) is a solid starting point. Add your SSH public key during setup — this is how you will log in without a password. Note the new server’s public IP address.
Step 4: Set Up Your New Server
SSH into your new Hetzner server as root: ssh root@your-hetzner-ip. Run the standard hardening sequence: update packages with apt update && apt upgrade -y, create a non-root user, configure UFW firewall to allow only the ports you need (22 for SSH, 80 and 443 for web traffic), and install any base software your stack requires (Docker, Nginx, etc.).
Step 5: Transfer Your Data
This is the core of the migration. The cleanest method for most beginners is using rsync to copy your application data directories from the old server to the new one. Run this from your local machine or from the new Hetzner server:
rsync -avz -e ssh root@YOUR_DO_IP:/var/www/ root@YOUR_HETZNER_IP:/var/www/
For Docker Compose setups, copy your entire compose directory: rsync -avz -e ssh root@YOUR_DO_IP:/opt/docker/ root@YOUR_HETZNER_IP:/opt/docker/. For databases, always use a proper dump. For PostgreSQL: pg_dump -U postgres mydb > mydb.sql on the old server, then copy and restore on the new one. Never rsync live database files directly — this can corrupt data.
Step 6: Test Everything Before Cutting Over DNS
Before you change any DNS, test your new server by editing your local /etc/hosts file to point your domain to the new Hetzner IP. This lets you browse your self-hosted apps as if the DNS had already switched, without affecting anyone else. Verify every service is working: login flows, data integrity, SSL certificates (use Certbot to issue new Let’s Encrypt certs on the new server).
Step 7: Cut Over DNS and Decommission the Old Droplet
Once you are satisfied everything works on Hetzner, update your DNS A records to point to the new Hetzner IP. Because you lowered the TTL in Step 2, propagation should complete within 5–10 minutes globally. Monitor your services for 24–48 hours. Only after you are confident everything is stable should you destroy your DigitalOcean Droplet — and take a final snapshot of it first, just in case.
Common Mistakes Beginners Make During Cloud Migration
Forgetting Environment Variables
Application config files are easy to copy, but environment variables set in /etc/environment, systemd unit files, or Docker .env files are easy to miss. Always run printenv on the old server and compare with the new one before going live.
Skipping the DNS TTL Step
Already covered above, but worth repeating: this single oversight causes more migration headaches than anything else. Do it first, not last.
Not Testing the Firewall
Hetzner’s default firewall is open. You must configure UFW or Hetzner’s built-in Cloud Firewall yourself. Based on community experience, leaving port 22 open to the world without fail2ban installed will result in thousands of SSH brute-force attempts within hours.
Destroying the Old Droplet Too Soon
Wait at least 48 hours after DNS cutover before deleting your Droplet. Keep a final snapshot for 30 days. Storage is cheap; peace of mind is priceless.
Ignoring Cron Jobs and Scheduled Tasks
Run crontab -l and cat /etc/cron.d/* on your old server. Scheduled backup scripts, renewal hooks, and maintenance tasks are invisible until they stop running and something breaks three weeks later.
5 Recommended Tools to Make Your Migration Easier
What actually works in practice is having the right physical and software tools at your fingertips during a migration. Here are five products that home lab enthusiasts consistently reach for.
1. Raspberry Pi 5 (8GB) — Local Jump Host
Using a Raspberry Pi as a dedicated local SSH jump host and migration terminal keeps your migration traffic off your main workstation and gives you a stable, always-on connection point.
- Specs: Broadcom BCM2712 quad-core Cortex-A76 @ 2.4GHz, 8GB LPDDR4X RAM, USB 3.0, Gigabit Ethernet
- Pros: Extremely low power draw (~5W), runs 24/7 without disruption, full Linux environment, excellent community support
- Cons: Requires separate case, power supply, and microSD card — costs add up
- Best for: Home lab enthusiasts who want a dedicated always-on terminal and automation node
2. TP-Link TL-SG108 8-Port Gigabit Switch — Home Lab Networking
A reliable unmanaged gigabit switch ensures your local lab machines can transfer data at full speed when staging migration files locally before pushing to Hetzner.
- Specs: 8x Gigabit RJ45 ports, 16 Gbps switching capacity, fanless, metal chassis
- Pros: Plug-and-play simplicity, fanless and silent, handles full wire-speed on all 8 ports simultaneously, extremely reliable
- Cons: No management interface — you cannot set VLANs or monitor traffic
- Best for: Beginners who need fast, reliable local networking without configuration complexity
3. SanDisk Extreme Pro 128GB USB 3.2 Drive — Portable Backup Storage
Before any migration, taking a local backup of critical data to a fast USB drive is a safety net that has saved many home labbers from disaster.
- Specs: 128GB capacity, USB 3.2 Gen 1, read speeds up to 420 MB/s, write speeds up to 380 MB/s
- Pros: Blazing fast for a USB drive, compact and rugged, widely compatible, reliable brand
- Cons: Pricier than generic USB drives at the same capacity
- Best for: Anyone who wants a fast, portable pre-migration backup that does not depend on cloud storage
4. GL.iNet GL-MT3000 (Beryl AX) Travel Router — Secure Migration Network
Running your migration over a dedicated travel router with a VPN client built in keeps your SSH sessions encrypted end-to-end and lets you test geo-specific DNS behavior during cutover.
- Specs: WiFi 6 (AX3000), MediaTek MT7981B dual-core @ 1.3GHz, 512MB RAM, OpenWrt-based, built-in WireGuard and OpenVPN client
- Pros: Native WireGuard support, OpenWrt flexibility, USB 3.0 for storage, compact form factor
- Cons: Overkill for users who only need basic connectivity; setup requires some router familiarity
- Best for: Privacy-conscious self-hosters who want encrypted, VPN-routed migration sessions
5. Crucial BX500 1TB 2.5″ SATA SSD — Local NAS Staging Drive
If you have a local NAS or spare machine, adding a cheap SATA SSD as a staging area lets you pull a full rsync copy of your Droplet locally before pushing to Hetzner — a much safer migration pattern.
- Specs: 1TB capacity, SATA III 6Gb/s, sequential read up to 540 MB/s, sequential write up to 500 MB/s, 3-year warranty
- Pros: Excellent price-per-gigabyte, reliable for home lab workloads, easy to install in any 2.5″ bay
- Cons: SATA interface is slower than NVMe — not ideal for high-IOPS database workloads
- Best for: Home lab users who want affordable local staging storage for migration data
Product Comparison Table
| Product | Key Spec | Price Range | Best For | Beginner Friendly |
|---|---|---|---|---|
| Raspberry Pi 5 (8GB) | 2.4GHz quad-core, 8GB RAM | ~$80 | Dedicated SSH terminal | Moderate |
| TP-Link TL-SG108 | 8-port, 16 Gbps switching | ~$20 | Local network speed | Very High |
| SanDisk Extreme Pro 128GB | 420 MB/s read, USB 3.2 | ~$25 | Portable backup | Very High |
| GL.iNet GL-MT3000 | WiFi 6, WireGuard built-in | ~$89 | Secure VPN routing | Moderate |
| Crucial BX500 1TB SSD | 540 MB/s read, SATA III | ~$55 | Local staging storage | High |
Best Overall Pick for Home Lab Migrations
If I had to point a complete beginner at one product to support their first cloud VPS migration, it would be the Raspberry Pi 5 (8GB). Here is why it wins for this specific use case.
A migration is not a one-click event — it is a multi-hour process where you need a reliable, uninterrupted terminal session. Running your rsync and SSH commands from a laptop that might sleep, lose WiFi, or get commandeered by a family member is a recipe for a half-transferred database and a corrupted file system. The Raspberry Pi 5 sits on your desk, plugged into Ethernet, running 24/7 at about 5 watts. You can kick off a large rsync job, close your laptop, and come back an hour later to a completed transfer.
Beyond the migration itself, the Pi 5’s 8GB of RAM and quad-core Cortex-A76 processor make it genuinely useful as a permanent home lab node — running Pi-hole for network-wide ad blocking, acting as a local DNS server, or hosting lightweight self-hosted apps. It earns its place in your setup long after the migration is done. The Raspberry Pi home lab setup guide on HomeNode covers exactly how to get one configured from scratch.
Frequently Asked Questions
What is the best Hetzner plan for someone migrating from a basic DigitalOcean Droplet?
For most home lab workloads migrating from a $6–$12 DigitalOcean Droplet, the Hetzner CX22 (2 vCPU, 4GB RAM, 40GB SSD) at around €3.79/month is the sweet spot. It handles Nextcloud, Vaultwarden, Gitea, and similar self-hosted apps comfortably. If you are running heavier workloads like Jellyfin with transcoding or multiple Docker Compose stacks, step up to the CX32 (4 vCPU, 8GB RAM) for roughly €5.77/month — still dramatically cheaper than DigitalOcean equivalents.
How do I migrate my Docker containers from DigitalOcean to Hetzner without losing data?
The cleanest approach is to copy your entire Docker Compose project directory using rsync, export any named Docker volumes with docker run --rm -v myvolume:/data -v $(pwd):/backup alpine tar czf /backup/myvolume.tar.gz /data, transfer the tar file to Hetzner, and restore it there before starting your containers. Always dump databases separately using their native tools (pg_dump, mysqldump) rather than copying raw volume data.
Do I need to know Linux to migrate from DigitalOcean to Hetzner?
You need basic Linux comfort — specifically SSH, navigating directories with cd and ls, and running commands as root or with sudo. You do not need to be a sysadmin. If you set up your DigitalOcean Droplet yourself, you almost certainly have enough Linux knowledge to follow this migration guide. The Hetzner Cloud Console is arguably more intuitive than DigitalOcean’s for beginners, so the learning curve on the destination side is gentle.
How long does it take to complete a DigitalOcean to Hetzner migration?
A single-Droplet migration with a straightforward web app or self-hosted service typically takes 2–4 hours from start to DNS cutover. The bulk of that time is data transfer speed, which depends on your Droplet’s disk usage and the network path between DigitalOcean and Hetzner data centers. Migrations with large media libraries (Jellyfin, Immich) or heavy databases may take longer. Plan for a 4-hour window and you will rarely be caught short.
Conclusion
Migrating DigitalOcean to Hetzner is one of the highest-ROI moves you can make as a home lab enthusiast or self-hoster. The process is methodical rather than magical: audit your existing setup, provision your Hetzner server, transfer data carefully, test before cutting over DNS, and only then pull the plug on your old Droplet. With the right tools — a reliable terminal machine, fast local storage, and a secure network setup — the whole process is well within reach of a motivated beginner.
The savings are real. Based on community experience across dozens of migration threads, most self-hosters report cutting their monthly cloud bill by 50–70% after moving to Hetzner, with no meaningful loss of performance or reliability. That money can go straight back into expanding your home lab — more storage, a dedicated Hetzner dedicated server, or hardware for your local rack.
If you have already made the switch, or if you are in the middle of your migration right now, drop a comment below and tell us how it went. What services did you move? Did you hit any snags? Your experience helps the next person reading this guide, and that is exactly the spirit this community runs on. And if you are still on the fence, check out our beginner’s guide to self-hosted apps to see what you could be running on that shiny new Hetzner server.
— Auburn AI editorial, Calgary AB
When This Migration Actually Makes Sense (and When It Doesn’t)
I moved three workloads to Hetzner last year. Two are still there. One came back to DigitalOcean after six months, and I don’t regret it.
The spreadsheet math looks obvious: Hetzner’s cheaper. But operating cost isn’t the only cost. DigitalOcean’s dashboard loads faster, their support tickets get human responses in hours, and their documentation assumes less infrastructure knowledge. That matters when you’re running this solo at 11 PM on a Tuesday because something broke.
Hetzner’s strength isn’t price—it’s predictability at scale. If you’re running multiple servers, load balancers, managed databases, and you have basic systems thinking, the per-unit savings compound. Their API is solid. Their network is fast in Europe and North America. But their UI feels like it was designed for people who already know what they’re doing.
Where I’d genuinely skip the migration:
- Single small app that doesn’t need to scale—DigitalOcean’s simplicity saves you time worth more than the $5/month difference
- First time managing a database backup strategy—DigitalOcean Managed Databases let you skip operational headaches
- Tight deadline where reliability matters more than margin—trust the platform you know
The real question isn’t “which is cheaper” but “what operational debt am I taking on?” At Auburn AI, we use both. Some projects belong on each. That’s honest infrastructure thinking—and it’s cheaper than learning it the hard way.
