Debesis, Docker ir DevOps — spartus ir patikimas diegimas
Visas programas konteinerizuojame su Docker, orkestruojame su Docker Compose (arba Kubernetes enterprise projektams), sukonfigūruojame Caddy kaip atvirkštinį tarpinį serverį su automatiniu SSL ir automatizuojame visą diegimo ciklą per GitHub Actions – nuo commit iki produkcijos vienu automatizuotu procesu.
Konteinerizavimas su Docker ir Docker Compose
Kiekviena paslauga turi savo daugiapakopį Dockerfile: build etapas, kuriame įdiegiamos priklausomybės ir kompiliuojama, ir minimalus galutinis etapas (distroless arba alpine), kuriame yra tik reikalingi artefaktai. Tipinis Next.js atvaizdas sveria mažiau nei 150 MB, FastAPI – mažiau nei 80 MB. Atvaizdai perkuriami po kiekvieno merge į main ir žymimi semantiškai (`v1.2.3` + `latest`).
Docker Compose apibrėžia visą steką: frontend, API, DB, Redis, worker. Jautrūs kintamieji (DB slaptažodis, API raktai, Stripe secret) laikomi `.env`, neįtrauktame į git – niekada nekoduojami atvaizde. Compose sveikatos patikros užtikrina, kad priklausomybės būtų pasiruošusios prieš paleidimą (DB paruošta → paleidžiamas API → paleidžiamas frontend).
- Build talpykla su `--mount=type=cache` – pakartotiniai npm ci vykdomi iš talpyklos
- Optimizuota sluoksnių tvarka: stabilios priklausomybės → šaltinio kodas
- Paslapčių valdymas su Docker secrets arba HashiCorp Vault enterprise projektams
- `restart: unless-stopped` + `docker compose up --no-deps` atominiam diegimui
Caddy – šiuolaikinis atvirkštinis tarpinis serveris su automatiniu SSL
Caddy 2.8 SSL/TLS tvarko automatiškai per ACME (Let's Encrypt arba ZeroSSL) – jokios rankinės konfigūracijos. HTTP/2 ir HTTP/3 (QUIC) įjungti pagal numatytuosius nustatymus. Saugos antraštės (HSTS, X-Frame-Options, CSP) nustatomos globaliai per pakartotinai naudojamus snippet’us. Deklaratyvi Caddyfile konfigūracija lengvai lyginama ir versijuojama git.
Užklausų ribojimas, gzip/brotli suspaudimas ir struktūrizuotas JSON žurnalas įjungiami natūraliomis Caddy direktyvomis – be nginx modulių ar sudėtingos Apache konfigūracijos. Prieiga prie jautrių maršrutų (`/admin`, `.env`, `.git`) grąžina 444 (be atsakymo), sukonfigūruota kaip globalus saugos snippet’as.
- Tik TLS 1.3 su šiuolaikiniais šifrų rinkiniais
- On-demand TLS daugianuomos SaaS su dinaminiais subdomenais
- Perkrovimas: `caddy reload` nenutraukia aktyvių jungčių
- Caddy žurnalas → Loki → Grafana – srauto analizė ir anomalijų įspėjimai
GitHub Actions CI/CD ir stebėsena
CI procesas vykdomas kiekvienam PR: lint, tipų tikrinimas, vienetiniai testai, Docker atvaizdo build, pažeidžiamumų skenavimas (Trivy). Jei viskas praeina, atvaizdas įkeliamas į registrą ir diegimas į staging vyksta automatiškai. Merge į main = automatinis diegimas į produkciją su patikra po diegimo. Automatinis atsukimas atgal, jei sveikatos patikra nepavyksta per 60 sekundžių.
Stebėsena su Grafana + Prometheus programos metrikoms (delsa, klaidų dažnis, eilės dydis) ir Loki žurnalų agregavimui. Įspėjimai sukonfigūruoti Slack/el. paštu: klaidų dažnis >1 %, delsa P95 >500 ms, diskas >85 %. Išorinė veikimo stebėsena su Better Uptime – viešas SLA skydelis pateikiamas pagal užklausą.
- Trivy pažeidžiamumų skenavimas atvaizdams – blokuojama esant Critical CVE
- Dependabot + auto-merge patch atnaujinimams (privalomas žalias CI)
- Automatinė DB atsarginė kopija į S3 suderinamą saugyklą (kasnakt, saugoma 30 dienų)
Privalumai ir apribojimai
Privalumai
- Diegimas su automatiniu atsukimu atgal, kai nepavyksta sveikatos patikra.
- Automatinis SSL/TLS per Caddy – sertifikatams atnaujinti rankiniai veiksmai nereikalingi.
- Atkuriama aplinka: tas pats Docker atvaizdas dev, staging ir produkcijoje.
- Stebėsena ir įspėjimai (Grafana, Loki) – problemas matai pagal rodiklius ir įspėjimus.
Apribojimai
- Docker Compose neplečiamas taip kaip Kubernetes daugiamazgėms enterprise aplinkoms.
- Pradinis CI/CD nustatymas reikalauja laiko ir DevOps patirties.
- Atvaizdai ir žurnalai užima disko vietą – reikia periodinio valymo.
- Pilna stebėsena (Prometheus + Grafana) prideda paslaugų, kurias reikia prižiūrėti.
Trumpa išvada
Docker + Caddy + GitHub Actions – idealus derinys patikimam diegimui VPS arba keliuose mazguose. Esant dešimtims mazgų su agresyviu automatiniu mastelio keitimu, pereikite prie Kubernetes.
Specifikacijų lentelė
| Galimybė | Riba / slenkstis | Tipinis naudojimas | |
|---|---|---|---|
| Orkestravimas | Docker Compose, pilnas stekas | Vienas mazgas; keliems mazgams reikia Swarm/K8s | VPS, maži ir vidutiniai projektai |
| Atvirkštinis tarpinis serveris | Caddy 2.8, HTTP/3, automatinis SSL | Labai sudėtingoms taisyklėms reikia išplėstos konfigūracijos | Daugiadomenė, daugianuomė aplinka |
| CI/CD | GitHub Actions, vienas automatizuotas procesas | CI minutės apmokestinamos viršijus nemokamą planą | Automatinis kelias nuo commit iki produkcijos |
| Tipinė kaina | VPS nuo ~5 €/mėn. | Stebėsena + atsarginės kopijos didina kainą | Nuo vienos svetainės iki kelių prekės ženklų |
Docker Compose ir Kubernetes
| Kriterijus | Docker Compose | Kubernetes |
|---|---|---|
| Nustatymo sudėtingumas | Mažas | Didelis |
| Daugiamazgis mastelis / automatinis mastelio keitimas | Ribotas (vienas mazgas) | Puikus |
| Tinka | VPS, maži ir vidutiniai projektai | Dideli parkai, enterprise |
Dažniausiai užduodami klausimai
Kodėl Caddy, o ne Nginx?
Caddy SSL/TLS tvarko automatiškai per ACME, pagal numatytuosius nustatymus įjungia HTTP/2 ir HTTP/3 ir turi trumpą deklaratyvią konfigūraciją. Nginx tam pačiam rezultatui reikia certbot ir daugiau rankinės konfigūracijos.
Ar man reikia Kubernetes?
Daugumai svetainių – ne. Docker Compose viename VPS patikimai valdo svetainę ar kelias paslaugas. Kubernetes tampa naudingas tik esant dešimtims mazgų su agresyviu automatiniu mastelio keitimu.
Kaip veikia diegimas ir atsukimas atgal?
GitHub Actions sukuria naują atvaizdą, paleidžia jį šalia senojo, atlieka sveikatos patikrą ir tada perjungia srautą. Jei sveikatos patikra nepavyksta per 60 sekundžių, automatiškai atsukama į ankstesnę versiją.
Kokią stebėseną rekomenduojate?
Grafana + Prometheus metrikoms (delsa, klaidų dažnis) ir Loki agreguotiems žurnalams, su įspėjimais per Slack/el. paštą. Išorinei veikimo stebėsenai pridedame nepriklausomą paslaugą, pavyzdžiui, Better Uptime.