Cloud, Docker i DevOps — brz i pouzdan deploy
Sve aplikacije kontejnerizujemo Docker-om, orkestriramo ih pomoću Docker Compose-a (ili Kubernetes-a za enterprise projekte), podešavamo Caddy kao reverse proxy sa automatskim SSL-om i automatizujemo ceo ciklus deploy-a kroz GitHub Actions — od commit-a do produkcije.
Kontejnerizacija sa Docker-om i Docker Compose-om
Svaki servis ima sopstveni multi-stage Dockerfile: build faza koja instalira zavisnosti i kompajlira, i minimalna završna faza (distroless ili alpine) koja sadrži samo potrebne artefakte. Tipična Next.js slika ima manje od 150 MB, a FastAPI manje od 80 MB. Slike se ponovo grade pri svakom merge-u na main i semantički označavaju (`v1.2.3` + `latest`).
Docker Compose definiše ceo stek: frontend, API, bazu, Redis, worker. Osetljive promenljive (lozinka baze, API ključevi, Stripe secret) nalaze se u `.env` fajlu isključenom iz git-a — nikada nisu zapisane u slici. Health check-ovi u Compose-u obezbeđuju da zavisnosti budu spremne pre pokretanja (baza spremna → pokretanje API-ja → pokretanje frontenda).
- Build keš sa `--mount=type=cache` — npm ci za <30 s na CI-ju
- Optimizovan redosled slojeva: stabilne zavisnosti → izvorni kod
- Upravljanje tajnama pomoću Docker secrets ili HashiCorp Vault-a za enterprise projekte
- `restart: unless-stopped` + `docker compose up --no-deps` za atomski deploy
Caddy — moderni reverse proxy sa automatskim SSL-om
Caddy 2.8 automatski upravlja SSL/TLS-om preko ACME-a (Let's Encrypt ili ZeroSSL) — nijedan istekao sertifikat, nikakvo ručno podešavanje. HTTP/2 i HTTP/3 (QUIC) su podrazumevano uključeni. Bezbednosna zaglavlja (HSTS, X-Frame-Options, CSP) postavljaju se globalno preko snippet-a koji se ponovo koriste. Deklarativna Caddyfile konfiguracija može da se poredi (diff) i verzioniše u git-u.
Rate limiting, gzip/brotli kompresija i strukturisano JSON logovanje uključuju se nativnim Caddy direktivama — bez nginx modula ili složene Apache konfiguracije. Pristup osetljivim rutama (`/admin`, `.env`, `.git`) vraća 444 (bez odgovora), podešeno kao globalni bezbednosni snippet.
- A+ na SSL Labs od prvog dana — samo TLS 1.3 sa modernim cipher suite-ovima
- On-demand TLS za multi-tenant SaaS sa dinamičkim poddomenima
- Reload bez zastoja — `caddy reload` ne prekida aktivne konekcije
- Caddy logovanje → Loki → Grafana — analiza saobraćaja i upozorenja na anomalije
GitHub Actions CI/CD i monitoring
CI pipeline se pokreće pri svakom PR-u: lint, provera tipova, unit testovi, build Docker slike, skeniranje ranjivosti (Trivy). Ako sve prođe, slika se šalje na registry, a deploy na staging obavlja se automatski. Merge na main = automatski deploy na produkciju sa healthcheck-om posle deploy-a. Automatski rollback ako healthcheck ne prođe u roku od 60 sekundi.
Monitoring sa Grafana + Prometheus za aplikativne metrike (latencija, stopa grešaka, veličina reda) i Loki za agregaciju logova. Upozorenja na Slack/email: stopa grešaka >1%, latencija P95 >500 ms, disk >85%. Spoljni uptime monitoring preko Better Uptime — javna SLA tabla dostupna na zahtev.
- Trivy skeniranje ranjivosti na slikama — blokada pri Critical CVE
- Dependabot + auto-merge za patch ažuriranja (zeleni CI je obavezan)
- Automatski backup baze na S3-kompatibilno skladište (noću, čuvanje 30 dana)
Prednosti i ograničenja
Prednosti
- Deploy sa automatskim rollback-om pri neuspelom healthcheck-u.
- Automatski SSL/TLS preko Caddy-ja — nijedan ručno propušten istekao sertifikat.
- Ponovljivo okruženje: ista Docker slika na dev-u, staging-u i produkciji.
- Monitoring i upozorenja (Grafana, Loki) — problemi se vide pre korisnika.
Ograničenja
- Docker Compose se ne skalira kao Kubernetes za enterprise okruženja sa više čvorova.
- Početno podešavanje CI/CD-a zahteva vreme 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 pouzdan deploy na VPS-u ili nekoliko čvorova. Za desetine čvorova sa agresivnim auto-skaliranjem pređite na Kubernetes.
Tabela specifikacija
| Mogućnost | Ograničenje / prag | Tipična upotreba | |
|---|---|---|---|
| Orkestracija | Docker Compose, kompletan stek | Jedan čvor; više čvorova zahteva Swarm/K8s | VPS, mali i srednji projekti |
| Reverse proxy | Caddy 2.8, HTTP/3, automatski SSL | Veoma složena pravila traže obimnu konfiguraciju | Više domena, multi-tenant |
| CI/CD | GitHub Actions, automatski deploy | CI minuti se naplaćuju preko besplatnog nivoa | Automatski commit-to-prod |
| Tipična cena | VPS od ~5€/mesečno | Monitoring + backup dodaju trošak | Od jednog sajta do više brendova |
Docker Compose naspram Kubernetes-a
| Kriterijum | Docker Compose | Kubernetes |
|---|---|---|
| Složenost podešavanja | Mala | Velika |
| Skaliranje na više čvorova / auto-skaliranje | Ograničeno (jedan čvor) | Odlično |
| Pogodno za | VPS, mali i srednji projekti | Velike flote, enterprise |
Često postavljana pitanja
Zašto Caddy, a ne Nginx?
Caddy automatski upravlja SSL/TLS-om preko ACME-a, podrazumevano 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 je potreban Kubernetes?
Ne za većinu sajtova. Docker Compose na VPS-u pouzdano vodi jedan sajt ili nekoliko servisa. Kubernetes postaje koristan tek kod desetina čvorova sa agresivnim auto-skaliranjem.
Kako funkcioniše deploy?
GitHub Actions gradi novu sliku, pokreće je pored stare, izvršava healthcheck, a zatim prebacuje saobraćaj. Ako healthcheck ne prođe u roku od 60 sekundi, automatski se radi rollback na prethodnu verziju.
Koji monitoring preporučujete?
Grafana + Prometheus za metrike (latencija, stopa grešaka) i Loki za agregirane logove, uz upozorenja na Slack/email. Za spoljni uptime dodajemo nezavisan servis poput Better Uptime-a.