Cloud, Docker & DevOps — hızlı ve güvenilir dağıtım
Tüm uygulamaları Docker ile konteynerleştiriyor, Docker Compose ile (kurumsal projelerde Kubernetes ile) orkestre ediyor, Caddy'yi otomatik SSL'li reverse proxy olarak yapılandırıyor ve dağıtım döngüsünün tamamını GitHub Actions ile otomatikleştiriyoruz — commit'ten üretime.
Docker ve Docker Compose ile konteynerleştirme
Her servisin kendi çok aşamalı (multi-stage) Dockerfile'ı vardır: bağımlılıkları kurup derleyen bir build aşaması ve yalnızca gerekli çıktıları içeren, minimal (distroless veya alpine) bir son aşama. Tipik bir Next.js imajı 150 MB'ın, bir FastAPI imajı 80 MB'ın altında çıkar. İmajlar main'e yapılan her merge'de yeniden derlenir ve anlamsal olarak etiketlenir (`v1.2.3` + `latest`).
Docker Compose tüm yığını tanımlar: frontend, API, DB, Redis, worker. Hassas değişkenler (DB parolası, API anahtarları, Stripe secret) git dışında tutulan `.env` içindedir — imaja asla gömülmez. Compose içindeki health check'ler, bağımlılıkların başlamadan önce hazır olmasını sağlar (DB hazır → API başlar → frontend başlar).
- `--mount=type=cache` ile build önbelleği — CI'da npm ci önbellekten
- Optimize edilmiş katman sıralaması: kararlı bağımlılıklar → kaynak kod
- Kurumsal projeler için Docker secrets veya HashiCorp Vault ile gizli bilgi yönetimi
- Atomik dağıtım için `restart: unless-stopped` + `docker compose up --no-deps`
Caddy — otomatik SSL'li modern reverse proxy
Caddy 2.8, SSL/TLS'yi ACME (Let's Encrypt veya ZeroSSL) üzerinden otomatik yönetir — süresi dolmuş sertifika yok, elle yapılandırma yok. HTTP/2 ve HTTP/3 (QUIC) varsayılan olarak etkindir. Güvenlik başlıkları (HSTS, X-Frame-Options, CSP), yeniden kullanılabilir snippet'lerle genel olarak ayarlanır. Bildirimsel Caddyfile yapılandırması git'te farkı görülebilir ve sürümlenmiştir.
Rate limiting, gzip/brotli sıkıştırma ve yapılandırılmış JSON loglama, Caddy'nin yerel direktifleriyle etkinleştirilir — nginx modülleri veya karmaşık Apache yapılandırması olmadan. Hassas rotalara (`/admin`, `.env`, `.git`) erişim, genel bir güvenlik snippet'i olarak yapılandırılmış 444 (yanıt yok) döndürür.
- İlk günden SSL Labs'ta A+ — modern şifre takımlarıyla yalnızca TLS 1.3
- Dinamik alt alan adlı çok kiracılı (multi-tenant) SaaS için on-demand TLS
- Kesintisiz reload — `caddy reload` etkin bağlantıları kesmez
- Caddy logları → Loki → Grafana — trafik analizi ve anomali uyarıları
GitHub Actions CI/CD ve izleme
CI pipeline'ı her PR'da çalışır: lint, tip kontrolü, birim testleri, Docker imajı build'i, güvenlik açığı taraması (Trivy). Hepsi geçerse imaj registry'ye gönderilir ve staging'e dağıtım otomatik yapılır. main'e merge = dağıtım sonrası healthcheck ile üretime otomatik dağıtım. Healthcheck 60 saniye içinde başarısız olursa otomatik geri alma yapılır.
Uygulama metrikleri (gecikme, hata oranı, kuyruk boyutu) için Grafana + Prometheus, log toplama için Loki ile izleme. Slack/e-posta üzerinde yapılandırılmış uyarılar: hata oranı >%1, P95 gecikmesi >500 ms, disk >%85. Better Uptime ile harici uptime izleme — herkese açık SLA paneli talep üzerine sunulur.
- İmajlarda Trivy güvenlik açığı taraması — Critical CVE'de engelleme
- Dependabot + patch güncellemeleri için otomatik merge (yeşil CI şartıyla)
- S3 uyumlu depolamaya otomatik DB yedeği (gecelik, 30 gün saklama)
Avantajlar ve sınırlamalar
Avantajlar
- Başarısız healthcheck'te otomatik geri alma ile dağıtım.
- Caddy ile otomatik SSL/TLS — elle yenilenen sertifikanın süresi dolmaz.
- Tekrarlanabilir ortam: dev, staging ve üretimde aynı Docker imajı.
- İzleme ve uyarılar (Grafana, Loki) — sorunlar kullanıcılardan önce görülür.
Sınırlamalar
- Docker Compose, çok düğümlü kurumsal yapılarda Kubernetes gibi ölçeklenmez.
- İlk CI/CD kurulumu zaman ve DevOps uzmanlığı gerektirir.
- İmajlar ve loglar disk alanı tüketir — düzenli temizlik gerekir.
- Tam izleme (Prometheus + Grafana) bakımı yapılacak ek servisler getirir.
Kısa değerlendirme
Docker + Caddy + GitHub Actions, bir VPS'te veya birkaç düğümde güvenilir dağıtım için ideal birleşimdir. Agresif otomatik ölçeklemeli onlarca düğüm için Kubernetes'e geçin.
Teknik özellikler tablosu
| Yetenek | Sınır / eşik | Tipik kullanım | |
|---|---|---|---|
| Orkestrasyon | Docker Compose, eksiksiz yığın | Tek düğüm; çok düğüm Swarm/K8s gerektirir | VPS, küçük-orta ölçekli projeler |
| Reverse proxy | Caddy 2.8, HTTP/3, otomatik SSL | Çok karmaşık kurallar kapsamlı yapılandırma ister | Çok alan adlı, çok kiracılı yapılar |
| CI/CD | GitHub Actions, otomatik dağıtım | Ücretsiz katmanın ötesinde CI dakikaları ücretlidir | Otomatik commit'ten üretime |
| Tipik maliyet | Aylık ~5 €'dan başlayan VPS | İzleme + yedekleme maliyet ekler | Tek siteden çok markaya |
Docker Compose ve Kubernetes
| Kriter | Docker Compose | Kubernetes |
|---|---|---|
| Kurulum karmaşıklığı | Düşük | Yüksek |
| Çok düğümlü ölçekleme / otomatik ölçekleme | Sınırlı (tek düğüm) | Mükemmel |
| Uygun olduğu yer | VPS, küçük-orta ölçekli projeler | Büyük filolar, kurumsal |
Sık sorulan sorular
Neden Nginx değil de Caddy?
Caddy, SSL/TLS'yi ACME üzerinden otomatik yönetir, HTTP/2 ve HTTP/3'ü varsayılan olarak etkinleştirir ve kısa, bildirimsel bir yapılandırmaya sahiptir. Nginx aynı sonuç için certbot ve daha fazla elle yapılandırma gerektirir.
Kubernetes'e ihtiyacım var mı?
Çoğu site için hayır. Bir VPS üzerindeki Docker Compose, bir siteyi veya birkaç servisi güvenilir biçimde yönetir. Kubernetes yalnızca agresif otomatik ölçeklemeli onlarca düğümde işe yarar hale gelir.
Kesintisiz dağıtım nasıl çalışır?
GitHub Actions yeni bir imaj üretir, eskisinin yanında başlatır, healthcheck çalıştırır ve ardından trafiği yönlendirir. Healthcheck 60 saniye içinde başarısız olursa önceki sürüme otomatik geri alma yapılır.
Hangi izleme çözümünü öneriyorsunuz?
Metrikler (gecikme, hata oranı) için Grafana + Prometheus, toplanmış loglar için Loki; uyarılar Slack/e-posta üzerinden. Harici uptime için Better Uptime gibi bağımsız bir servis ekliyoruz.