Cloud, Docker & DevOps — ātra un uzticama izvietošana
Visas lietotnes ievietojam konteineros ar Docker, orķestrējam ar Docker Compose (vai Kubernetes enterprise projektiem), konfigurējam Caddy kā reverse proxy ar automātisku SSL un automatizējam visu izvietošanas ciklu ar GitHub Actions — no commit līdz produkcijai bez manuāliem soļiem.
Konteinerizācija ar Docker un Docker Compose
Katram pakalpojumam ir savs vairāku posmu Dockerfile: būvēšanas posms, kas instalē atkarības un kompilē, un minimāls gala posms (distroless vai alpine), kas satur tikai nepieciešamos artefaktus. Tipisks Next.js attēls sanāk zem 150 MB, FastAPI — zem 80 MB. Attēli tiek pārbūvēti katrā sapludināšanā uz main un semantiski marķēti (`v1.2.3` + `latest`).
Docker Compose definē visu steku: frontend, API, DB, Redis, worker. Jutīgie mainīgie (DB parole, API atslēgas, Stripe secret) atrodas `.env`, kas izslēgts no git — nekad nav ierakstīti attēlā. Health checks Compose nodrošina, ka atkarības ir gatavas pirms startēšanas (DB gatava → API starts → frontend starts).
- Build cache ar `--mount=type=cache` — npm ci mazāk nekā 30 s CI vidē
- Optimizēta slāņu secība: stabilas atkarības → pirmkods
- Noslēpumu pārvaldība ar Docker secrets vai HashiCorp Vault enterprise projektiem
- `restart: unless-stopped` + `docker compose up --no-deps` atomārai izvietošanai
Caddy — mūsdienīgs reverse proxy ar automātisku SSL
Caddy 2.8 automātiski pārvalda SSL/TLS caur ACME (Let's Encrypt vai ZeroSSL) — nav beigušos sertifikātu, nav manuālas konfigurēšanas. HTTP/2 un HTTP/3 (QUIC) ir ieslēgti pēc noklusējuma. Drošības headers (HSTS, X-Frame-Options, CSP) tiek iestatīti globāli ar atkārtoti izmantojamiem snippet. Deklaratīvā Caddyfile konfigurācija ir salīdzināma (diffable) un versionēta git.
Rate limiting, gzip/brotli kompresija un strukturēta JSON žurnalēšana tiek ieslēgta ar natīvām Caddy direktīvām — bez nginx moduļiem vai sarežģītas Apache konfigurācijas. Piekļuve jutīgiem maršrutiem (`/admin`, `.env`, `.git`) atgriež 444 (bez atbildes), kas konfigurēts kā globāls drošības snippet.
- Tikai TLS 1.3 ar mūsdienīgiem šifru komplektiem
- On-demand TLS daudznomnieku SaaS ar dinamiskiem apakšdomēniem
- Pārlādēšana bez dīkstāves — `caddy reload` nepārtrauc aktīvos savienojumus
- Caddy žurnalēšana → Loki → Grafana — datplūsmas analīze un anomāliju brīdinājumi
GitHub Actions CI/CD un monitorings
CI pipeline darbojas katrā PR: lint, tipu pārbaude, vienību testi, Docker attēla būvēšana, ievainojamību skenēšana (Trivy). Ja viss iziet cauri, attēls tiek nosūtīts uz registry un izvietošana staging vidē notiek automātiski. Sapludināšana uz main = automātiska izvietošana produkcijā ar healthcheck pēc izvietošanas. Automātiska atgriešana, ja healthcheck neizdodas 60 sekunžu laikā.
Monitorings ar Grafana + Prometheus lietojumprogrammas metrikām (latentums, kļūdu īpatsvars, rindas izmērs) un Loki žurnālu agregācijai. Brīdinājumi konfigurēti Slack/e-pastam: kļūdu īpatsvars >1%, latentums P95 >500 ms, disks >85%. Ārējs uptime monitorings ar Better Uptime — publisks SLA informācijas panelis pieejams pēc pieprasījuma.
- Trivy ievainojamību skenēšana attēliem — bloķēšana pie Critical CVE
- Dependabot + auto-merge patch atjauninājumiem (obligāts zaļš CI)
- Automātiska DB rezerves kopija uz S3 saderīgu glabātuvi (katru nakti, glabāšana 30 dienas)
Priekšrocības un ierobežojumi
Priekšrocības
- Izvietošana ar automātisku atgriešanu, ja healthcheck neizdodas.
- Automātisks SSL/TLS ar Caddy — nekādu manuāli nokavētu sertifikātu.
- Atkārtojama vide: viens un tas pats Docker attēls dev, staging un produkcijā.
- Monitorings un brīdinājumi (Grafana, Loki) — problēmas redzamas pirms lietotājiem.
Ierobežojumi
- Docker Compose nemērogojas kā Kubernetes vairāku mezglu enterprise videi.
- Sākotnējai CI/CD iestatīšanai nepieciešams laiks un DevOps pieredze.
- Attēli un žurnāli aizņem diska vietu — nepieciešama periodiska tīrīšana.
- Pilns monitorings (Prometheus + Grafana) pievieno papildu uzturamus pakalpojumus.
Īss secinājums
Docker + Caddy + GitHub Actions ir ideāla kombinācija uzticamai izvietošanai uz VPS vai dažiem mezgliem. Desmitiem mezglu ar agresīvu automātisko mērogošanu pāries uz Kubernetes.
Specifikāciju tabula
| Iespēja | Ierobežojums / slieksnis | Tipisks pielietojums | |
|---|---|---|---|
| Orķestrēšana | Docker Compose, pilns steks | Viens mezgls; vairākiem mezgliem nepieciešams Swarm/K8s | VPS, mazi un vidēji projekti |
| Reverse proxy | Caddy 2.8, HTTP/3, automātisks SSL | Ļoti sarežģītiem noteikumiem nepieciešama plaša konfigurācija | Vairāku domēnu, daudznomnieku |
| CI/CD | GitHub Actions, automātiska izvietošana | CI minūtes tiek apmaksātas virs bezmaksas limita | Automātiski no commit līdz produkcijai |
| Tipiskās izmaksas | VPS no ~5 €/mēnesī | Monitorings + rezerves kopijas pievieno izmaksas | No vienas vietnes līdz vairākiem zīmoliem |
Docker Compose pret Kubernetes
| Kritērijs | Docker Compose | Kubernetes |
|---|---|---|
| Iestatīšanas sarežģītība | Zema | Augsta |
| Vairāku mezglu mērogošana / auto-scaling | Ierobežota (viens mezgls) | Teicama |
| Piemērots | VPS, mazi un vidēji projekti | Lieli parki, enterprise |
Biežāk uzdotie jautājumi
Kāpēc Caddy, nevis Nginx?
Caddy automātiski pārvalda SSL/TLS caur ACME, pēc noklusējuma ieslēdz HTTP/2 un HTTP/3 un tam ir īsa deklaratīva konfigurācija. Nginx tam pašam rezultātam nepieciešams certbot un vairāk manuālas konfigurēšanas.
Vai man vajag Kubernetes?
Lielākajai daļai vietņu nē. Docker Compose uz VPS uzticami apkalpo vienu vietni vai dažus pakalpojumus. Kubernetes kļūst noderīgs tikai pie desmitiem mezglu ar agresīvu automātisko mērogošanu.
Kā darbojas izvietošana?
GitHub Actions uzbūvē jaunu attēlu, palaiž to līdzās vecajam, izpilda healthcheck, pēc tam pārslēdz datplūsmu. Ja healthcheck neizdodas 60 sekunžu laikā, tiek veikta automātiska atgriešana uz iepriekšējo versiju.
Kādu monitoringu iesakāt?
Grafana + Prometheus metrikām (latentums, kļūdu īpatsvars) un Loki agregētiem žurnāliem, ar brīdinājumiem Slack/e-pastā. Ārējam uptime pievienojam neatkarīgu pakalpojumu, piemēram, Better Uptime.