Cloud, Docker a DevOps — rychlé a spolehlivé nasazení
Všechny aplikace kontejnerizujeme v Dockeru, orchestrujeme je pomocí Docker Compose (nebo Kubernetes u enterprise projektů), nastavujeme Caddy jako reverzní proxy s automatickým SSL a celý cyklus nasazení automatizujeme přes GitHub Actions — od commitu po produkci.
Kontejnerizace s Dockerem a Docker Compose
Každá služba má vlastní vícestupňový Dockerfile: build stage, který nainstaluje závislosti a zkompiluje, a minimální závěrečný stage (distroless nebo alpine), který obsahuje jen nezbytné artefakty. Typický image Next.js má pod 150 MB, image FastAPI pod 80 MB. Image se přebuildovávají při každém merge do main a značkují se sémanticky (`v1.2.3` + `latest`).
Docker Compose definuje celý stack: frontend, API, DB, Redis, worker. Citlivé proměnné (heslo k DB, API klíče, tajný klíč Stripe) jsou v souboru `.env` vyloučeném z gitu — nikdy nejsou napevno v image. Health checky v Compose zajišťují, že jsou závislosti připravené před startem (DB připravena → start API → start frontendu).
- Build cache s `--mount=type=cache` — npm ci z cache v CI
- Optimalizované pořadí vrstev: stabilní závislosti → zdrojový kód
- Správa tajemství pomocí Docker secrets nebo HashiCorp Vault u enterprise projektů
- `restart: unless-stopped` + `docker compose up --no-deps` pro atomické nasazení
Caddy — moderní reverzní proxy s automatickým SSL
Caddy 2.8 spravuje SSL/TLS automaticky přes ACME (Let's Encrypt nebo ZeroSSL) — žádný prošlý certifikát, žádná ruční konfigurace. HTTP/2 a HTTP/3 (QUIC) jsou zapnuté ve výchozím stavu. Bezpečnostní hlavičky (HSTS, X-Frame-Options, CSP) se nastavují globálně pomocí znovupoužitelných snippetů. Deklarativní konfigurace Caddyfile se dá porovnávat diffem a verzovat v gitu.
Rate limiting, komprese gzip/brotli a strukturované logování v JSON se zapínají nativními direktivami Caddy — bez modulů nginx či složité konfigurace Apache. Přístup na citlivé cesty (`/admin`, `.env`, `.git`) vrací 444 (bez odpovědi), nastavené jako globální bezpečnostní snippet.
- Pouze TLS 1.3 s moderními cipher suites
- On-demand TLS pro multi-tenant SaaS s dynamickými subdoménami
- Reload bez výpadku — `caddy reload` nepřeruší aktivní spojení
- Logování Caddy → Loki → Grafana — analýza provozu a upozornění na anomálie
CI/CD v GitHub Actions a monitoring
Pipeline CI běží u každého PR: lint, kontrola typů, unit testy, build Docker image, sken zranitelností (Trivy). Pokud vše projde, image se pushne do registry a nasazení na staging proběhne automaticky. Merge do main = automatické nasazení do produkce s healthcheckem po nasazení. Pokud healthcheck do 60 sekund selže, proběhne automatický rollback.
Monitoring s Grafanou + Prometheus pro aplikační metriky (latence, míra chyb, velikost fronty) a Loki pro agregaci logů. Upozornění jsou nastavena na Slack/e-mail: míra chyb nad 1 %, latence P95 nad 500 ms, disk nad 85 %. Externí monitoring dostupnosti s Better Uptime — veřejný SLA dashboard na vyžádání.
- Sken zranitelností Trivy na image — blokace při Critical CVE
- Dependabot + auto-merge pro patch aktualizace (vyžaduje zelené CI)
- Automatická záloha DB do úložiště kompatibilního se S3 (každou noc, retence 30 dní)
Výhody a omezení
Výhody
- Nasazení s automatickým rollbackem při selhání healthchecku.
- Automatické SSL/TLS přes Caddy — žádný ručně prošlý certifikát.
- Reprodukovatelné prostředí: stejný image Dockeru na dev, stagingu i v produkci.
- Monitoring a upozornění (Grafana, Loki) — problémy uvidíte dřív než uživatelé.
Omezení
- Docker Compose neškáluje jako Kubernetes u enterprise nasazení na více uzlech.
- Počáteční nastavení CI/CD vyžaduje čas a DevOps expertizu.
- Image a logy zabírají místo na disku — nutné pravidelné čištění.
- Kompletní monitoring (Prometheus + Grafana) přidává služby, které je třeba udržovat.
Stručný verdikt
Docker + Caddy + GitHub Actions je ideální kombinace pro spolehlivé nasazení na VPS nebo několika uzlech. Pro desítky uzlů s agresivním auto-scalingem přejděte na Kubernetes.
Tabulka specifikací
| Schopnost | Limit / práh | Typické použití | |
|---|---|---|---|
| Orchestrace | Docker Compose, kompletní stack | Jeden uzel; více uzlů vyžaduje Swarm/K8s | VPS, malé a střední projekty |
| Reverzní proxy | Caddy 2.8, HTTP/3, automatické SSL | Velmi složitá pravidla vyžadují rozsáhlou konfiguraci | Více domén, multi-tenant |
| CI/CD | GitHub Actions, nasazení < 5 min | Minuty CI se nad rámec free tieru účtují | Automaticky od commitu do produkce |
| Typické náklady | VPS od ~5 €/měsíc | Monitoring + zálohy náklady zvyšují | Od jednoho webu po multi-brand |
Docker Compose vs. Kubernetes
| Kritérium | Docker Compose | Kubernetes |
|---|---|---|
| Složitost nastavení | Nízká | Vysoká |
| Škálování na více uzlů / auto-scaling | Omezené (jeden uzel) | Výborné |
| Vhodné pro | VPS, malé a střední projekty | Velké flotily, enterprise |
Často kladené otázky
Proč Caddy a ne Nginx?
Caddy spravuje SSL/TLS automaticky přes ACME, ve výchozím stavu zapíná HTTP/2 a HTTP/3 a má krátkou deklarativní konfiguraci. Nginx pro stejný výsledek vyžaduje certbot a více ruční konfigurace.
Potřebuji Kubernetes?
Pro většinu webů ne. Docker Compose na VPS spolehlivě zvládne jeden web nebo několik služeb. Kubernetes se vyplatí až u desítek uzlů s agresivním auto-scalingem.
Jak funguje nasazení?
GitHub Actions sestaví nový image, spustí ho vedle starého, provede healthcheck a poté přepne provoz. Pokud healthcheck do 60 sekund selže, automaticky se provede rollback na předchozí verzi.
Jaký monitoring doporučujete?
Grafana + Prometheus pro metriky (latence, míra chyb) a Loki pro agregované logy, s upozorněními na Slack/e-mail. Pro externí monitoring dostupnosti přidáváme nezávislou službu, například Better Uptime.