Cloud, Docker & DevOps — Publikim i shpejtë dhe i besueshëm
I kontejnerizojmë të gjitha aplikacionet me Docker, i orkestrojmë me Docker Compose (ose Kubernetes për projekte enterprise), konfigurojmë Caddy si reverse proxy me SSL automatik dhe automatizojmë gjithë ciklin e publikimit përmes GitHub Actions — nga commit-i në prodhim .
Kontejnerizim me Docker dhe Docker Compose
Çdo shërbim ka Dockerfile-in e vet multi-stage: një stage ndërtimi që instalon varësitë dhe kompilon, dhe një stage final minimal (distroless ose alpine) që përmban vetëm artefaktet e nevojshme. Një imazh tipik Next.js del nën 150MB; një FastAPI nën 80MB. Imazhet rindërtohen në çdo merge te main dhe etiketohen semantikisht (`v1.2.3` + `latest`).
Docker Compose përcakton gjithë stack-un: frontend, API, DB, Redis, worker. Variablat e ndjeshme (DB password, API keys, Stripe secret) ndodhen në `.env` të përjashtuar nga git — kurrë të shkruara direkt në imazh. Health checks në Compose sigurojnë që varësitë të jenë gati para nisjes (DB gati → nis API → nis frontend).
- Build cache me `--mount=type=cache` — npm ci përdor cache-in në CI
- Renditje e optimizuar e shtresave: varësi të qëndrueshme → kod burimor
- Menaxhim i sekreteve me Docker secrets ose HashiCorp Vault për projekte enterprise
- `restart: unless-stopped` + `docker compose up --no-deps` për publikim atomik
Caddy — reverse proxy modern me SSL automatik
Caddy 2.8 e menaxhon SSL/TLS automatikisht përmes ACME (Let's Encrypt ose ZeroSSL) — asnjë certifikatë e skaduar, asnjë konfigurim manual. HTTP/2 dhe HTTP/3 (QUIC) janë të aktivizuara si parazgjedhje. Header-at e sigurisë (HSTS, X-Frame-Options, CSP) vendosen globalisht përmes snippet-eve të ripërdorshme. Konfigurimi deklarativ Caddyfile mund të krahasohet me diff dhe versionohet në git.
Rate limiting, compression gzip/brotli dhe logging JSON i strukturuar aktivizohen me direktiva native të Caddy — pa module nginx ose konfigurim të ndërlikuar Apache. Qasja te rrugë të ndjeshme (`/admin`, `.env`, `.git`) kthen 444 (pa përgjigje), e konfiguruar si snippet global sigurie.
- Vetëm TLS 1.3 me cipher suites moderne
- On-demand TLS për SaaS multi-tenant me nënfusha dinamike
- Reload gradual — `caddy reload` nuk i ndërpret lidhjet aktive
- Logging Caddy → Loki → Grafana — analizë trafiku dhe sinjalizim anomalish
GitHub Actions CI/CD dhe monitorim
Pipeline-i CI ekzekutohet në çdo PR: lint, type check, unit tests, build i imazhit Docker, vulnerability scan (Trivy). Nëse të gjitha kalojnë, imazhi dërgohet (push) në registry dhe publikimi në staging bëhet automatikisht. Merge te main = publikim automatik në prodhim me healthcheck pas publikimit. Rollback automatik nëse healthcheck dështon brenda 60 sekondave.
Monitorim me Grafana + Prometheus për metrika aplikative (latencë, error rate, madhësia e queue-së) dhe Loki për grumbullimin e logjeve. Sinjalizime të konfiguruara në Slack/email: error rate >1%, latencë P95 >500ms, disk >85%. Monitorim i jashtëm i uptime me Better Uptime — paneli publik i SLA-së është i disponueshëm sipas kërkesës.
- Trivy vulnerability scan në imazhe — bllokim te CVE Critical
- Dependabot + auto-merge për patch updates (CI jeshil i detyrueshëm)
- Backup automatik i DB në storage të përputhshëm me S3 (çdo natë, ruajtje 30 ditë)
Avantazhe dhe kufizime
Avantazhe
- Publikim me healthcheck dhe rollback automatik kur ai dështon.
- SSL/TLS automatik përmes Caddy — asnjë certifikatë e skaduar manualisht.
- Mjedis i riprodhueshëm: i njëjti imazh Docker në dev, staging, prodhim.
- Monitorim dhe sinjalizime (Grafana, Loki) — anomalitë sinjalizohen.
Kufizime
- Docker Compose nuk shkallëzohet si Kubernetes për multi-nod enterprise.
- Konfigurimi fillestar i CI/CD kërkon kohë dhe ekspertizë DevOps.
- Imazhet dhe logjet zënë hapësirë në disk — kërkojnë pastrim periodik.
- Monitorimi i plotë (Prometheus + Grafana) shton shërbime për t'u mirëmbajtur.
Verdikt i shkurtër
Docker + Caddy + GitHub Actions është kombinimi ideal për publikim të besueshëm në një VPS ose në disa nyje. Për dhjetëra nyje me auto-scaling agresiv, kalo te Kubernetes.
Tabela e specifikimeve
| Aftësia | Kufiri / pragu | Përdorimi tipik | |
|---|---|---|---|
| Orkestrimi | Docker Compose, stack i plotë | Mononod; multi-nod kërkon Swarm/K8s | VPS, projekte të vogla e të mesme |
| Reverse proxy | Caddy 2.8, HTTP/3, SSL auto | Rregullat shumë të ndërlikuara kërkojnë konfigurim të gjerë | Multi-domen, multi-tenant |
| CI/CD | GitHub Actions, publikim automatik | Minutat CI tarifohen përtej free tier | Commit-to-prod automatik |
| Kostoja tipike | VPS nga ~5€/muaj | Monitorimi + backup-i shtojnë kosto | Nga një faqe e vetme deri te multi-brand |
Docker Compose kundrejt Kubernetes
| Kriteri | Docker Compose | Kubernetes |
|---|---|---|
| Ndërlikueshmëria e konfigurimit | E vogël | E madhe |
| Shkallëzim multi-nod / auto-scaling | I kufizuar (një nyje) | Shkëlqyer |
| I përshtatshëm për | VPS, projekte të vogla e të mesme | Flota të mëdha, enterprise |
Pyetje të shpeshta
Pse Caddy dhe jo Nginx?
Caddy e menaxhon SSL/TLS automatikisht përmes ACME, aktivizon HTTP/2 dhe HTTP/3 si parazgjedhje dhe ka një konfigurim deklarativ të shkurtër. Nginx kërkon certbot dhe më shumë konfigurim manual për të njëjtin rezultat.
A kam nevojë për Kubernetes?
Jo për shumicën e faqeve. Docker Compose në një VPS e trajton në mënyrë të besueshme një faqe ose disa shërbime. Kubernetes bëhet i dobishëm vetëm me dhjetëra nyje dhe auto-scaling agresiv.
Si funksionon publikimi automatik?
GitHub Actions ndërton një imazh të ri, e nis pranë të vjetrit, ekzekuton një healthcheck, pastaj e kalon trafikun. Nëse healthcheck dështon brenda 60 sekondave, bëhet rollback automatik te versioni i mëparshëm.
Çfarë monitorimi rekomandoni?
Grafana + Prometheus për metrika (latencë, error rate) dhe Loki për logje të grumbulluara, me sinjalizime në Slack/email. Për uptime të jashtëm shtojmë një shërbim të pavarur si Better Uptime.