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)
-
Postgres versi mismatch: DO managed Postgres lebih baru patch dari Hetzner stock. Saya upgrade Hetzner ke same version sebelum restore.
-
DNS propagation: TTL DO 3600. Saya turunkan ke 60 1 jam sebelum cutover. Smooth transition.
-
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