- 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.
14 KiB
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
CXmodellerinin alınabilir olmaması. - Kullanıcı tarafından paylaşılan
CPXveCCXmodel 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:
- App sunucusunda ana risk RAM'dir.
CPX328 GB RAM sunduğu için mevcut 10 GiB used seviyesini karşılamaz.- JVM/container memory limitleri uygulanmadan
CPX32OOM 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:
- RAM ve disk açısından
CPX32yeterli 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
CPX32yerineCPX42ile 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
CPX32ekonomik ve savunulabilir başlangıçtır. - Büyüme görüldüğünde DB node'lar sırasıyla
CPX42,CPX52veyaCPX62modellerine 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.

