Hetzner vs DigitalOcean for a small production app
Plans, prices, traffic, regions, backups, snapshots, firewalls and IPv4 costs from both providers' own pages on 11 November 2026, compared for a small app with a database.
TL;DR
- For 2 to 4 GB of memory in the EU, Hetzner (opens in a new tab) listed €9.99 to €16.99 a month (Helsinki, excl. VAT) and DigitalOcean (opens in a new tab) $12 to $24, on 11 November 2026.
- Hetzner includes 20 TB of traffic a month in its EU locations; DigitalOcean includes 2,000 to 4,000 GiB on those plans, pooled across your Droplets.
- DigitalOcean has more regions (16 datacenters open for new resources, on four continents) and more managed products; Hetzner's EU prices are lower for the same memory, but its US and Singapore plans cost more and include far less traffic.
- Both put a free firewall in front of the server, bill a powered-off server, and charge 20% of the server price for backups (DigitalOcean: 30% for daily).
On this page
For a small production app, Hetzner and DigitalOcean differ mainly in price per resource, included traffic, regions and the services around the server. On 11 November 2026, in the EU, Hetzner listed a 2 vCPU, 4 GB server at €16.99 a month excluding VAT (Helsinki) with 20 TB of traffic, and DigitalOcean listed a 2 vCPU, 4 GiB Droplet at $24 with 4,000 GiB. DigitalOcean has more regions, per-second billing and more managed products; Hetzner gives more for the money in its EU locations. Which is better depends on where your users are and what you need beside the server.
This comparison belongs to our complete guide to deploying a web app to a VPS. Every number below comes from the providers' own pricing pages and documentation, read on 11 November 2026; prices change, so check them before you buy. We did not benchmark performance, support or reliability, so this article makes no claim about them.
What "a small production app" means here
One web app with a database (PostgreSQL (opens in a new tab) in our examples) and a reverse proxy, run with Docker (opens in a new tab) Compose on one server, with a few thousand to a few hundred thousand requests a day. In our tests such a stack idled under 150 MB of memory, but real traffic and the database's cache need more: plan on 2 GB at least and 4 GB to be comfortable. So the comparison looks at 2 GB and 4 GB servers with shared vCPUs, the class both providers sell for this.
Prices for the sizes that matter
Hetzner shows prices in euros excluding VAT, and they differ by location. DigitalOcean shows US dollars and one price per plan. We do not convert currencies: compare in the one you pay in, and check what tax applies to you.
| Provider and plan | vCPU | Memory | Disk | Traffic per month | Price per month |
|---|---|---|---|---|---|
| Hetzner CPX12, Helsinki | 1 | 2 GB | 40 GB | 20 TB | €9.99 |
| Hetzner CPX12, Falkenstein or Nuremberg | 1 | 2 GB | 40 GB | 20 TB | €11.99 |
| Hetzner CPX22, Helsinki | 2 | 4 GB | 80 GB | 20 TB | €16.99 |
| Hetzner CPX22, Nuremberg | 2 | 4 GB | 80 GB | 20 TB | €19.99 |
| Hetzner CPX22, Singapore | 2 | 4 GB | 80 GB | 1 TB | €26.99 |
| Hetzner CPX11, Ashburn or Hillsboro (US) | 2 | 2 GB | 40 GB | 1 TB | €17.99 |
| Hetzner CPX21, Ashburn or Hillsboro (US) | 3 | 4 GB | 80 GB | 2 TB | €32.49 |
| DigitalOcean Basic, Regular CPU | 1 | 2 GiB | 50 GiB | 2,000 GiB | $12 |
| DigitalOcean Basic, Regular CPU | 2 | 2 GiB | 60 GiB | 3,000 GiB | $18 |
| DigitalOcean Basic, Regular CPU | 2 | 4 GiB | 80 GiB | 4,000 GiB | $24 |
Hetzner's prices include the IPv4 address, as do DigitalOcean's Bundled plans.
A few things the table does not show:
- Availability. On 11 November 2026 Hetzner's page marked all eight Cost-Optimized plans (the CX and Arm-based CAX lines, from €5.99 for 2 vCPU and 4 GB) as "not available", while the Regular Performance plans above could be ordered. That can change from one day to the next: check the console before you plan around a type.
- Smaller servers. Hetzner's new CPX02 (1 vCPU, 1 GB, 20 GB) started at €5.49 in Helsinki, and DigitalOcean's smallest Basic Droplets cost $4 (512 MiB) and $6 (1 GiB). They suit a static site or a tiny app without a database.
- Dedicated vCPUs. When shared CPUs are not enough, Hetzner's General Purpose line started at €36.99 (CCX13: 2 dedicated vCPUs, 8 GB) and DigitalOcean's CPU-Optimized Droplets at $42 (2 vCPUs, 4 GiB).
- CPU type. Both describe these plans as shared: DigitalOcean says Basic Droplets suit "bursty applications that can handle variable levels of CPU", and Hetzner says its Regular Performance plan suits "workloads that can handle variable processor performance".
Traffic
Traffic is where the two differ most.
- Hetzner includes 20 TB of outgoing traffic a month on these plans in its EU locations, and charges €1.00 (excl. VAT) per extra TB there. In Singapore the CPX22 includes 1 TB, with extra traffic at €7.40 per TB; in the US the CPX11 and CPX21 include 1 TB and 2 TB. Incoming and internal traffic are free.
- DigitalOcean includes 2,000 GiB on the $12 Droplet and 4,000 GiB on the $24 one. The allowance is pooled across all Droplets in your team (it accrues per second while each Droplet exists), inbound transfer is free, and extra outbound transfer costs $0.01 per GiB, or about $10 per TiB.
For an app that serves large files or a lot of media from the server itself, the EU difference is large. For a typical small web app, compare your current outbound traffic with both allowances: 2,000 GiB a month is about 65 GiB a day.
Regions
- Hetzner Cloud: Falkenstein, Nuremberg (Germany) and Helsinki (Finland) in the EU; Ashburn, Virginia and Hillsboro, Oregon in the US; Singapore.
- DigitalOcean: 16 datacenters open for new resources on its regional availability page, among them New York, San Francisco, Toronto, Atlanta, Amsterdam, London, Frankfurt, Singapore, Bangalore and Sydney. In Atlanta, Richmond and Kansas City, Basic Droplets came with Premium CPUs only, so the Regular plans in the table were not offered there.
If your users are in Australia or India, or spread across continents, DigitalOcean has a datacenter closer to more of them. If they are in Europe, both have EU locations, and Hetzner's EU locations are its cheapest.
Billing
| Hetzner Cloud | DigitalOcean | |
|---|---|---|
| Granularity | Hourly price, capped at the monthly price | Per second (60-second minimum), capped at the monthly price for Bundled plans |
| Powered-off server | Billed until deleted | Billed (Bundled plans) until destroyed |
| Currency on the pricing page | EUR (USD selectable), excl. VAT | USD |
To stop paying for a server, delete it, after a snapshot if you may want it back.
Backups, snapshots, firewalls and IP addresses
| Hetzner Cloud | DigitalOcean | |
|---|---|---|
| Automatic backups | 20% of the server price; daily, 7 slots | 20% of the Droplet price weekly or 30% daily; or usage-based from $0.01 per GiB-month, up to every 4 hours, retention 3 days to 6 months |
| Snapshots | €0.0143 per GB per month, excl. VAT | $0.06 per GB per month |
| Firewall outside the server | Free; blocks inbound traffic no rule allows; up to 5 per server | Free; blocks all traffic no rule allows |
| Apply a firewall by label or tag | Yes (label selectors) | Yes (tags) |
| Public IPv4 | €0.50 per month, included in the shown plan prices | Included in Bundled plans; a separate line for v5 Droplets, $0.00 at introduction |
| IPv6 | Free | Optional when you create the Droplet |
| Setup on first boot | Cloud config (cloud-init), up to 32 KiB | User data (cloud-config or a script) |
The firewall row matters for Docker hosts: Docker's own documentation warns that ports published by containers bypass ufw and firewalld rules on the server, so a firewall the provider runs outside the server is the one to rely on.
Services around the server
DigitalOcean's product menu lists Managed Databases, App Platform, Kubernetes (opens in a new tab), Functions, Spaces object storage, Load Balancers, Block Storage and an uptime checker, all in the same account. Hetzner Cloud's plan page lists Block Storage, Object Storage, Load Balancers, private Networks, Firewalls, Backups, Snapshots and Floating IPs; we did not find a managed database among them. If you want the database run for you instead of in a container next to the app, that difference decides it.
Hetzner vs DigitalOcean: what each is better for
Hetzner fits better when:
- your users are mostly in Europe and the server runs in Falkenstein, Nuremberg or Helsinki;
- you serve a lot of outgoing traffic (20 TB included in the EU);
- you want the most memory and disk for the money and run your own database in a container.
DigitalOcean fits better when:
- your users are outside Europe, or on several continents, and you want a nearby region;
- you want managed services (a database, object storage, an app platform) from the same provider;
- you want flexible backups (daily, every 4 hours, longer retention) or per-second billing for short-lived servers.
Either works for the setup in this series: Ubuntu, Docker, Compose, Caddy (opens in a new tab) and a GitHub Actions (opens in a new tab) deploy are identical on both. The two walk-throughs differ mainly in the console steps: Deploy a Docker Compose app to Hetzner with GitHub Actions and Deploy a Docker app to a DigitalOcean Droplet.
Switching later
Because the app runs as a Docker image with a Compose file, moving between the two is a migration of data and DNS, not a rewrite: create the new server, deploy the same image, copy the database with pg_dump and pg_restore, lower the DNS TTL a day before, and switch the records. The pillar guide has the dump and restore commands we tested.
Doing this with OpsCrew
OpsCrew, our open-source deploy tool, works with both providers. Its design step proposes server options with their monthly cost before anything is created (how it works), and once the app runs, opscrew advise reads both providers' price lists and tells you when the same server costs less at the other provider in your region (advice on size and cost). opscrew retarget then moves a live app with its data between Hetzner Cloud, DigitalOcean or a server you already have, sets the new side up next to the old one, and switches DNS only after the app is checked there (moving your app).
For every other part of running the server, from DNS to backups and hardening, see how to deploy a web app to a VPS.
Key facts
| Fact | Value | Source |
|---|---|---|
| Hetzner CPX22 (2 vCPU, 4 GB, 80 GB NVMe, 20 TB) | 16.99 EUR per month, excl. VATHelsinki; €19.99 in Nuremberg, €26.99 in Singapore (1 TB traffic). IPv4 included. | Hetzner Cloud, Regular Performance (opens in a new tab)Verified on |
| DigitalOcean Basic Droplet (2 vCPU, 4 GiB, 80 GiB SSD, 4,000 GiB) | 24 USD per monthRegular CPU, IPv4 included. | DigitalOcean Droplet pricing (opens in a new tab)Verified on |
| Hetzner extra traffic in EU locations | 1.00 EUR per TB, excl. VAT€7.40 per TB in Singapore. Only outgoing traffic is billed. | Hetzner Cloud, Regular Performance (opens in a new tab)Verified on |
| DigitalOcean extra outbound transfer | 0.01 USD per GiBBeyond the allowance pooled across a team's Droplets; inbound is free. | DigitalOcean bandwidth billing (opens in a new tab)Verified on |
| Hetzner primary IPv4 | 0.50 EUR per month, excl. VATIncluded in the plan prices Hetzner shows; IPv6 is free. | Hetzner Docs, Primary IPs (opens in a new tab)Verified on |
| Snapshots | Hetzner €0.0143 per GB per month (excl. VAT); DigitalOcean $0.06 per GB per month | Hetzner Cloud and DigitalOcean pricing pages (opens in a new tab)Verified on |
Sources
- Hetzner Cloud, Regular Performance plans (opens in a new tab)
- Hetzner Cloud, Cost-Optimized plans (opens in a new tab)
- Hetzner Cloud, General Purpose plans (opens in a new tab)
- Hetzner Cloud billing FAQ (opens in a new tab)
- Primary IPs overview (opens in a new tab)
- Firewalls overview (opens in a new tab)
- Creating a server (opens in a new tab)
- Droplet pricing (opens in a new tab)
- Droplet pricing details (opens in a new tab)
- Bandwidth billing (opens in a new tab)
- Regional availability (opens in a new tab)
- Cloud Firewalls (opens in a new tab)
- Cloud Firewalls pricing (opens in a new tab)
- How to create a Droplet (opens in a new tab)
Related articles
- Deploying
How to deploy a web app to a VPS: the complete guide
From an empty server to a production app: server size, Docker, a reverse proxy with HTTPS, DNS, CI/CD, secrets, backups, zero-downtime updates, previews, logs and hardening.
- Deploying
Deploy a Docker Compose app to Hetzner with GitHub Actions
A Hetzner Cloud server set up by a tested cloud-init file, behind Hetzner's firewall, updated by a GitHub Actions workflow that builds your image, pushes it to GHCR and deploys it over SSH.
- Deploying
Deploy a Docker app to a DigitalOcean Droplet
Create a Droplet, lock it down with a Cloud Firewall, install Docker from Docker's own repository, and run your app with Compose and automatic HTTPS. Every command tested; prices checked on 11 November 2026.