Pilv, Docker ja DevOps — kiire ja töökindel juurutus
Konteineriseerime kõik rakendused Dockeriga, orkestreerime neid Docker Compose'iga (või Kubernetesega ettevõtteprojektide puhul), seadistame Caddy pöördvolmurina automaatse SSL-iga ning automatiseerime kogu juurutustsükli GitHub Actionsi kaudu — commit'ist tootmiseni.
Konteineriseerimine Dockeri ja Docker Compose'iga
Igal teenusel on oma mitmeastmeline Dockerfile: build-aste, mis paigaldab sõltuvused ja kompileerib, ning minimaalne lõppaste (distroless või alpine), mis sisaldab ainult vajalikke artefakte. Tüüpiline Next.js-i image jääb alla 150 MB, FastAPI oma alla 80 MB. Image'id ehitatakse uuesti iga main'i merge'i puhul ja märgistatakse semantiliselt (`v1.2.3` + `latest`).
Docker Compose defineerib kogu stäkki: esiots, API, andmebaas, Redis, worker. Tundlikud muutujad (andmebaasi parool, API-võtmed, Stripe'i saladus) on gitist välja jäetud failis `.env` — mitte kunagi image'i sisse kõvakodeeritud. Compose'i tervisekontrollid tagavad, et sõltuvused on enne käivitust valmis (andmebaas valmis → API käivitub → esiots käivitub).
- Build-vahemälu `--mount=type=cache` abil — npm ci taaskasutab vahemälu CI-s
- Optimeeritud kihtide järjekord: stabiilsed sõltuvused → lähtekood
- Saladuste haldus Docker secrets'i või HashiCorp Vaultiga ettevõtteprojektide jaoks
- `restart: unless-stopped` + `docker compose up --no-deps` aatomiliseks juurutuseks
Caddy — kaasaegne pöördvolmur automaatse SSL-iga
Caddy 2.8 haldab SSL/TLS-i automaatselt ACME kaudu (Let's Encrypt või ZeroSSL) — ühtegi aegunud sertifikaati, ühtegi käsitsi seadistust. HTTP/2 ja HTTP/3 (QUIC) on vaikimisi lubatud. Turvapäised (HSTS, X-Frame-Options, CSP) seatakse globaalselt taaskasutatavate snippet'ite kaudu. Deklaratiivne Caddyfile'i konfiguratsioon on võrreldav ja versioonihaldusega gitis.
Rate limiting, gzip/brotli-tihendus ja struktureeritud JSON-logimine aktiveeritakse Caddy natiivsete direktiividega — ilma nginxi moodulite või keeruka Apache'i seadistuseta. Juurdepääs tundlikele teedele (`/admin`, `.env`, `.git`) tagastab 444 (vastust pole), mis on seadistatud globaalse turvasnippet'ina.
- Ainult TLS 1.3 kaasaegsete šifrikomplektidega
- On-demand TLS mitme rentnikuga SaaS-i jaoks dünaamiliste alamdomeenidega
- Reload — `caddy reload` ei katkesta aktiivseid ühendusi
- Caddy logimine → Loki → Grafana — liikluse analüüs ja anomaaliate teavitused
GitHub Actionsi CI/CD ja monitooring
CI-torujuhe käivitub iga PR-i puhul: lint, tüübikontroll, ühiktestid, Dockeri image'i ehitus, haavatavuste skaneerimine (Trivy). Kui kõik läbivad, saadetakse image registrisse ja juurutus staging-keskkonda toimub automaatselt. Merge main'i = automaatne juurutus tootmisse koos juurutusjärgse tervisekontrolliga. Automaatne tagasipööramine, kui tervisekontroll ebaõnnestub 60 sekundi jooksul.
Monitooring Grafana + Prometheusega rakenduse mõõdikute jaoks (latentsus, veamäär, järjekorra suurus) ja Loki logide koondamiseks. Teavitused Slacki/e-posti kaudu: veamäär >1%, latentsus P95 >500 ms, ketas >85%. Väline käideldavuse monitooring Better Uptime'iga — avalik SLA-töölaud saadaval soovi korral.
- Trivy haavatavuste skaneerimine image'itel — blokeering Critical CVE puhul
- Dependabot + auto-merge patch-uuenduste jaoks (nõutav roheline CI)
- Automaatne andmebaasi varukoopia S3-ühilduvasse salvestusse (iga öö, säilitus 30 päeva)
Eelised ja piirangud
Eelised
- Juurutus automaatse tagasipööramisega ebaõnnestunud tervisekontrolli korral.
- Automaatne SSL/TLS Caddy kaudu — ühtegi käsitsi aegunud sertifikaati.
- Reprodutseeritav keskkond: sama Dockeri image arenduses, staging'us ja tootmises.
- Monitooring ja teavitused (Grafana, Loki) — probleemid nähakse enne kasutajaid.
Piirangud
- Docker Compose ei skaleeru nagu Kubernetes ettevõtte mitme sõlme jaoks.
- Esialgne CI/CD seadistus nõuab aega ja DevOps-ekspertiisi.
- Image'id ja logid võtavad kettaruumi — vajavad perioodilist puhastamist.
- Täielik monitooring (Prometheus + Grafana) lisab hooldatavaid teenuseid.
Lühike kokkuvõte
Docker + Caddy + GitHub Actions on ideaalne kombinatsioon töökindlaks juurutuseks VPS-il või paaril sõlmel. Kümnete sõlmede ja agressiivse automaatskaleerimise korral liigu Kubernetese peale.
Spetsifikatsioonide tabel
| Võimekus | Piir / lävi | Tüüpiline kasutus | |
|---|---|---|---|
| Orkestreerimine | Docker Compose, täielik stäkk | Üks sõlm; mitu sõlme vajab Swarmi/K8s-i | VPS, väikesed ja keskmised projektid |
| Pöördvolmur | Caddy 2.8, HTTP/3, automaatne SSL | Väga keerukad reeglid nõuavad laiemat konfiguratsiooni | Mitu domeeni, mitu rentnikku |
| CI/CD | GitHub Actions, juurutus | CI-minutid on üle tasuta taseme tasulised | Automaatne commit'ist tootmiseni |
| Tüüpiline hind | VPS alates ~5 €/kuu | Monitooring + varukoopia lisavad kulu | Ühest saidist mitme brändini |
Docker Compose vs Kubernetes
| Kriteerium | Docker Compose | Kubernetes |
|---|---|---|
| Seadistuse keerukus | Väike | Suur |
| Mitme sõlme skaleerimine / automaatskaleerimine | Piiratud (üks sõlm) | Suurepärane |
| Sobib | VPS, väikesed ja keskmised projektid | Suured klastrid, ettevõtted |
Korduma kippuvad küsimused
Miks Caddy, mitte Nginx?
Caddy haldab SSL/TLS-i automaatselt ACME kaudu, lubab HTTP/2 ja HTTP/3 vaikimisi ning tal on lühike deklaratiivne konfiguratsioon. Nginx nõuab sama tulemuse jaoks certbotti ja rohkem käsitsi seadistamist.
Kas ma vajan Kubernetest?
Enamiku saitide jaoks mitte. Docker Compose VPS-il haldab üht saiti või paari teenust töökindlalt. Kubernetes muutub kasulikuks alles kümnete sõlmede ja agressiivse automaatskaleerimise korral.
Kuidas juurutus töötab?
GitHub Actions ehitab uue image'i, käivitab selle vana kõrval, teeb tervisekontrolli ning seejärel lülitab liikluse ümber. Kui tervisekontroll ebaõnnestub 60 sekundi jooksul, tehakse automaatne tagasipööramine eelmisele versioonile.
Millist monitooringut te soovitate?
Grafana + Prometheus mõõdikute jaoks (latentsus, veamäär) ja Loki koondatud logide jaoks, teavitustega Slacki/e-posti kaudu. Välise käideldavuse jaoks lisame sõltumatu teenuse, näiteks Better Uptime'i.