Cloud, Docker & DevOps — schnelle, zuverlässige Deployments
Wir containerisieren alle Anwendungen mit Docker, orchestrieren sie mit Docker Compose (oder Kubernetes bei Enterprise-Projekten), richten Caddy als Reverse Proxy mit automatischem SSL ein und automatisieren den gesamten Deployment-Zyklus über GitHub Actions — vom Commit bis zur Produktion.
Containerisierung mit Docker und Docker Compose
Jeder Dienst hat sein eigenes mehrstufiges Dockerfile: eine Build-Stufe, die Abhängigkeiten installiert und kompiliert, und eine minimale finale Stufe (distroless oder Alpine), die nur die nötigen Artefakte enthält. Ein typisches Next.js-Image bleibt unter 150 MB, ein FastAPI-Image unter 80 MB. Die Images werden bei jedem Merge auf main neu gebaut und semantisch getaggt (`v1.2.3` + `latest`).
Docker Compose beschreibt den gesamten Stack: Frontend, API, Datenbank, Redis und Worker. Sensible Variablen (Datenbankpasswort, API-Schlüssel, Stripe-Secret) liegen in einer `.env`, die von Git ausgeschlossen ist — niemals fest im Image. Health Checks in Compose stellen sicher, dass Abhängigkeiten bereit sind, bevor gestartet wird (Datenbank bereit → API startet → Frontend startet).
- Build-Cache mit `--mount=type=cache` — `npm ci` in unter 30 s in der CI
- Optimierte Layer-Reihenfolge: stabile Abhängigkeiten zuerst, dann der Quellcode
- Secrets-Verwaltung mit Docker Secrets oder HashiCorp Vault bei Enterprise-Projekten
- `restart: unless-stopped` + `docker compose up --no-deps` für atomare Deployments
Caddy — moderner Reverse Proxy mit automatischem SSL
Caddy 2.8 verwaltet SSL/TLS automatisch über ACME (Let's Encrypt oder ZeroSSL) — kein abgelaufenes Zertifikat, keine manuelle Konfiguration. HTTP/2 und HTTP/3 (QUIC) sind standardmäßig aktiv. Sicherheits-Header (HSTS, X-Frame-Options, CSP) werden global über wiederverwendbare Snippets gesetzt. Die deklarative Caddyfile-Konfiguration lässt sich diffen und wird in Git versioniert.
Rate Limiting, gzip-/brotli-Komprimierung und strukturiertes JSON-Logging aktivieren wir über native Caddy-Direktiven — ohne Nginx-Module oder aufwendige Apache-Konfiguration. Zugriffe auf sensible Pfade (`/admin`, `.env`, `.git`) beantwortet ein globales Sicherheits-Snippet mit 444 (keine Antwort).
- TLS-Konfiguration ausschließlich mit TLS 1.3 und modernen Cipher Suites
- On-Demand-TLS für Multi-Tenant-SaaS mit dynamischen Subdomains
- Reload ohne Downtime — `caddy reload` unterbricht keine aktiven Verbindungen
- Caddy-Logs → Loki → Grafana — Traffic-Analyse und Alarme bei Anomalien
GitHub Actions CI/CD und Monitoring
Die CI-Pipeline läuft bei jedem PR: Lint, Typprüfung, Unit-Tests, Bau des Docker-Images und Schwachstellenscan (Trivy). Bestehen alle Schritte, wird das Image in die Registry gepusht und automatisch auf Staging ausgerollt. Ein Merge auf main bedeutet automatisches Deployment in die Produktion mit anschließendem Health Check. Schlägt dieser innerhalb von 60 Sekunden fehl, erfolgt ein automatischer Rollback.
Für das Monitoring nutzen wir Grafana und Prometheus für Anwendungsmetriken (Latenz, Fehlerrate, Queue-Größe) sowie Loki für die Log-Aggregation. Alarme laufen über Slack oder E-Mail: Fehlerrate über 1 %, P95-Latenz über 500 ms, Festplatte über 85 % Auslastung. Das externe Uptime-Monitoring übernimmt Better Uptime — ein öffentliches SLA-Dashboard stellen wir auf Wunsch bereit.
- Trivy-Schwachstellenscan der Images — kritische CVEs blockieren das Deployment
- Dependabot mit Auto-Merge für Patch-Updates (setzt eine grüne CI voraus)
- Automatisches Datenbank-Backup in S3-kompatiblen Speicher (nächtlich, 30 Tage Aufbewahrung)
Vorteile und Grenzen
Vorteile
- Deployment mit automatischem Rollback bei fehlgeschlagenem Health Check.
- Automatisches SSL/TLS über Caddy — kein manuell abgelaufenes Zertifikat.
- Reproduzierbare Umgebung: dasselbe Docker-Image in Entwicklung, Staging und Produktion.
- Monitoring und Alarme (Grafana, Loki) — Probleme werden vor den Nutzern sichtbar.
Grenzen
- Docker Compose skaliert bei Multi-Node-Enterprise-Setups nicht wie Kubernetes.
- Das initiale CI/CD-Setup kostet Zeit und erfordert DevOps-Erfahrung.
- Images und Logs belegen Speicherplatz — regelmäßiges Aufräumen ist nötig.
- Vollständiges Monitoring (Prometheus + Grafana) bringt weitere zu pflegende Dienste mit sich.
Kurzes Fazit
Docker, Caddy und GitHub Actions sind die ideale Kombination für zuverlässige Deployments auf einem VPS oder wenigen Knoten. Bei Dutzenden Knoten mit aggressivem Auto-Scaling führt der Weg zu Kubernetes.
Technische Daten
| Fähigkeit | Grenze / Schwelle | Typischer Einsatz | |
|---|---|---|---|
| Orchestrierung | Docker Compose, kompletter Stack | Ein Knoten; mehrere Knoten erfordern Swarm oder K8s | VPS, kleine bis mittlere Projekte |
| Reverse Proxy | Caddy 2.8, HTTP/3, automatisches SSL | Sehr komplexe Regeln erfordern eine ausführliche Konfiguration | Mehrere Domains, Multi-Tenant |
| CI/CD | GitHub Actions, automatisiertes Deployment | CI-Minuten werden jenseits des Free-Tier abgerechnet | Automatisch vom Commit bis in die Produktion |
| Typische Kosten | VPS ab etwa 5 €/Monat | Monitoring und Backup verursachen Zusatzkosten | Von der einzelnen Website bis zum Multi-Brand-Betrieb |
Docker Compose im Vergleich zu Kubernetes
| Kriterium | Docker Compose | Kubernetes |
|---|---|---|
| Aufwand beim Setup | Gering | Hoch |
| Multi-Node-Skalierung / Auto-Scaling | Eingeschränkt (ein Knoten) | Ausgezeichnet |
| Geeignet für | VPS, kleine bis mittlere Projekte | Große Flotten, Enterprise |
Häufige Fragen
Warum Caddy und nicht Nginx?
Caddy verwaltet SSL/TLS automatisch über ACME, aktiviert HTTP/2 und HTTP/3 standardmäßig und kommt mit einer kurzen, deklarativen Konfiguration aus. Nginx benötigt für dasselbe Ergebnis Certbot und deutlich mehr manuelle Konfiguration.
Brauche ich Kubernetes?
Für die meisten Websites nicht. Docker Compose auf einem VPS betreibt eine Website oder einige Dienste zuverlässig. Kubernetes lohnt sich erst bei Dutzenden Knoten mit aggressivem Auto-Scaling.
Wie funktioniert ein Deployment?
GitHub Actions baut ein neues Image, startet es neben dem alten, führt einen Health Check aus und leitet dann den Traffic um. Schlägt der Health Check innerhalb von 60 Sekunden fehl, wird automatisch auf die vorherige Version zurückgerollt.
Welches Monitoring empfehlen Sie?
Grafana und Prometheus für Metriken (Latenz, Fehlerrate) sowie Loki für aggregierte Logs, mit Alarmen über Slack oder E-Mail. Für die externe Verfügbarkeitsüberwachung kommt ein unabhängiger Dienst wie Better Uptime hinzu.