Hetzner is a fine host. But if your users are in Ukraine, every request travels to Germany and back — 40–60 ms of latency for no good reason. Add a EUR-denominated bill and support working European business hours, and the reasons to move become purely pragmatic.
What you get after migrating to a Ukrainian cloud: ~1 ms ping from Kyiv, ~7 ms from Lviv — for e-commerce, game servers and any interactive apps the difference is immediate; hourly billing with a predictable invoice; 24/7 support; and a free network stack — Load Balancer, Firewall and private networks at $0.
List what runs (web server, database, queues, cron jobs), how much data you have (disk, DB), your domains and DNS records, and external dependencies (SMTP, APIs, webhooks). For a typical server this takes half an hour. If your setup is bigger than 3–5 servers — request a migration plan: the assessment is free.
Sign up in the console and create an instance comparable to your Hetzner one. Rough mapping: CX22/CX32 (2 vCPU) → ocp-3 (2 vCPU / 8 GB, ≈$22/mo); CX42 (4 vCPU) → ocp-5 (4 vCPU / 16 GB, ≈$43/mo). Billing is hourly — running two sites in parallel during migration costs cents, not a double month.
Close everything unnecessary with the free Firewall right away: only 80/443 to the world, SSH from your IP only.
The classic — rsync directly between servers:
rsync -avz --progress -e ssh /var/www/ user@NEW_SERVER_IP:/var/www/Move configs (nginx, systemd units, crontab) deliberately, not blindly — a good moment to throw away years of accumulated cruft. If the app runs in Docker, it is even simpler: compose file plus volumes.
For a small database, dump/restore inside the switchover window is enough. For a database you cannot stop for long — replication: bring up a replica on the new server (streaming replication for PostgreSQL, source-replica for MySQL), wait for sync — and at switchover time the data is current without hours of downtime.
If you kept files in a Hetzner Storage Box or any S3-compatible storage — move them with one command, the APIs are compatible:
rclone sync hetzner-remote:bucket ocp-remote:bucket --progressOneCloudPlanet S3 storage costs $0.005/GB/mo, with traffic and requests free — 1 TB of archives is ~$5/mo. Set up scheduled backups in the panel right away so the new server lives by the 3-2-1 rule from day one.
Verify everything on the new server by its IP (hosts file or a test subdomain): app, database, cron, mail, integrations. Then the finale: lower DNS TTL to 300 seconds a day ahead, switch A-records to the new IP during off-hours — traffic flows over in minutes. Do not delete the old Hetzner server immediately: keep it for a week as insurance.
How long does the move take? A typical server (site + DB up to 100 GB) — a day of preparation and minutes of downtime at DNS switchover.
What if I have a dedicated server, not a VPS? Same steps. By the way, dedicated servers here are provisioned in ~2 minutes via panel or API with hourly billing — from $0.17/hr for 24 physical cores and 128 GB RAM.
I do not want to do this by hand. Tell us what you run — assessment and plan are free; we migrate with replication and tests, downtime only at switchover.