Cloud, Docker & DevOps — Snabb och pålitlig driftsättning
Vi containeriserar alla applikationer med Docker, orkestrerar dem med Docker Compose (eller Kubernetes för enterprise-projekt), konfigurerar Caddy som reverse proxy med automatisk SSL och automatiserar hela driftsättningscykeln via GitHub Actions — från commit till produktion.
Containerisering med Docker och Docker Compose
Varje tjänst har sin egen multi-stage Dockerfile: ett byggsteg som installerar beroenden och kompilerar, och ett minimalt slutsteg (distroless eller alpine) som bara innehåller de nödvändiga artefakterna. En typisk Next.js-image blir under 150 MB; en FastAPI-image under 80 MB. Imagerna byggs om vid varje merge till main och taggas semantiskt (`v1.2.3` + `latest`).
Docker Compose definierar hela stacken: frontend, API, DB, Redis, worker. Känsliga variabler (DB-lösenord, API-nycklar, Stripe-hemlighet) ligger i `.env` som är undantagen från git — aldrig hårdkodade i imagen. Health checks i Compose ser till att beroendena är redo före start (DB redo → API startar → frontend startar).
- Byggcache med `--mount=type=cache` — npm ci på <30 s i CI
- Optimerad lagerordning: stabila beroenden → källkod
- Hantering av hemligheter med Docker secrets eller HashiCorp Vault för enterprise-projekt
- `restart: unless-stopped` + `docker compose up --no-deps` för atomisk driftsättning
Caddy — modern reverse proxy med automatisk SSL
Caddy 2.8 hanterar SSL/TLS automatiskt via ACME (Let's Encrypt eller ZeroSSL) — inga utgångna certifikat och ingen manuell konfiguration. HTTP/2 och HTTP/3 (QUIC) är aktiverade som standard. Säkerhetshuvuden (HSTS, X-Frame-Options, CSP) sätts globalt via återanvändbara snippets. Den deklarativa Caddyfile-konfigurationen går att jämföra med diff och versionshanteras i git.
Rate limiting, gzip/brotli-komprimering och strukturerad JSON-loggning aktiveras med inbyggda Caddy-direktiv — utan nginx-moduler eller komplicerad Apache-konfiguration. Åtkomst till känsliga sökvägar (`/admin`, `.env`, `.git`) returnerar 444 (inget svar), konfigurerat som en global säkerhetssnippet.
- A+ på SSL Labs från dag ett — endast TLS 1.3 med moderna cipher suites
- On-demand TLS för multi-tenant SaaS med dynamiska subdomäner
- Omladdning utan driftstopp — `caddy reload` avbryter inte aktiva anslutningar
- Caddy-loggning → Loki → Grafana — trafikanalys och larm vid avvikelser
CI/CD med GitHub Actions och övervakning
CI-pipelinen körs vid varje PR: lint, typkontroll, enhetstester, bygge av Docker-image och sårbarhetsskanning (Trivy). Om allt passerar pushas imagen till registret och driftsättningen till staging sker automatiskt. Merge till main = automatisk driftsättning i produktion med healthcheck efter driftsättningen. Automatisk rollback om healthchecken misslyckas inom 60 sekunder.
Övervakning med Grafana + Prometheus för applikationsmetrik (latens, felfrekvens, könivå) och Loki för logg-aggregering. Larm konfigureras på Slack/e-post: felfrekvens >1 %, latens P95 >500 ms, disk >85 %. Extern uptime-övervakning med Better Uptime — en publik SLA-dashboard finns på begäran.
- Trivy-sårbarhetsskanning av images — blockerar vid Critical CVE
- Dependabot + auto-merge för patch-uppdateringar (grön CI krävs)
- Automatisk DB-backup till S3-kompatibel lagring (varje natt, 30 dagars retention)
Fördelar och begränsningar
Fördelar
- Driftsättning med automatisk rollback vid misslyckad healthcheck.
- Automatisk SSL/TLS via Caddy — inga certifikat som går ut utan att någon märker det.
- Reproducerbar miljö: samma Docker-image i dev, staging och produktion.
- Övervakning och larm (Grafana, Loki) — problem upptäcks före användarna.
Begränsningar
- Docker Compose skalar inte som Kubernetes för enterprise med flera noder.
- Den initiala CI/CD-uppsättningen kräver tid och DevOps-kompetens.
- Images och loggar tar diskutrymme — kräver regelbunden rensning.
- Fullständig övervakning (Prometheus + Grafana) ger fler tjänster att underhålla.
Kort slutsats
Docker + Caddy + GitHub Actions är den ideala kombinationen för pålitlig driftsättning på en VPS eller några få noder. För dussintals noder med aggressiv autoskalning bör du gå över till Kubernetes.
Specifikationstabell
| Förmåga | Gräns / tröskel | Typisk användning | |
|---|---|---|---|
| Orkestrering | Docker Compose, komplett stack | En enda nod; flera noder kräver Swarm/K8s | VPS, små till medelstora projekt |
| Reverse proxy | Caddy 2.8, HTTP/3, automatisk SSL | Mycket komplexa regler kräver utökad konfiguration | Flera domäner, multi-tenant |
| CI/CD | GitHub Actions, driftsättning < 5 min | CI-minuter debiteras utöver gratisnivån | Automatiskt från commit till produktion |
| Typisk kostnad | VPS från ~5 €/månad | Övervakning + backup tillför kostnad | Från en enda sajt till flera varumärken |
Docker Compose jämfört med Kubernetes
| Kriterium | Docker Compose | Kubernetes |
|---|---|---|
| Uppsättningens komplexitet | Låg | Hög |
| Skalning över flera noder / autoskalning | Begränsad (en nod) | Utmärkt |
| Lämplig för | VPS, små till medelstora projekt | Stora flottor, enterprise |
Vanliga frågor
Varför Caddy och inte Nginx?
Caddy hanterar SSL/TLS automatiskt via ACME, aktiverar HTTP/2 och HTTP/3 som standard och har en kort deklarativ konfiguration. Nginx kräver certbot och mer manuell konfiguration för samma resultat.
Behöver jag Kubernetes?
Inte för de flesta webbplatser. Docker Compose på en VPS hanterar en sajt eller några få tjänster på ett pålitligt sätt. Kubernetes blir användbart först vid dussintals noder med aggressiv autoskalning.
Hur fungerar driftsättning?
GitHub Actions bygger en ny image, startar den vid sidan av den gamla, kör en healthcheck och växlar sedan över trafiken. Om healthchecken misslyckas inom 60 sekunder sker en automatisk rollback till föregående version.
Vilken övervakning rekommenderar ni?
Grafana + Prometheus för metrik (latens, felfrekvens) och Loki för aggregerade loggar, med larm på Slack/e-post. För extern uptime-övervakning lägger vi till en oberoende tjänst som Better Uptime.