Cloud, Docker i DevOps — brza i pouzdana isporuka
Sve aplikacije pakujemo u Docker kontejnere, orkestriramo ih pomoću Docker Compose (ili Kubernetesa za enterprise projekte), Caddy podešavamo kao reverse proxy sa automatskim SSL-om i cijeli ciklus isporuke automatizujemo preko GitHub Actions — od commita do produkcije.
Kontejnerizacija sa Dockerom i Docker Compose
Svaki servis ima svoj višefazni Dockerfile: fazu izgradnje koja instalira zavisnosti i kompajlira i minimalnu završnu fazu (distroless ili alpine) koja sadrži samo neophodne artefakte. Tipična Next.js slika ima manje od 150 MB, a FastAPI manje od 80 MB. Slike se ponovo grade pri svakom spajanju u main i označavaju semantički (`v1.2.3` + `latest`).
Docker Compose definiše cio stek: frontend, API, bazu, Redis, worker. Osjetljive promjenljive (lozinka baze, API ključevi, Stripe tajna) nalaze se u `.env` fajlu isključenom iz gita — nikada ne u samoj slici. Health check-ovi u Composeu obezbjeđuju da su zavisnosti spremne prije pokretanja (baza spremna → pokretanje API-ja → pokretanje frontenda).
- Keš izgradnje sa `--mount=type=cache` — npm ci za <30 s na CI-ju
- Optimizovan redosljed slojeva: stabilne zavisnosti → izvorni kôd
- Upravljanje tajnama pomoću Docker secrets ili HashiCorp Vault za enterprise projekte
- `restart: unless-stopped` + `docker compose up --no-deps` za atomsku isporuku
Caddy — moderni reverse proxy sa automatskim SSL-om
Caddy 2.8 automatski upravlja SSL/TLS-om preko ACME-a (Let's Encrypt ili ZeroSSL) — bez isteklih sertifikata i ručnog podešavanja. HTTP/2 i HTTP/3 (QUIC) uključeni su podrazumijevano. Bezbjednosna zaglavlja (HSTS, X-Frame-Options, CSP) postavljaju se globalno preko višekratnih snippeta. Deklarativna Caddyfile konfiguracija može se porediti i verzionisati u gitu.
Ograničavanje broja zahtjeva, gzip/brotli kompresija i strukturirani JSON logovi aktiviraju se nativnim Caddy direktivama — bez nginx modula ili složene Apache konfiguracije. Pristup osjetljivim rutama (`/admin`, `.env`, `.git`) vraća 444 (bez odgovora), što je podešeno kao globalni bezbjednosni snippet.
- Samo TLS 1.3 sa modernim cipher suite-ovima
- On-demand TLS za multi-tenant SaaS sa dinamičkim poddomenima
- Ponovno učitavanje bez zastoja — `caddy reload` ne prekida aktivne veze
- Caddy logovi → Loki → Grafana — analiza saobraćaja i upozorenja na anomalije
GitHub Actions CI/CD i monitoring
CI pipeline se pokreće na svakom PR-u: lint, provjera tipova, unit testovi, izgradnja Docker slike, skeniranje ranjivosti (Trivy). Ako sve prođe, slika se šalje u registry, a isporuka na staging odvija se automatski. Spajanje u main = automatska isporuka u produkciju sa healthcheckom nakon isporuke. Automatski povratak na prethodnu verziju ako healthcheck ne prođe u roku od 60 sekundi.
Monitoring sa Grafana + Prometheus za metrike aplikacije (latencija, stopa grešaka, veličina reda) i Loki za agregaciju logova. Upozorenja se podešavaju na Slack/email: stopa grešaka >1%, P95 latencija >500 ms, disk >85%. Spoljni monitoring dostupnosti sa Better Uptime — javna SLA kontrolna tabla dostupna na zahtjev.
- Trivy skeniranje ranjivosti na slikama — blokirano pri kritičnom CVE-u
- Dependabot + auto-merge za ažuriranja zakrpa (potreban zelen CI)
- Automatski backup baze na S3-kompatibilno skladište (noćni, čuvanje 30 dana)
Prednosti i mane
Prednosti
- Isporuka sa automatskim povratkom na prethodnu verziju kad healthcheck ne prođe.
- Automatski SSL/TLS preko Caddyja — nema ručno isteklih sertifikata.
- Ponovljivo okruženje: ista Docker slika na razvoju, stagingu i produkciji.
- Monitoring i upozorenja (Grafana, Loki) — problemi se vide prije korisnika.
Ograničenja
- Docker Compose se ne skalira kao Kubernetes za enterprise sa više čvorova.
- Početno podešavanje CI/CD-a traži vrijeme i DevOps stručnost.
- Slike i logovi troše prostor na disku — potrebno je periodično čišćenje.
- Potpun monitoring (Prometheus + Grafana) dodaje servise koje treba održavati.
Kratak zaključak
Docker + Caddy + GitHub Actions idealna je kombinacija za pouzdanu isporuku na VPS-u ili na nekoliko čvorova. Za desetine čvorova sa agresivnim automatskim skaliranjem pređite na Kubernetes.
Tabela specifikacija
| Mogućnost | Ograničenje / prag | Tipična upotreba | |
|---|---|---|---|
| Orkestracija | Docker Compose, cio stek | Jedan čvor; za više čvorova potreban je Swarm/K8s | VPS, mali i srednji projekti |
| Reverse proxy | Caddy 2.8, HTTP/3, automatski SSL | Veoma složena pravila traže proširenu konfiguraciju | Više domena, multi-tenant |
| CI/CD | GitHub Actions, automatska isporuka | CI minuti se naplaćuju preko besplatnog nivoa | Automatski od commita do produkcije |
| Tipičan trošak | VPS od ~€5/mjesečno | Monitoring + backup dodaju trošak | Od jednog sajta do više brendova |
Docker Compose naspram Kubernetesa
| Kriterijum | Docker Compose | Kubernetes |
|---|---|---|
| Složenost podešavanja | Niska | Visoka |
| Više čvorova / automatsko skaliranje | Ograničeno (jedan čvor) | Odlično |
| Najbolje za | VPS, mali i srednji projekti | Velike flote, enterprise |
Česta pitanja
Zašto Caddy, a ne Nginx?
Caddy automatski upravlja SSL/TLS-om preko ACME-a, podrazumijevano uključuje HTTP/2 i HTTP/3 i ima kratku deklarativnu konfiguraciju. Nginx za isti rezultat traži certbot i više ručnog podešavanja.
Da li mi treba Kubernetes?
Ne za većinu sajtova. Docker Compose na VPS-u pouzdano opslužuje sajt ili nekoliko servisa. Kubernetes postaje koristan tek kod desetina čvorova sa agresivnim automatskim skaliranjem.
Kako funkcioniše isporuka i povratak na prethodnu verziju?
GitHub Actions gradi novu sliku, pokreće je uporedo sa starom, izvršava healthcheck, a zatim prebacuje saobraćaj. Ako healthcheck ne prođe u roku od 60 sekundi, automatski se vraća na prethodnu verziju.
Koji monitoring preporučujete?
Grafana + Prometheus za metrike (latencija, stopa grešaka) i Loki za agregirane logove, sa upozorenjima na Slack/email. Za spoljni monitoring dostupnosti dodajemo nezavisan servis kao što je Better Uptime.