karawaci.kode

2026-06-20 · 7 min

Hetzner vs DigitalOcean: SMB SaaS Indonesia 1 Tahun

Saya operate infrastructure untuk 6 klien SaaS Indonesia. 4 di Hetzner, 2 di DigitalOcean (legacy dari sebelum saya onboard). Setelah satu tahun data konkret: total bill, insiden, latency dari user Indonesia. Comparison terstruktur.

Stack & lokasi

Hetzner (4 klien):

  • Region: FSN1 (Falkenstein, Germany) untuk 3 klien
  • Region: NBG1 (Nuremberg) untuk 1 klien
  • Instance: cx21, cx31, cx41 mix
  • Tidak ada region Singapore atau Asia

DigitalOcean (2 klien):

  • Region: SGP1 (Singapore) untuk keduanya
  • Instance: Basic Droplet 4GB / 8GB
  • Plus Spaces (S3-compat) untuk file storage

Semua serve user Indonesia. Hetzner dengan Cloudflare CDN di depan untuk static assets. DO juga pakai Cloudflare CDN.

Cost (rata-rata bulanan per spec equivalent)

Spec: 4 vCPU, 8GB RAM, 80GB SSD, 20TB bandwidth.

Hetzner cx41:

  • $25/mo (~Rp 400k)
  • Bandwidth inclusive 20TB
  • Tidak ada extra cost untuk snapshot mingguan

DigitalOcean Basic Premium 8GB:

  • $48/mo (~Rp 770k)
  • Bandwidth inclusive 5TB (extra $0.01/GB)
  • Snapshot $0.05/GB/mo
  • Backup $9.60/mo opsional

Hetzner 48% lebih murah untuk spec equivalent. Untuk 4 klien Hetzner: total saving vs DO setara ~$92/mo (~Rp 1,47jt). Setahun: ~Rp 18jt saving.

Latency dari Indonesia (Indihome 100Mbps Jakarta)

Ping baseline:

  • Hetzner FSN1 (Germany): 178ms
  • Hetzner NBG1 (Germany): 184ms
  • DigitalOcean SGP1 (Singapore): 14ms

Singapore 13x lebih dekat.

Tapi dengan Cloudflare CDN di depan untuk semua static asset + edge cache:

  • Static HTML/JS/CSS: 18-32ms (semua dari CDN POP Jakarta)
  • API call (dynamic, harus hit origin): 198ms Hetzner, 35ms DO
  • WebSocket (persistent, satu kali handshake): 198ms Hetzner, 35ms DO

Untuk app yang dominan static + edge-cached: tidak feel beda.

Untuk app heavy API call (kasus 2 klien saya: real-time dashboard yang refresh setiap 5 detik): DO clearly better. Saya mitigate Hetzner dengan aggressive caching layer (Redis di-warm + ETag) — bisa equalize untuk user perception, tapi engineering effort tambahan.

Insiden 1 tahun

Hetzner:

  • 1 networking blip di FSN1 (15 menit) — Februari 2026. Status page accurate, communication proactive.
  • 1 hardware migration notification (planned, 1 minggu lead time). Saya snapshot + migrate ke node baru di window maintenance. Zero downtime karena planning.
  • 0 unplanned outage langsung kena saya

DigitalOcean:

  • 2 droplet performance degradation di SGP1 (CPU steal time spike, noisy neighbor). Saya buka support ticket, response 4-6 jam. Resolution: migrate ke host node berbeda.
  • 1 Spaces outage 22 menit di SGP1 — Maret 2026.

Untuk pengalaman ops keseluruhan: keduanya solid. Hetzner sedikit lebih konsisten. DO kena noisy neighbor lebih sering di Basic tier.

Support response time

Saya buka ticket comparable severity (low priority, billing question):

  • Hetzner: rata-rata response 18 jam. Bahasa Inggris standard. Tidak ada chat.
  • DigitalOcean: rata-rata response 2,5 jam. Chat available 24/7 untuk billing.

DO menang besar di support response. Untuk fast resolution: DO. Untuk async-OK: Hetzner.

Saya tidak pernah butuh support critical dari keduanya — most issue saya self-resolve via knowledge + logs.

Reliability metrics

Uptime tracked via UptimeRobot 1-minute check, public dashboard ke klien.

Hetzner instances (1 tahun rata-rata):

  • Klien A: 99.97%
  • Klien B: 99.99%
  • Klien C: 99.96%
  • Klien D: 99.98%

DigitalOcean instances (1 tahun rata-rata):

  • Klien E: 99.94%
  • Klien F: 99.93%

Hetzner sedikit lebih reliable di my sample. Bukan beda signifikan, tapi consistent.

Snapshot & backup

Hetzner:

  • Snapshot: $0.01/GB/mo. Untuk 80GB system + 200GB data = $2.80/mo.
  • Backup automatic (built-in): 20% extra cost (~$5/mo untuk cx41). 7-day retention.

DigitalOcean:

  • Snapshot: $0.05/GB/mo. Untuk same size = $14/mo.
  • Backup automatic: $9.60/mo for $48 droplet. Weekly snapshot, 4 retained.

Hetzner 5x lebih murah untuk snapshot. Material saving untuk DB-heavy klien.

Networking

Hetzner:

  • IPv6 default
  • Cloud Firewall built-in (basic L3/4 rule)
  • Private network gratis antar Hetzner instance di same region
  • Floating IP: $4/mo

DigitalOcean:

  • IPv6 default
  • Cloud Firewall built-in
  • VPC default (same region, internal traffic gratis)
  • Reserved IP gratis (untuk yang attached ke droplet)

Tie di sini. Kedua-nya OK untuk SMB ops.

Yang saya migrate (atau tidak)

Klien E dan F (DO): saya assessment untuk migrate ke Hetzner. Hasil:

  • Klien E (real-time dashboard, heavy API): keep di DO. Latency requirement penting. Cost premium worth-it untuk UX.
  • Klien F (SaaS B2B subscription, mostly static + occasional API): migrate ke Hetzner cx31, behind CF CDN. Saving $35/mo, latency irrelevant.

Klien F migrate: 1 hari kerja (snapshot DO → restore di Hetzner via rsync, swap DNS Cloudflare). Saving annualized Rp 6,7jt.

Yang break (migration F)

  1. Postgres versi mismatch: DO managed Postgres lebih baru patch dari Hetzner stock. Saya upgrade Hetzner ke same version sebelum restore.

  2. DNS propagation: TTL DO 3600. Saya turunkan ke 60 1 jam sebelum cutover. Smooth transition.

  3. S3 endpoint: app pakai DO Spaces. Saya migrate ke Cloudflare R2. Endpoint URL change. Saya tambah env var + redeploy.

Verdict per use case

  • SaaS B2B / static-heavy / cost-sensitive Indonesia user: Hetzner + Cloudflare CDN.
  • Real-time / latency-critical Indonesia user: DigitalOcean Singapore.
  • Multi-region / global app: DigitalOcean lebih banyak region pilihan.
  • Solo dev side project: Hetzner. Cost saving signifikan.

Saving Hetzner is real, tapi latency cost real juga. Pilih berdasarkan profile app, bukan price tag saja.

Bukan magic — saya tidak rekomendasi blanket migrate. Audit dulu requirement, hitung TCO termasuk engineering ops time. Pattern serupa dengan comparison Hetzner di payment gateway saya: right tool for right scale.

Ditulis oleh Reza Pradipta