Cloud, Docker i DevOps — Desplegament ràpid i fiable
Containeritzem totes les aplicacions amb Docker, les orquestrem amb Docker Compose (o Kubernetes per a projectes empresarials), configurem Caddy com a servidor intermediari invers amb SSL automàtic i automatitzem tot el cicle de desplegament amb GitHub Actions — del commit a producció.
Containerització amb Docker i Docker Compose
Cada servei té el seu propi Dockerfile multi-stage: una etapa de compilació que instal·la les dependències i compila, i una etapa final mínima (distroless o alpine) que conté només els artefactes necessaris. Una imatge típica de Next.js queda per sota dels 150 MB; una de FastAPI, per sota dels 80 MB. Les imatges es reconstrueixen a cada fusió a main i s'etiqueten semànticament (`v1.2.3` + `latest`).
Docker Compose defineix tot l'stack: frontend, API, BD, Redis, worker. Les variables sensibles (contrasenya de la BD, claus d'API, secret de Stripe) són a `.env`, exclòs de git — mai codificades a la imatge. Les comprovacions d'estat (health checks) de Compose asseguren que les dependències estiguin preparades abans d'arrencar (BD preparada → arrenca l'API → arrenca el frontend).
- Memòria cau de compilació amb `--mount=type=cache` — npm ci reutilitza la memòria cau a la CI
- Ordre de capes optimitzat: dependències estables → codi font
- Gestió de secrets amb Docker secrets o HashiCorp Vault per a projectes empresarials
- `restart: unless-stopped` + `docker compose up --no-deps` per a un desplegament atòmic
Caddy — servidor intermediari invers modern amb SSL automàtic
Caddy 2.8 gestiona SSL/TLS automàticament mitjançant ACME (Let's Encrypt o ZeroSSL) — sense certificats caducats ni configuració manual. HTTP/2 i HTTP/3 (QUIC) activats per defecte. Les capçaleres de seguretat (HSTS, X-Frame-Options, CSP) s'estableixen globalment mitjançant fragments reutilitzables. La configuració declarativa del Caddyfile es pot comparar i es versiona a git.
La limitació de peticions, la compressió gzip/brotli i el registre JSON estructurat s'activen amb directives natives de Caddy — sense mòduls de nginx ni configuració complexa d'Apache. L'accés a rutes sensibles (`/admin`, `.env`, `.git`) retorna 444 (sense resposta), configurat com a fragment de seguretat global.
- Configuració TLS estricta — només TLS 1.3 amb sèries de xifratge modernes
- TLS sota demanda per a SaaS multiinquilí amb subdominis dinàmics
- Recàrrega: `caddy reload` no interromp les connexions actives
- Registre de Caddy → Loki → Grafana — anàlisi del trànsit i alertes d'anomalies
CI/CD amb GitHub Actions i monitoratge
La canalització de CI s'executa a cada PR: lint, comprovació de tipus, proves unitàries, construcció de la imatge Docker, anàlisi de vulnerabilitats (Trivy). Si tot passa, la imatge s'envia al registre i el desplegament a staging es fa automàticament. Fusió a main = desplegament automàtic a producció amb comprovació d'estat posterior. Reversió automàtica si la comprovació d'estat falla en 60 segons.
Monitoratge amb Grafana + Prometheus per a mètriques de l'aplicació (latència, taxa d'errors, mida de la cua) i Loki per a l'agregació de registres. Alertes configurades a Slack/correu: taxa d'errors >1 %, latència P95 >500 ms, disc >85 %. Monitoratge extern de disponibilitat amb Better Uptime — tauler públic de l'SLA disponible a petició.
- Anàlisi de vulnerabilitats amb Trivy a les imatges — bloquejat amb una CVE crítica
- Dependabot + fusió automàtica per a actualitzacions de pedaç (cal una CI en verd)
- Còpia de seguretat automàtica de la BD a emmagatzematge compatible amb S3 (cada nit, retenció de 30 dies)
Avantatges i limitacions
Avantatges
- Desplegament amb reversió automàtica si la comprovació d'estat falla.
- SSL/TLS automàtic amb Caddy — sense certificats caducats manualment.
- Entorn reproduïble: la mateixa imatge Docker en desenvolupament, staging i producció.
- Monitoratge i alertes (Grafana, Loki) — els problemes es detecten abans que els usuaris.
Limitacions
- Docker Compose no escala com Kubernetes en entorns empresarials multinode.
- La configuració inicial de CI/CD requereix temps i experiència en DevOps.
- Les imatges i els registres consumeixen espai de disc — cal una neteja periòdica.
- El monitoratge complet (Prometheus + Grafana) afegeix serveis a mantenir.
Veredicte ràpid
Docker + Caddy + GitHub Actions és la combinació ideal per a un desplegament fiable en un VPS o en pocs nodes. Per a desenes de nodes amb escalat automàtic agressiu, passa a Kubernetes.
Taula d'especificacions
| Capacitat | Límit / llindar | Ús típic | |
|---|---|---|---|
| Orquestració | Docker Compose, stack complet | Un sol node; el multinode necessita Swarm/K8s | VPS, projectes petits i mitjans |
| Servidor intermediari invers | Caddy 2.8, HTTP/3, SSL automàtic | Les regles molt complexes necessiten configuració ampliada | Multidomini, multiinquilí |
| CI/CD | GitHub Actions, desplegament | Els minuts de CI es facturen per sobre del nivell gratuït | Del commit a producció de manera automàtica |
| Cost típic | VPS des de ~€5/mes | El monitoratge i les còpies de seguretat afegeixen cost | Des d'un sol lloc web fins a multimarca |
Docker Compose davant Kubernetes
| Criteri | Docker Compose | Kubernetes |
|---|---|---|
| Complexitat de configuració | Baixa | Alta |
| Multinode / escalat automàtic | Limitat (un sol node) | Excel·lent |
| El millor per a | VPS, projectes petits i mitjans | Grans flotes, empresa |
Preguntes freqüents
Per què Caddy i no Nginx?
Caddy gestiona SSL/TLS automàticament mitjançant ACME, activa HTTP/2 i HTTP/3 per defecte i té una configuració declarativa breu. Nginx requereix certbot i més configuració manual per obtenir el mateix resultat.
Necessito Kubernetes?
No per a la majoria de llocs web. Docker Compose en un VPS gestiona de manera fiable un lloc web o uns quants serveis. Kubernetes només esdevé útil amb desenes de nodes i escalat automàtic agressiu.
Com funciona el desplegament?
GitHub Actions construeix una imatge nova, l'arrenca al costat de l'antiga, executa una comprovació d'estat i després canvia el trànsit. Si la comprovació d'estat falla en 60 segons, es fa automàticament una reversió a la versió anterior.
Quin monitoratge recomaneu?
Grafana + Prometheus per a mètriques (latència, taxa d'errors) i Loki per a registres agregats, amb alertes a Slack/correu. Per a la disponibilitat externa afegim un servei independent com Better Uptime.