Skip to main content

From $1,432 to $233: What the DigitalOcean-to-Hetzner Wave Says About Mid-Tier Cloud Pricing

10 min readDora NodaDora Noda
Share
On this page

From $1,432 a month to $233 — an 84% cut, with better hardware on the receiving end — and zero downtime for live mobile apps serving hundreds of thousands of users. That is the headline number from Isa Yeter's March 2026 write-up of moving his company's production stack from DigitalOcean to a Hetzner dedicated server, a post that hit the Hacker News front page in April 2026 and stayed there long enough to collect hundreds of comments full of other founders posting their own before-and-after numbers.

This post works the actual numbers: the headline migration table, the unit-price recompute behind it, the genre of exits it belongs to — and the honest version, with Hetzner's own 2026 price hikes priced in. Because the interesting story is not just that one team saved $14,388 a year. It is where the exit started: not AWS, but DigitalOcean — the mid-tier cloud that was itself supposed to be the budget option.

The worked number first: 1,432becomes1,432 becomes 233

Yeter's company, running in Turkey where dollar-denominated bills compound against a weakening lira, paid DigitalOcean $1,432/month for a 32-vCPU, 192 GB RAM droplet with 600 GB SSD, two 1 TB block volumes, and backups enabled. The replacement: a Hetzner AX162-R dedicated box — AMD EPYC 9454P (48 cores / 96 threads), 256 GB DDR5, 1.92 TB NVMe Gen4 in RAID1 — for $233/month. Same stack, more of everything, $1,199/month kept:

DigitalOceanHetzner AX162-R
CPU32 vCPU (shared)48 cores / 96 threads EPYC 9454P (dedicated)
RAM192 GB256 GB DDR5
Disk600 GB SSD + 2 × 1 TB volumes1.92 TB NVMe Gen4 RAID1
Monthly cost$1,432$233
Annual delta$14,388 saved (84%)

And this was no toy project being rehomed. The stack held 30 MySQL databases (248 GB of data), 34 Nginx virtual hosts, GitLab EE with a 42 GB backup footprint, a 30 GB Neo4j graph, Supervisor-managed background workers, a Gearman job queue — plus live mobile traffic. The migration ran in six phases with zero downtime, and doubled as an overdue OS escape: CentOS 7, long past end-of-life, to AlmaLinux 9.7. Notably, Yeter is explicit that he was a happy 8-year DigitalOcean customer with no complaints about reliability. The exit was pure price-to-performance arithmetic — which is exactly what should worry a mid-tier cloud more than an angry-migration story would.

The genre shift: exits now start at the mid-tier

Cloud-exit write-ups used to originate one rung up. The classic genre piece was the AWS-to-bare-metal teardown: a $9,000/month AWS bill collapsing to $1,100/month on Hetzner, or a $3,000/month MongoDB Atlas setup self-hosted for $300–$400 — 90% cuts achieved by deleting the hyperscaler premium (managed-service markups, egress, over-provisioned managed Kubernetes). Those stories argued you were paying for AWS features you never used.

The 2026 wave argues something narrower and more uncomfortable: teams are now leaving clouds whose entire pitch was simplicity and fair pricing. Yeter's thread filled with same-shape reports — one founder at $400/month to $70 on a smaller Hetzner tier, another moving both a Linode box and a DigitalOcean box with similar savings, Talk Python's retrospective of moving 20-plus services off DigitalOcean onto Hetzner's US capacity for roughly $1,500 a year saved plus an 8x bandwidth jump.

The genre moved from "we stopped paying the hyperscaler tax" to "we stopped paying the mid-tier markup" — and the mid-tier markup turns out to be a ~6x multiple on raw compute, as the unit table below shows.

That shift matters because the decision calculus is different. Leaving AWS means rebuilding managed services you depended on. Leaving DigitalOcean mostly means re-provisioning VMs you already operated yourself — Yeter's team already ran their own MySQL, Nginx, and GitLab on the droplet. The migration cost is a weekend of rsync and DNS TTL management, not a re-architecture. When the thing you are paying for is convenience you already outgrew, the exit has almost no technical friction left to stop it.

Unit economics: the line-by-line gap (with Hetzner's hikes included)

Headline migrations always invite the same objection: cherry-picked tiers, stale prices. So here is the boring unit table at 2026 prices — including the part Hetzner fans prefer to skip, which is that Hetzner raised prices twice in 2026. The April adjustment lifted cloud lines roughly 30–40%, and the June 15 repricing hit the popular CPX shared-vCPU family hardest (up 144–192%, with some US-region SKUs nearly tripling) while entry CX and ARM-based CAX lines rose a gentler ~30%. The old CX22 generation was deprecated outright in favor of new CX23 SKUs. Existing instances kept prior pricing; new orders pay the new rates.

All of that is priced into the numbers below — and the gap still is not close:

UnitDigitalOcean (2026)Hetzner (post-hike, 2026)
2 vCPU / 4 GB VM$24/mo (Basic Droplet)~$9.49/mo (CPX22, post-April pricing)
Entry 2 vCPU / 4 GB VM$24/mo (same droplet)~$4/mo (CX22 class)
Block storage$0.10/GiB-mo~$0.05/GiB-mo
Automated backups+20–30% of droplet priceIncluded snapshots / ~€0.06/GiB-mo object storage
Included transfer~4 TB on the comparable droplet20 TB on CX-class cloud servers
Managed Postgres entryfrom $15/mo (shared)No managed database product

Two things to read out of that table. First, the compute multiple is structural, not promotional: $24 versus $4–$9 for the same shape of VM, before any volume, backup, or transfer line. Hetzner could raise CPX prices another 50% tomorrow and still clear the bar by 2x — which is presumably why the June hike stuck without denting the migration genre.

Second, the last two rows are where the honest accounting lives: DigitalOcean's managed Postgres (from $15/month) and Spaces object storage ($5/month with CDN included) have no Hetzner equivalent — Hetzner object storage runs ~€6.49/month with no CDN, and there is no managed database at all. Anyone whose stack leans on those services is not comparing $24 to $4; they are comparing a platform bill to a build-it-yourself project. Which is the next section.

What moves cleanly, and what forces an architecture decision

Yeter's migration worked so well because his stack sat almost entirely in the "moves cleanly" column. Self-managed MySQL on a droplet becomes self-managed MySQL on a bigger box: rsync the data directory, replicate, cut over DNS. Same for Nginx configs, GitLab, Neo4j, Supervisor workers. The droplet was already just a Linux server with a nice API — so the exit was a server move, not a platform migration. The six-phase, zero-downtime plan was careful operational work (parallel stack build, data sync, TTL shortening, staged cutover), but none of it required changing what the software was.

The friction lives one layer up, in the managed services teams adopt precisely so they do not have to be database administrators:

  • Managed databases. DigitalOcean's managed Postgres/MySQL/Redis start around $15/month for shared-CPU entry tiers, with the standard tiers teams actually run production on closer to $50–$120/month before standby nodes. The managed-DB markup runs roughly 2–3x the raw droplet cost for equivalent specs. Moving that to Hetzner means operating Postgres yourself — backups, failover, major-version upgrades, 3 a.m. pages — or paying a third party (Neon, Supabase, RDS) whose bill follows you to the new home. Either way, the database line does not collapse 84%; it relocates.
  • Object storage + CDN. Spaces at $5/month for 250 GB with a CDN in front is genuinely cheap for what it bundles; Hetzner's object offering costs slightly more and ships no CDN, so the migration either adds a Cloudflare-style front door (often free, but it is another vendor relationship) or accepts origin-served bytes. Small line, real chore.
  • App Platform and the dashboard. Teams that deploy via DigitalOcean's App Platform rather than droplets are buying a PaaS workflow — git-push deploys, preview apps, managed TLS — and Hetzner sells no such thing. Their exit is not a migration but a platform rebuild, which is why App Platform users barely appear in the exit genre despite paying the steepest per-unit markups.

The rule of thumb: the exit discount equals the share of your bill that pays for undifferentiated compute you already operate yourself. Yeter's stack was ~100% that, hence 84%. A stack split across managed Postgres, Spaces, and App Platform might see 30–40% — still worth doing, but a quarter-long project with new on-call surface, not a weekend rsync.

Making the next migration a machine-pool swap

There is a second-order lesson buried in Yeter's write-up: the migration was cheap because the infrastructure was already cattle-shaped — standard Linux, standard services, nothing coupled to a DigitalOcean API beyond DNS and the droplet itself. Every team should assume it will do this again (today's Hetzner AX-line pricing is tomorrow's legacy deal; the June 2026 hikes proved the floor moves under everyone). The goal is to make the next exit a machine-pool swap instead of a rebuild.

Concretely, that means three things. First, keep machine definitions declarative and vendor-neutral: Terraform/OpenTofu modules or Cluster API machine templates where the provider-specific portion (server type, image, region) is a handful of parameters, not the architecture. Hetzner's own generation rename — CX22 deprecated, CX23/CPX Gen2/CAX ARM64 taking over — already broke every hardcoded server_type string once this year; templates that parameterize the SKU survive the next reshuffle. Second, keep state and routing portable by default: DNS with short TTLs as a matter of policy, database replication that assumes the replica may live on another vendor's network, object storage behind an S3-compatible interface rather than a vendor SDK. Third, keep the deployment layer above the machines: containers or a small PaaS abstraction that targets "a Kubernetes cluster" rather than "our DigitalOcean account," so the cutover moves workloads instead of rebuilding them.

Teams running this shape — Cluster API managing Hetzner machine pools behind a stable deployment interface — report the steady state the genre is converging on: owned hardware economics with cloud-style machine lifecycle, where changing vendors means rolling a new pool and draining the old one. That is what turns a $14,388/year decision from a six-phase project into routine operations.

The takeaway

The DigitalOcean-to-Hetzner wave is not really about either vendor. It is the market discovering, one invoice at a time, that steady-state compute has a commodity price — roughly $4–$9/month per 2-vCPU slice, 20 TB of transfer included — and that any bill materially above it needs a justification denominated in managed services actually consumed, not vibes about developer experience. Yeter kept none of DigitalOcean's managed services, so he kept none of its markup, and eight years of loyalty discounted nothing. Audit your own bill the same way: circle every line that pays for hardware you already operate yourself, price that slice at commodity, and see what remains. If the answer is "almost everything," you already know what next quarter's project is.

Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own. Star the repo on GitHub or deploy your first app today.

Related articles

Run this on infrastructure you own

bex is the open-source, AI-native Render alternative — push a git repo and get a running HTTPS service on your own machines.

Get started with bex