Environment_Infrastructure/hetzner-sizing-report.md
Murat ÖZDEMİR b115a4cbdf Implement Hetzner sizing report recommendations and detailed DB setups
- Add `hetzner-sizing-report.md` defining data-driven server type recommendations for test and prod environments.
- Update Terraform configurations to align with the recommended `CPX` server types and refine firewall rules for Docker Swarm and database interactions.
- Introduce comprehensive documentation and stack files for:
    - Single-node PostgreSQL/MongoDB deployment on a test DB worker node.
    - High-availability 3-node MongoDB replica set and Patroni+etcd PostgreSQL cluster for production.
- Enhance Ansible bootstrap roles with SELinux disabling, fail2ban configuration, and StorageBox SSH key management for CI/CD.
- Reorganize and rename setup documentation files for improved structure and clarity.
2026-05-11 14:54:09 +03:00

14 KiB
Raw Blame History

iklim.co Hetzner Yeni Test ve Prod Sunucu Raporu

Tarih: 2026-05-11

Yönetici Özeti

Hetzner Cloud cost-optimized CX modellerinde "limited availability" problemi olduğu için yeni test ve prod kurulumlarında CPX regular performance modellerine geçilmesi önerilir.

Mevcut elle kurulmuş test ortamı verileri, test app sunucusunda RAM'in ana sınırlayıcı kaynak olduğunu gösteriyor. Test app node üzerinde 10 mikroservis ve altyapı servisleri birlikte çalıştığı için CPX32 yani 8 GB RAM risklidir. Bu nedenle yeni test app sunucusu için CPX42 önerilir.

Test DB sunucusunda disk ve network kullanımı düşük, disk doluluğu da çok düşüktür. Ancak CPU grafiğinde 8 vCPU seviyesine yaklaşan kısa süreli yükler görüldüğü için test DB için de CPX42 ile başlamak daha doğru ve daha az riskli seçenektir.

Prod ortamında app ve DB katmanları 3'er node olarak kurulacağı için tek node başına en yüksek kaynakla başlamak gerekli değildir. Başlangıç için app node'larda CPX42, DB node'larda CPX32 önerilir. Bu tercih, app tarafındaki Java mikroservis RAM baskısını azaltırken DB tarafında ekonomik bir cluster başlangıcı sağlar. Büyüme görüldüğünde DB node'lar CPX42 veya daha yüksek modellere rescale edilebilir.

Önerilen nihai başlangıç:

Ortam Rol Önerilen Tip Adet Aylık Toplam
Test App / Swarm / runner CPX42 1 $29.99
Test DB CPX42 1 $29.99
Prod App / Swarm CPX42 3 $89.97
Prod DB cluster CPX32 3 $49.47

Toplam başlangıç maliyeti:

Kapsam Aylık Maliyet
Test $59.98 / mo
Prod $139.44 / mo
Test + Prod $199.42 / mo

Kapsam ve Varsayımlar

Bu rapor şu veriler esas alınarak hazırlanmıştır:

  • Mevcut elle kurulmuş test app ve test DB sunucularının CPU, disk, network, RAM ve disk doluluk verileri.
  • Test app sunucusunda çalışan 10 mikroservis ve altyapı servisleri.
  • Test DB sunucusunda çalışan PostgreSQL/PostGIS ve MongoDB container'ları.
  • Hetzner tarafında cost-optimized CX modellerinin alınabilir olmaması.
  • Kullanıcı tarafından paylaşılan CPX ve CCX model kaynak/fiyat bilgileri.
  • Prod ortamında 3 app node ve 3 DB node olacak şekilde cluster topolojisi.

Fiyatlar kullanıcı tarafından paylaşılan Hetzner fiyat tablosuna göre hesaplanmıştır. Vergi, backup, snapshot, floating IP, volume ve trafik aşım maliyetleri dahil edilmemiştir.

Kullanılabilir Hetzner Modelleri

Regular Performance CPX Modelleri

Tip CPU RAM SSD Trafik Saatlik Aylık
CPX22 2 AMD 4 GB 80 GB 20 TB $0.015 / h $9.49 / mo
CPX32 4 AMD 8 GB 160 GB 20 TB $0.026 / h $16.49 / mo
CPX42 8 AMD 16 GB 320 GB 20 TB $0.048 / h $29.99 / mo
CPX52 12 AMD 24 GB 480 GB 20 TB $0.069 / h $42.99 / mo
CPX62 16 AMD 32 GB 640 GB 20 TB $0.095 / h $59.49 / mo

General Purpose CCX Modelleri

Tip CPU RAM SSD Trafik Saatlik Aylık
CCX13 2 AMD 8 GB 80 GB 20 TB $0.030 / h $18.49 / mo
CCX23 4 AMD 16 GB 160 GB 20 TB $0.059 / h $36.99 / mo
CCX33 8 AMD 32 GB 240 GB 30 TB $0.119 / h $73.99 / mo

CPX ve CCX Seçim Notu

CCX modelleri dedicated CPU davranışı nedeniyle CPU tutarlılığı gereken senaryolarda avantajlıdır. Ancak bu proje için başlangıç aşamasında belirleyici risk app tarafında RAM, DB tarafında ise ekonomik cluster başlangıcıdır. Bu nedenle ilk tercih CPX modelleridir.

DB tarafında CCX33 32 GB RAM sunsa da 8 vCPU ve 240 GB disk ile CPX42 veya CPX62 kadar dengeli değildir. Başlangıçta dedicated CPU gereksinimi net olmadığı için prod DB'de CCX ile başlamak önerilmez.

Mevcut Test Ortamı Bulguları

Test App Sunucusu

Mevcut test app sunucusu üzerinde 10 mikroservis ve altyapı servisleri aynı node üzerinde çalışmaktadır. Çalışan servisler:

Grup Servisler
Mikroservisler auth, account, lightning, thunderstorm, precipitation, nowcast-point-alarm, nowcast-geo-alarm, forecast, forecast-point-alarm, enroute
Altyapı servisleri RabbitMQ, Redis, Vault, Prometheus, Grafana, APISIX, APISIX Dashboard, etcd

Kaynak özeti:

Metrik Mevcut Değer Yorum
RAM toplam 14 GiB Yaklaşık 16 GB sınıfı sunucu
RAM used 10 GiB App node için yüksek ve belirleyici
RAM available 4.0 GiB Kalan alan sınırlı
Swap 0 B OOM riskini artırır
Root disk 226 GB Yaklaşık 240 GB sınıfı disk
Disk used 81 GB %38 kullanım
Disk available 136 GB Test için yeterli boşluk
CPU Düşük baz, kısa spike CPU kritik sınır değil
Disk I/O Düşük IOPS/throughput sınırlayıcı değil
Network Düşük Trafik sınırlayıcı değil
!test-app-graphs.png
Değerlendirme:
  • App sunucusunda ana risk RAM'dir.
  • CPX32 8 GB RAM sunduğu için mevcut 10 GiB used seviyesini karşılamaz.
  • JVM/container memory limitleri uygulanmadan CPX32 OOM veya yoğun GC riski taşır.
  • Disk kullanımı 81 GB olduğu için 160 GB disk teorik olarak yeterli görünse de Docker image/layer birikimi, loglar ve deploy sırasındaki geçici alan ihtiyacı nedeniyle 320 GB daha güvenlidir.

Sonuç: yeni test app sunucusu için CPX42 önerilir.

Test DB Sunucusu

Mevcut test DB sunucusunda PostgreSQL/PostGIS ve MongoDB çalışmaktadır.

Kaynak özeti:

Metrik Mevcut Değer Yorum
RAM toplam 14 GiB Yaklaşık 16 GB sınıfı sunucu
RAM used 7.6 GiB Linux cache nedeniyle tek başına riskli değil
RAM available 7.4 GiB RAM açısından rahat
Swap 0 B Ani bellek baskısında risk
Root disk 226 GB Yaklaşık 240 GB sınıfı disk
Disk used 16 GB %8 kullanım, çok düşük
Disk available 201 GB Fazlasıyla yeterli
CPU Kısa süreli yüksek spike DB için asıl izlenmesi gereken metrik
Disk I/O Düşük Disk throughput/IOPS sınırlayıcı görünmüyor
Network Düşük Trafik sınırlayıcı değil
!test-db-graphs.png
Değerlendirme:
  • RAM ve disk açısından CPX32 yeterli görünebilir.
  • Ancak CPU grafiğinde 8 vCPU seviyesine yaklaşan kısa süreli yükler var.
  • Bu yükler PostGIS query, Mongo indexleme, import veya batch işlemlerinden kaynaklanıyorsa CPX32'ye düşmek testte yavaşlamaya neden olabilir.
  • Test DB tek node olduğu için prod DB cluster'ına göre daha az toleranslıdır.

Sonuç: yeni test DB sunucusu için de CPX42 önerilir.

Yeni Test Ortamı Gereksinimleri

Yeni test ortamında iki node hedeflenir:

Sunucu Rol Önerilen Tip CPU RAM SSD Trafik Aylık
iklim-app-01 Swarm manager, app, runner, altyapı servisleri CPX42 8 AMD 16 GB 320 GB 20 TB $29.99
iklim-db-01 PostgreSQL/PostGIS, MongoDB CPX42 8 AMD 16 GB 320 GB 20 TB $29.99
Toplam 2 sunucu 16 vCPU 32 GB 640 GB 40 TB $59.98

Test İçin Reddedilen Daha Ekonomik Alternatif

Sunucu Alternatif Tip Neden Reddedildi
iklim-app-01 CPX32 Mevcut app node 10 GiB used RAM seviyesinde; 8 GB RAM riskli
iklim-db-01 CPX32 RAM/disk yeterli olabilir, ancak CPU spike'ları nedeniyle tek node DB'de riskli

Test Ortamı Operasyon Notları

  • App node'da mikroservisler için JVM/container memory limitleri tanımlanmalıdır.
  • Swap varsayılan olarak yoksa düşük öncelikli acil durum swap'i değerlendirilebilir; bu performans çözümünden çok OOM etkisini yumuşatma aracıdır.
  • Docker image prune/log rotation politikası uygulanmalıdır.
  • Prometheus retention test ortamında sınırlandırılmalıdır.
  • DB ve app aynı node'a alınmamalıdır; mevcut veri ayrı DB node ihtiyacını desteklemektedir.

Prod Ortamı Önerisi

Prod ortamında 3 app node ve 3 DB node olacak şekilde cluster topolojisi hedeflenir. Bu nedenle testteki tek node baskısı prod'da daha kontrollü dağıtılabilir.

Önerilen Prod Başlangıç

Sunucu Rol Önerilen Tip CPU RAM SSD Trafik Aylık
iklim-app-01 Swarm app node CPX42 8 AMD 16 GB 320 GB 20 TB $29.99
iklim-app-02 Swarm app node CPX42 8 AMD 16 GB 320 GB 20 TB $29.99
iklim-app-03 Swarm app node CPX42 8 AMD 16 GB 320 GB 20 TB $29.99
iklim-db-01 DB cluster node CPX32 4 AMD 8 GB 160 GB 20 TB $16.49
iklim-db-02 DB cluster node CPX32 4 AMD 8 GB 160 GB 20 TB $16.49
iklim-db-03 DB cluster node CPX32 4 AMD 8 GB 160 GB 20 TB $16.49
Toplam 6 sunucu 36 vCPU 72 GB 1,440 GB 120 TB $139.44

Prod Gerekçesi

App katmanı:

  • Test app verisi 16 GB sınıfı node'da 10 GiB used RAM göstermektedir.
  • Prod'da trafik ve deploy frekansı artacağı için app node'larda CPX32 yerine CPX42 ile başlamak daha güvenlidir.
  • 3 node sayesinde servisler dağıtılabilir; ancak Java mikroservislerin bellek karakteristiği nedeniyle node başına 16 GB RAM daha doğru başlangıçtır.

DB katmanı:

  • Prod DB 3 node cluster olacağı için test DB'deki tek node riskinin aynısı birebir geçerli değildir.
  • Başlangıç veri hacmi ve trafik düşük/orta ise CPX32 ekonomik ve savunulabilir başlangıçtır.
  • Büyüme görüldüğünde DB node'lar sırasıyla CPX42, CPX52 veya CPX62 modellerine rescale edilebilir.
  • Lokal NVMe disk DB ana veri dizini için varsayılan tercih olarak korunmalıdır.

Prod Büyüme Yolu

Tetikleyici İlk Aksiyon İkinci Aksiyon
App RAM baskısı Servis memory limitlerini düzenle App node'ları CPX52 veya yeni app node'a genişlet
App CPU baskısı Replica dağılımını düzenle App node ekle veya CPX52'ye rescale et
DB CPU baskısı Query/index analizi yap DB node'ları CPX42 veya CPX52'ye rescale et
DB RAM baskısı Cache/config optimizasyonu yap DB node'ları CPX42 veya CPX52'ye rescale et
DB disk kapasitesi Retention/cleanup uygula Önce rescale, sonra ölçümlü ek volume
Disk IOPS baskısı Query ve storage analizi yap Lokal NVMe üzerinde daha büyük modele geç

Ek Volume Değerlendirmesi

DB ana veri dizinini başlangıçta Hetzner Volume üzerine taşımak önerilmez. Başlangıç için lokal NVMe disk daha güvenli varsayımdır.

Ek volume şu işler için daha uygundur:

  • Backup dump dosyaları.
  • Arşiv verisi.
  • Düşük IOPS isteyen cold data.
  • Geçici export/import alanları.
  • Uygulama tarafında object-like dosya depolama ihtiyaçları.

DB ana data dizini için ek volume ancak aşağıdaki koşullarda değerlendirilmelidir:

  • Volume performansı hedef DB workload'u ile ölçülmüş olmalı.
  • IOPS, latency ve throughput metrikleri lokal disk ile karşılaştırılmalı.
  • Backup/restore ve failover senaryoları netleştirilmeli.
  • DB engine tarafında tablespace/partition yaklaşımı bilinçli tasarlanmalı.

Kapasite yetmezliği durumunda ilk tercih genellikle ek volume değil, sunucuyu daha büyük CPX modele rescale etmek olmalıdır.

Terraform Hedef Değerleri

Terraform'da Hetzner server type değerleri küçük harfle kullanılmalıdır.

Test

Terraform Değişkeni Hedef Değer Gerekçe
server_type_swarm cpx42 Test app node için 16 GB RAM gerekli
server_type_db cpx42 Tek node DB'de CPU spike riskini azaltır

Prod

Terraform Değişkeni Hedef Değer Gerekçe
server_type_swarm cpx42 Java mikroservis yoğun app node'ları için dengeli başlangıç
server_type_db cpx32 3 node DB cluster için ekonomik başlangıç

Maliyet Özeti

Test Maliyeti

Kalem Tip Adet Birim Aylık Aylık Toplam
App CPX42 1 $29.99 $29.99
DB CPX42 1 $29.99 $29.99
Toplam 2 $59.98

Prod Maliyeti

Kalem Tip Adet Birim Aylık Aylık Toplam
App CPX42 3 $29.99 $89.97
DB CPX32 3 $16.49 $49.47
Toplam 6 $139.44

Genel Toplam

Ortam Sunucu Adedi Aylık Toplam
Test 2 $59.98
Prod 6 $139.44
Genel Toplam 8 $199.42

Sonuç

Yeni test ortamında CPX42 + CPX42 seçimi mevcut test verileriyle uyumludur. App node için CPX32 RAM nedeniyle risklidir; DB node için CPX32 ise tek node CPU spike'ları nedeniyle gereksiz risk taşır.

Prod ortamında 3 x CPX42 app ve 3 x CPX32 DB ekonomik ama teknik olarak savunulabilir bir başlangıçtır. Bu seçim, app katmanındaki bellek baskısını azaltır ve DB katmanında cluster yapısının sağladığı yatay kapasiteyi kullanır. Büyüme görüldüğünde önce metriklerle doğrulama yapılmalı, ardından rescale veya node ekleme tercih edilmelidir.