Cloud, Docker i DevOps — brz i pouzdan deploy
Sve aplikacije kontejneriziramo Dockerom, orkestriramo ih Docker Composeom (ili Kubernetesom za enterprise projekte), Caddy postavljamo kao reverse proxy s automatskim SSL-om, a cijeli ciklus deploya automatiziramo putem GitHub Actionsa — od commita do produkcije.
Kontejnerizacija s Dockerom i Docker Composeom
Svaki servis ima vlastiti višefazni Dockerfile: build faza koja instalira ovisnosti i kompajlira te minimalna završna faza (distroless ili alpine) koja sadrži samo potrebne artefakte. Tipična Next.js slika ispada ispod 150 MB, a FastAPI ispod 80 MB. Slike se ponovno grade pri svakom spajanju na main i semantički označavaju (`v1.2.3` + `latest`).
Docker Compose definira cijeli stog: frontend, API, bazu, Redis, worker. Osjetljive varijable (lozinka baze, API ključevi, Stripe secret) nalaze se u `.env` koji je izuzet iz gita — nikad nisu hardkodirane u sliku. Health checkovi u Composeu osiguravaju da su ovisnosti spremne prije pokretanja (baza spremna → pokretanje API-ja → pokretanje frontenda).
- Build cache s `--mount=type=cache` za npm ci na CI-ju
- Optimiziran redoslijed slojeva: stabilne ovisnosti → izvorni kod
- Upravljanje tajnama pomoću Docker secrets ili HashiCorp Vaulta za enterprise projekte
- `restart: unless-stopped` + `docker compose up --no-deps` za atomski deploy
Caddy — moderni reverse proxy s automatskim SSL-om
Caddy 2.8 automatski upravlja SSL/TLS-om putem ACME-a (Let's Encrypt ili ZeroSSL) — nijedan istekli certifikat, nikakva ručna konfiguracija. HTTP/2 i HTTP/3 (QUIC) uključeni su prema zadanim postavkama. Sigurnosna zaglavlja (HSTS, X-Frame-Options, CSP) postavljaju se globalno putem višekratno upotrebljivih snippeta. Deklarativni Caddyfile može se uspoređivati diffom i verzionira se u gitu.
Rate limiting, gzip/brotli kompresija i strukturirano JSON logiranje uključuju se izvornim Caddy direktivama — bez nginx modula ili složene Apache konfiguracije. Pristup osjetljivim rutama (`/admin`, `.env`, `.git`) vraća 444 (bez odgovora), konfigurirano kao globalni sigurnosni snippet.
- Samo TLS 1.3 s modernim cipher suiteovima
- On-demand TLS za multi-tenant SaaS s dinamičkim poddomenama
- Reload konfiguracije — `caddy reload` ne prekida aktivne veze
- Logiranje Caddy → Loki → Grafana — analiza prometa i upozorenja na anomalije
GitHub Actions CI/CD i nadzor
CI pipeline radi na svakom PR-u: lint, provjera tipova, unit testovi, build Docker slike, skeniranje ranjivosti (Trivy). Ako sve prođe, slika se šalje u registry, a deploy na staging odvija se automatski. Spajanje na main = automatski deploy u produkciju s healthcheckom nakon deploya. Automatski rollback ako healthcheck ne uspije u 60 sekundi.
Nadzor s Grafanom + Prometheusom za aplikacijske metrike (latencija, stopa pogrešaka, veličina reda) i Lokijem za agregaciju logova. Upozorenja se konfiguriraju na Slacku/e-pošti: stopa pogrešaka >1%, latencija P95 >500 ms, disk >85%. Vanjski uptime nadzor s Better Uptimeom — javna SLA nadzorna ploča dostupna na zahtjev.
- Trivy skeniranje ranjivosti na slikama — blokada kod Critical CVE-a
- Dependabot + auto-merge za patch ažuriranja (zeleni CI obvezan)
- Automatski backup baze na S3-kompatibilnu pohranu (noću, zadržavanje 30 dana)
Prednosti i ograničenja
Prednosti
- Deploy s healthcheckom nakon izdanja i automatskim rollbackom pri neuspjelom healthchecku.
- Automatski SSL/TLS putem Caddyja — certifikati se obnavljaju bez ručnog rada.
- Ponovljivo okruženje: ista Docker slika na devu, stagingu i produkciji.
- Nadzor i upozorenja (Grafana, Loki) — problemi se prate i prijavljuju.
Ograničenja
- Docker Compose ne skalira kao Kubernetes za enterprise okruženja s više čvorova.
- Početno postavljanje CI/CD-a traži vrijeme i DevOps stručnost.
- Slike i logovi troše prostor na disku — potrebno je povremeno čišćenje.
- Potpun nadzor (Prometheus + Grafana) dodaje servise koje treba održavati.
Kratak zaključak
Docker + Caddy + GitHub Actions idealna je kombinacija za pouzdan deploy na VPS-u ili na nekoliko čvorova. Za desetke čvorova s agresivnim auto-scalingom prijeđite na Kubernetes.
Tablica specifikacija
| Mogućnost | Granica / prag | Tipična uporaba | |
|---|---|---|---|
| Orkestracija | Docker Compose, cijeli stog | Jedan čvor; više čvorova traži Swarm/K8s | VPS, mali i srednji projekti |
| Reverse proxy | Caddy 2.8, HTTP/3, automatski SSL | Vrlo složena pravila traže opsežnu konfiguraciju | Više domena, multi-tenant |
| CI/CD | GitHub Actions, automatizirani deploy | CI minute se naplaćuju iznad besplatne razine | Automatski commit-to-prod |
| Tipičan trošak | VPS od ~5€/mjesec | Nadzor + backup dodaju trošak | Od jedne web-stranice do više brendova |
Docker Compose u odnosu na Kubernetes
| Kriterij | Docker Compose | Kubernetes |
|---|---|---|
| Složenost postavljanja | Mala | Velika |
| Skaliranje na više čvorova / auto-scaling | Ograničeno (jedan čvor) | Izvrsno |
| Prikladno za | VPS, mali i srednji projekti | Velike flote, enterprise |
Često postavljana pitanja
Zašto Caddy, a ne Nginx?
Caddy automatski upravlja SSL/TLS-om putem ACME-a, prema zadanim postavkama uključuje HTTP/2 i HTTP/3 i ima kratku deklarativnu konfiguraciju. Nginx za isti rezultat traži certbot i više ručne konfiguracije.
Trebam li Kubernetes?
Ne za većinu web-stranica. Docker Compose na VPS-u pouzdano vodi jednu web-stranicu ili nekoliko servisa. Kubernetes postaje koristan tek kod desetaka čvorova s agresivnim auto-scalingom.
Kako funkcionira deploy?
GitHub Actions izgradi novu sliku, pokrene je uz staru, izvrši healthcheck, a zatim prebaci promet. Ako healthcheck ne uspije u 60 sekundi, automatski se radi rollback na prethodnu verziju.
Koji nadzor preporučujete?
Grafana + Prometheus za metrike (latencija, stopa pogrešaka) i Loki za agregirane logove, s upozorenjima na Slacku/e-pošti. Za vanjski uptime dodajemo neovisan servis poput Better Uptimea.