Cloud, Docker a DevOps — rýchle a spoľahlivé nasadenie
Všetky aplikácie kontajnerizujeme v Dockeri, orchestrujeme ich cez Docker Compose (alebo Kubernetes pri enterprise projektoch), Caddy nastavujeme ako reverzný proxy s automatickým SSL a celý cyklus nasadenia automatizujeme cez GitHub Actions — od commitu po produkciu.
Kontajnerizácia s Dockerom a Docker Compose
Každá služba má vlastný viacstupňový Dockerfile: build stage, ktorý inštaluje závislosti a kompiluje, a minimálny finálny stage (distroless alebo alpine), ktorý obsahuje iba potrebné artefakty. Typický image Next.js vychádza pod 150 MB, FastAPI pod 80 MB. Images sa znovu zostavujú pri každom merge do main a označujú sa sémanticky (`v1.2.3` + `latest`).
Docker Compose definuje celý stack: frontend, API, DB, Redis, worker. Citlivé premenné (heslo DB, API kľúče, Stripe secret) sú v `.env` vylúčenom z gitu — nikdy nie sú napevno v image. Health checks v Compose zabezpečujú, že závislosti sú pripravené pred štartom (DB pripravená → štart API → štart frontendu).
- Build cache s `--mount=type=cache` — zrýchľuje npm ci v CI
- Optimalizované poradie vrstiev: stabilné závislosti → zdrojový kód
- Správa tajomstiev cez Docker secrets alebo HashiCorp Vault pri enterprise projektoch
- `restart: unless-stopped` + `docker compose up --no-deps` pre atómové nasadenie
Caddy — moderný reverzný proxy s automatickým SSL
Caddy 2.8 spravuje SSL/TLS automaticky cez ACME (Let's Encrypt alebo ZeroSSL) — žiadny expirovaný certifikát, žiadna manuálna konfigurácia. HTTP/2 a HTTP/3 (QUIC) sú predvolene zapnuté. Bezpečnostné hlavičky (HSTS, X-Frame-Options, CSP) sú nastavené globálne cez opakovane použiteľné snippety. Deklaratívna konfigurácia Caddyfile sa dá porovnávať (diff) a je verzovaná v gite.
Rate limiting, kompresia gzip/brotli a štruktúrované JSON logovanie sa aktivujú natívnymi direktívami Caddy — bez modulov nginx alebo zložitej konfigurácie Apache. Prístup k citlivým cestám (`/admin`, `.env`, `.git`) vracia 444 (bez odpovede), nakonfigurované ako globálny bezpečnostný snippet.
- A+ na SSL Labs od prvého dňa — iba TLS 1.3 s modernými cipher suites
- On-demand TLS pre multi-tenant SaaS s dynamickými subdoménami
- Reload konfigurácie — `caddy reload` neprerušuje aktívne spojenia
- Logovanie Caddy → Loki → Grafana — analýza prevádzky a upozornenia na anomálie
CI/CD cez GitHub Actions a monitoring
Pipeline CI beží pri každom PR: lint, type check, unit testy, build image Docker, sken zraniteľností (Trivy). Ak všetko prejde, image sa pushne do registry a nasadenie na staging prebehne automaticky. Merge do main = automatické nasadenie do produkcie s healthcheckom po nasadení. Automatický rollback, ak healthcheck zlyhá do 60 sekúnd.
Monitoring s Grafana + Prometheus pre aplikačné metriky (latencia, error rate, veľkosť frontu) a Loki na agregáciu logov. Upozornenia nastavené na Slack/e-mail: error rate >1 %, latencia P95 >500 ms, disk >85 %. Externý uptime monitoring cez Better Uptime — verejný SLA dashboard je dostupný na požiadanie.
- Sken zraniteľností Trivy na images — blokovanie pri Critical CVE
- Dependabot + auto-merge pre patch aktualizácie (vyžaduje sa zelené CI)
- Automatická záloha DB do úložiska kompatibilného s S3 (každú noc, retencia 30 dní)
Výhody a obmedzenia
Výhody
- Nasadenie s automatickým rollbackom pri zlyhaní healthchecku.
- Automatické SSL/TLS cez Caddy — žiadny manuálne expirovaný certifikát.
- Reprodukovateľné prostredie: ten istý image Docker vo vývoji, na stagingu aj v produkcii.
- Monitoring a upozornenia (Grafana, Loki) — problémy vidieť skôr než používatelia.
Obmedzenia
- Docker Compose sa neškáluje ako Kubernetes pri enterprise multi-node nasadení.
- Počiatočné nastavenie CI/CD vyžaduje čas a odbornosť v DevOps.
- Images a logy zaberajú miesto na disku — vyžadujú pravidelné čistenie.
- Kompletný monitoring (Prometheus + Grafana) pridáva služby, ktoré treba udržiavať.
Stručné zhrnutie
Docker + Caddy + GitHub Actions je ideálna kombinácia pre spoľahlivé nasadenie na VPS alebo niekoľko uzlov. Pri desiatkach uzlov s agresívnym auto-scalingom prejdite na Kubernetes.
Tabuľka špecifikácií
| Schopnosť | Limit / prah | Typické použitie | |
|---|---|---|---|
| Orchestrácia | Docker Compose, kompletný stack | Jeden uzol; multi-node vyžaduje Swarm/K8s | VPS, malé a stredné projekty |
| Reverzný proxy | Caddy 2.8, HTTP/3, automatické SSL | Veľmi zložité pravidlá vyžadujú rozsiahlu konfiguráciu | Viac domén, multi-tenant |
| CI/CD | GitHub Actions, automatické nasadenie od commitu | Minúty CI sa nad rámec free tier spoplatňujú | Automaticky od commitu po produkciu |
| Typické náklady | VPS od ~5 €/mesiac | Monitoring + zálohovanie zvyšujú náklady | Od jedného webu po multi-brand |
Docker Compose vs Kubernetes
| Kritérium | Docker Compose | Kubernetes |
|---|---|---|
| Zložitosť nastavenia | Nízka | Vysoká |
| Multi-node škálovanie / auto-scaling | Obmedzené (jeden uzol) | Výborné |
| Vhodné pre | VPS, malé a stredné projekty | Veľké flotily, enterprise |
Často kladené otázky
Prečo Caddy a nie Nginx?
Caddy spravuje SSL/TLS automaticky cez ACME, predvolene zapína HTTP/2 a HTTP/3 a má krátku deklaratívnu konfiguráciu. Nginx vyžaduje certbot a viac manuálneho nastavovania na rovnaký výsledok.
Potrebujem Kubernetes?
Pre väčšinu webov nie. Docker Compose na VPS spoľahlivo zvláda jeden web alebo niekoľko služieb. Kubernetes sa stáva užitočným až pri desiatkach uzlov s agresívnym auto-scalingom.
Ako prebieha nasadenie novej verzie?
GitHub Actions zostaví nový image, spustí ho popri starom, vykoná healthcheck a potom prepne prevádzku. Ak healthcheck zlyhá do 60 sekúnd, automaticky sa vykoná rollback na predchádzajúcu verziu.
Aký monitoring odporúčate?
Grafana + Prometheus pre metriky (latencia, error rate) a Loki pre agregované logy, s upozorneniami na Slack/e-mail. Pre externý uptime pridávame nezávislú službu, napríklad Better Uptime.