Deploying

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.

Shared-vCPU servers for a small app, as listed on 11 November 2026
Provider and planvCPUMemoryDiskTraffic per monthPrice per month
Hetzner CPX12, Helsinki12 GB40 GB20 TB€9.99
Hetzner CPX12, Falkenstein or Nuremberg12 GB40 GB20 TB€11.99
Hetzner CPX22, Helsinki24 GB80 GB20 TB€16.99
Hetzner CPX22, Nuremberg24 GB80 GB20 TB€19.99
Hetzner CPX22, Singapore24 GB80 GB1 TB€26.99
Hetzner CPX11, Ashburn or Hillsboro (US)22 GB40 GB1 TB€17.99
Hetzner CPX21, Ashburn or Hillsboro (US)34 GB80 GB2 TB€32.49
DigitalOcean Basic, Regular CPU12 GiB50 GiB2,000 GiB$12
DigitalOcean Basic, Regular CPU22 GiB60 GiB3,000 GiB$18
DigitalOcean Basic, Regular CPU24 GiB80 GiB4,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 CloudDigitalOcean
GranularityHourly price, capped at the monthly pricePer second (60-second minimum), capped at the monthly price for Bundled plans
Powered-off serverBilled until deletedBilled (Bundled plans) until destroyed
Currency on the pricing pageEUR (USD selectable), excl. VATUSD

To stop paying for a server, delete it, after a snapshot if you may want it back.

Backups, snapshots, firewalls and IP addresses

What surrounds the server, from each provider's own pages, 11 November 2026
Hetzner CloudDigitalOcean
Automatic backups20% of the server price; daily, 7 slots20% 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 serverFree; blocks inbound traffic no rule allows; up to 5 per serverFree; blocks all traffic no rule allows
Apply a firewall by label or tagYes (label selectors)Yes (tags)
Public IPv4€0.50 per month, included in the shown plan pricesIncluded in Bundled plans; a separate line for v5 Droplets, $0.00 at introduction
IPv6FreeOptional when you create the Droplet
Setup on first bootCloud config (cloud-init), up to 32 KiBUser 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

FactValueSource
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 locations1.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 transfer0.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 IPv40.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
SnapshotsHetzner €0.0143 per GB per month (excl. VAT); DigitalOcean $0.06 per GB per monthHetzner Cloud and DigitalOcean pricing pages (opens in a new tab)Verified on

Sources

  1. Hetzner Cloud, Regular Performance plans (opens in a new tab), Hetzner, accessed on
  2. Hetzner Cloud, Cost-Optimized plans (opens in a new tab), Hetzner, accessed on
  3. Hetzner Cloud, General Purpose plans (opens in a new tab), Hetzner, accessed on
  4. Hetzner Cloud billing FAQ (opens in a new tab), Hetzner, accessed on
  5. Primary IPs overview (opens in a new tab), Hetzner, accessed on
  6. Firewalls overview (opens in a new tab), Hetzner, accessed on
  7. Creating a server (opens in a new tab), Hetzner, accessed on
  8. Droplet pricing (opens in a new tab), DigitalOcean, accessed on
  9. Droplet pricing details (opens in a new tab), DigitalOcean, accessed on
  10. Bandwidth billing (opens in a new tab), DigitalOcean, accessed on
  11. Regional availability (opens in a new tab), DigitalOcean, accessed on
  12. Cloud Firewalls (opens in a new tab), DigitalOcean, accessed on
  13. Cloud Firewalls pricing (opens in a new tab), DigitalOcean, accessed on
  14. How to create a Droplet (opens in a new tab), DigitalOcean, accessed on
  • 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.

    12 min read

  • 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.

    10 min read

  • 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.

    8 min read

Put OpsCrew to work on your app.

Run npx opscrew init in your app's repository. It checks your tools and tokens first, for free.