Cloud, Docker & DevOps — sürətli və etibarlı yerləşdirmə
Bütün tətbiqləri Docker ilə konteynerləşdiririk, Docker Compose ilə (enterprise layihələr üçün Kubernetes ilə) idarə edirik, Caddy-ni avtomatik SSL ilə reverse proxy kimi konfiqurasiya edirik və bütün deploy dövrünü GitHub Actions vasitəsilə avtomatlaşdırırıq — commit-dən istehsalata.
Docker və Docker Compose ilə konteynerləşdirmə
Hər servisin öz multi-stage Dockerfile-ı var: asılılıqları quraşdıran və kompilyasiya edən build mərhələsi və yalnız lazımi artefaktları ehtiva edən minimal yekun mərhələ (distroless və ya alpine). Tipik Next.js imici 150MB-dan, FastAPI imici isə 80MB-dan kiçik olur. İmiclər main-ə hər merge-dən sonra yenidən qurulur və semantik şəkildə etiketlənir (`v1.2.3` + `latest`).
Docker Compose bütün steki müəyyən edir: frontend, API, DB, Redis, worker. Həssas dəyişənlər (DB parolu, API açarları, Stripe secret) git-dən kənarda saxlanılan `.env`-dədir — heç vaxt imicin içinə yazılmır. Compose-dakı health check-lər asılılıqların başlanğıcdan əvvəl hazır olmasını təmin edir (DB hazırdır → API başlayır → frontend başlayır).
- `--mount=type=cache` ilə build keşi — CI-də npm ci 30 saniyədən az
- Optimallaşdırılmış layer sıralaması: sabit asılılıqlar → mənbə kodu
- Enterprise layihələr üçün Docker secrets və ya HashiCorp Vault ilə secret idarəsi
- Atomik deploy üçün `restart: unless-stopped` + `docker compose up --no-deps`
Caddy — avtomatik SSL ilə müasir reverse proxy
Caddy 2.8 SSL/TLS-i ACME (Let's Encrypt və ya ZeroSSL) vasitəsilə avtomatik idarə edir — müddəti bitmiş sertifikat və əl ilə konfiqurasiya yoxdur. HTTP/2 və HTTP/3 (QUIC) defolt olaraq aktivdir. Təhlükəsizlik başlıqları (HSTS, X-Frame-Options, CSP) təkrar istifadə olunan snippet-lər vasitəsilə qlobal təyin olunur. Deklarativ Caddyfile konfiqurasiyası fərqləndirilə bilir və git-də versiyalaşdırılır.
Rate limiting, gzip/brotli sıxılması və strukturlaşdırılmış JSON loglama nginx modulları və ya mürəkkəb Apache konfiqurasiyası olmadan nativ Caddy direktivləri ilə aktivləşdirilir. Həssas marşrutlara (`/admin`, `.env`, `.git`) giriş qlobal təhlükəsizlik snippet-i kimi konfiqurasiya olunmuş 444 (cavabsız) qaytarır.
- Yalnız müasir cipher suite-lərlə TLS 1.3
- Dinamik subdomenləri olan multi-tenant SaaS üçün on-demand TLS
- Fasiləsiz reload — `caddy reload` aktiv bağlantıları kəsmir
- Caddy loglaması → Loki → Grafana — trafik təhlili və anomaliya xəbərdarlıqları
GitHub Actions CI/CD və monitorinq
CI pipeline-ı hər PR-da işləyir: lint, tip yoxlaması, unit testlər, Docker imic build-i, zəiflik skanı (Trivy). Hamısı keçərsə, imic registry-yə göndərilir və staging-ə yerləşdirmə avtomatik baş verir. main-ə merge = deploy-dan sonrakı healthcheck ilə avtomatik istehsalata yerləşdirmə. Healthcheck 60 saniyə ərzində uğursuz olarsa, avtomatik rollback.
Tətbiq metrikləri (gecikmə, xəta nisbəti, növbə ölçüsü) üçün Grafana + Prometheus və log aqreqasiyası üçün Loki ilə monitorinq. Xəbərdarlıqlar Slack/e-poçt üzərində konfiqurasiya olunub: xəta nisbəti >1%, P95 gecikmə >500ms, disk >85%. Better Uptime ilə xarici uptime monitorinqi — ictimai SLA paneli sorğu əsasında mövcuddur.
- İmiclərdə Trivy zəiflik skanı — Critical CVE olduqda bloklanır
- Patch yeniləmələri üçün Dependabot + auto-merge (yaşıl CI tələb olunur)
- S3-uyğun yaddaşa avtomatik DB ehtiyat nüsxəsi (gecə, 30 günlük saxlama)
Üstünlüklər və məhdudiyyətlər
Üstünlüklər
- Uğursuz healthcheck zamanı avtomatik rollback ilə deploy.
- Caddy ilə avtomatik SSL/TLS — əl ilə müddəti bitən sertifikat yoxdur.
- Təkrarlana bilən mühit: dev, staging, istehsalatda eyni Docker imici.
- Monitorinq və xəbərdarlıqlar (Grafana, Loki) — problemlər istifadəçilərdən əvvəl görünür.
Məhdudiyyətlər
- Docker Compose enterprise multi-node üçün Kubernetes qədər miqyaslanmır.
- İlkin CI/CD qurulumu vaxt və DevOps təcrübəsi tələb edir.
- İmiclər və loglar disk sahəsi istifadə edir — dövri təmizlik lazımdır.
- Tam monitorinq (Prometheus + Grafana) baxım tələb edən əlavə servislər gətirir.
Qısa nəticə
Docker + Caddy + GitHub Actions VPS və ya bir neçə node üzərində etibarlı deploy üçün ideal kombinasiyadır. Aqressiv auto-scaling ilə onlarla node üçün Kubernetes-ə keçin.
Spesifikasiyalar cədvəli
| Imkan | Limit / hədd | Tipik istifadə | |
|---|---|---|---|
| Orkestrasiya | Docker Compose, tam stek | Tək node; multi-node Swarm/K8s tələb edir | VPS, kiçik və orta layihələr |
| Reverse proxy | Caddy 2.8, HTTP/3, avtomatik SSL | Çox mürəkkəb qaydalar genişləndirilmiş konfiqurasiya tələb edir | Çoxdomenli, multi-tenant |
| CI/CD | GitHub Actions, deploy < 5 dəq | CI dəqiqələri pulsuz limitdən sonra hesablanır | Commit-dən istehsalata avtomatik |
| Tipik xərc | VPS ayda ~€5-dən | Monitorinq + ehtiyat nüsxə xərc əlavə edir | Tək saytdan çoxbrendli layihəyə qədər |
Docker Compose və Kubernetes
| Meyar | Docker Compose | Kubernetes |
|---|---|---|
| Qurulum mürəkkəbliyi | Aşağı | Yüksək |
| Multi-node / auto-scaling | Məhdud (bir node) | Əla |
| Ən uyğun olduğu hal | VPS, kiçik və orta layihələr | Böyük parklar, enterprise |
Tez-tez verilən suallar
Niyə Nginx deyil, Caddy?
Caddy SSL/TLS-i ACME vasitəsilə avtomatik idarə edir, HTTP/2 və HTTP/3-ü defolt aktivləşdirir və qısa deklarativ konfiqurasiyaya malikdir. Eyni nəticə üçün Nginx certbot və daha çox əl ilə konfiqurasiya tələb edir.
Mənə Kubernetes lazımdır?
Əksər saytlar üçün xeyr. VPS üzərində Docker Compose bir sayt və ya bir neçə servisi etibarlı şəkildə idarə edir. Kubernetes yalnız aqressiv auto-scaling ilə onlarla node olduqda faydalı olur.
Deploy necə işləyir?
GitHub Actions yeni imic qurur, onu köhnənin yanında başladır, healthcheck aparır, sonra trafiki keçirir. Healthcheck 60 saniyə ərzində uğursuz olarsa, avtomatik olaraq əvvəlki versiyaya qayıdır.
Hansı monitorinqi tövsiyə edirsiniz?
Metrikalar (gecikmə, xəta nisbəti) üçün Grafana + Prometheus və aqreqasiya olunmuş loglar üçün Loki, Slack/e-poçt xəbərdarlıqları ilə. Xarici uptime üçün Better Uptime kimi müstəqil servis əlavə edirik.