Integration der Features von zwei Traefik-Installationen (server-erde + server-msg) in eine universelle, wartungsfreundliche Konfiguration.
- ✅ Mailcow ACME Challenge Router - Ermöglicht Let's Encrypt Zertifikate über Traefik
- Router:
mailcow-acme-challenge(Port 80, Priority 1000) - Service:
mailcow-acme→http://mailcow-nginx-mailcow-1:8080 - Domains: 11 vorkonfigurierte Mailcow-Domains (anpassbar in
traefik-dynamic.yaml)
- Router:
- ✅ Mailcow Dokumentation in
.envund.env.example - ✅ Netzwerk-Hinweis in
docker-compose.yaml
- ✅ Ping Router - Health Check via
/pingEndpoint - ✅ RESTART Env-Variable - Flexibles Restart-Verhalten konfigurierbar (default:
unless-stopped) - ✅ Trusted IPs - Sicher konfiguriert (nur
127.0.0.1/32)- Keine privaten Netze für maximale Sicherheit
- Verhindert IP-Spoofing durch kompromittierte Container
- 🔄 Access Log Filter beibehalten - Loggt nur Fehler (400-599)
- Warum: Produktionsoptimiert - 95% weniger Disk I/O
- Vorteil: Fokus auf relevante Events, schnelleres Debugging
- 🔄 Restart Policy von hardcoded →
${RESTART:-unless-stopped} - 🔄 Mailcow-Netzwerk-Hinweis hinzugefügt
- 🔄
RESTARTVariable hinzugefügt - 🔄 Mailcow Integration Sektion hinzugefügt
Eine Konfiguration für alle Server:
- ✅ Unterschiede nur über
.envsteuerbar - ✅ Mailcow-Features auf allen Servern verfügbar (inaktiv wenn Container nicht existiert)
- ✅ Alle Middlewares über Labels steuerbar
- ✅ Einfachere Wartung (nur ein Stack zu pflegen)
Konfigurierte Mailcow-Domains:
- autodiscover.clicklocal.de / autoconfig.clicklocal.de
- autodiscover.familie-saeum.de / autoconfig.familie-saeum.de
- autodiscover.lichte-kraft.eu / autoconfig.lichte-kraft.eu
- autodiscover.web-seo-consulting.eu / autoconfig.web-seo-consulting.eu
- mail.web-seo-consulting.eu
- autodiscover.wunschschreiner.eu / autoconfig.wunschschreiner.eu
Anpassung: Domains können in configs/traefik-dynamic.yaml Zeile 134 angepasst werden.
Um diese Konfiguration auf einem zweiten Server zu nutzen:
-
.envanpassen:HOSTRULE=Host(`traefik.DEIN-SERVER.web-seo-consulting.eu`) -
Mailcow-Domains anpassen (falls abweichend):
configs/traefik-dynamic.yamlZeile 134 editieren
-
Netzwerk erstellen & deployen:
docker network create traefik_proxy_network docker compose up -d
Erstes produktionsfertiges Release mit vollständiger CI/CD-Pipeline und mehrsprachiger Dokumentation.
- ✅ GitHub Actions CI Pipeline - Automatische Tests bei Push/PR
- Docker Compose Validierung
- YAML Linting
- Security Scan (Gitleaks)
- Markdown Linting
- Config Tests
- ✅ Release Workflow - Automatische Release-Erstellung bei Tag
- ✅ .gitattributes - Saubere Exports ohne Dev-Files
- ✅ .markdownlint.json - Markdown-Qualitätssicherung
- ✅ README.en.md - Englische Dokumentation
- ✅ README.fr.md - Französische Dokumentation
- ✅ LICENSE - GPL-3.0 Lizenz
- ✅ Support-Badges - Buy Me a Coffee, GitHub Sponsors, PayPal
- ✅ Passwort-Hashes durch Platzhalter ersetzt in traefik-dynamic.yaml
- ✅ Legacy dashboard-auth Middleware als deprecated markiert
- ✅
security-headers@file- HSTS, X-Frame-Options, CSP, etc. - ✅
compression@file- Gzip/Brotli Kompression - ✅
in-flight-limit@file- DoS-Schutz (max 100 gleichzeitige Requests)
- ✅
.gitignore- Schützt .env, logs/, volumes/ vor Git - ✅
.env.example- Template für neue Deployments - ✅
LABELS-CHECKLIST.md- Migration Guide für alle Projekte - ✅
DEPLOYMENT.md- Schritt-für-Schritt Deployment-Anleitung - ✅
CHANGELOG.md- Diese Datei
- ✅ Dashboard via Labels statt hardcoded Router
- ✅ Metrics-Endpoint via Labels
- ✅ HTTP → HTTPS Redirect für Dashboard
- ✅ TLS 1.3 für Dashboard & Metrics
- 🔄 Image von
traefik:latest→traefik:v3.2(pinned version) - 🔄 Docker Socket jetzt read-only (
:ro) - 🔄 Volumes jetzt mit expliziten Permissions (
:rw) - 🔄 Labels umstrukturiert für Dashboard & Metrics
- 🔄 Bessere Kommentare & Struktur
- 🔄 Access Log von stdout →
/var/log/traefik-access.log - 🔄 Access Log Filterung (nur 4xx/5xx Errors)
- 🔄 Let's Encrypt Email jetzt in Config (vorher nur command)
- 🔄
sendAnonymousUsage: false(Privacy) - 🔄 Trusted IPs kommentiert (nur localhost default)
- 🔄 Bessere Struktur & Kommentare
- 🔄 Ping-Router entfernt (nicht benötigt mit manualRouting)
- 🔄 Alle Middlewares kategorisiert & kommentiert
- 🔄 Bessere Struktur
/var/run/docker.sock ist weiterhin gemountet
- Warum: Für Docker Provider notwendig
- Risiko: Bei Traefik-Kompromittierung = Host-Kompromittierung
- TODO: Docker Socket Proxy implementieren (z.B. tecnativa/docker-socket-proxy)
- Betrifft: Sehr alte Browser (IE11, Android < 10)
- Vorteil: Maximale Sicherheit
/var/log/traefik-access.log
- Warum: Bessere Kontrolle, Rotation, weniger Docker-Log-Spam
- Beachten: Logs müssen manuell geleert werden (oder via Rotation)
- ✅ Security Headers - HSTS, X-Frame-Options, CSP, etc.
- ✅ Access Log Filterung - Nur relevante Requests loggen
- ✅ Docker Socket read-only - Reduziert Schreibzugriff
- ✅ Pinned Version - Keine unerwarteten Updates
- ✅ Let's Encrypt Email - Korrekte Konfiguration
- ✅ Anonymous Usage Tracking aus - Privacy
- ✅ TLS 1.3 only - Maximale Verschlüsselung
- ✅
.gitignore- Keine Secrets in Git
- ✅ Compression Middleware - Gzip/Brotli für alle Projekte
- ✅ In-Flight Limiting - Verhindert Überlastung
- ✅ Access Log Filterung - Weniger I/O
- ✅ HTTP/3 Support - Bereits aktiviert (beibehalten)
- ✅ LABELS-CHECKLIST.md - 4 Templates für verschiedene Use-Cases
- ✅ DEPLOYMENT.md - Komplette Deployment-Anleitung
- ✅ Inline-Kommentare - Alle Configs sind jetzt kommentiert
- ✅ .env.example - Template für neue Server
- ❌ Ping-Router aus traefik-dynamic.yaml (nicht benötigt)
- ❌ Breite Trusted IPs Ranges (10.0.0.0/8, etc.)
- ❌
latestTag bei Docker Image - ❌ Hardcoded Dashboard-Router (jetzt via Labels)
- Docker Socket Proxy implementieren
- .env aus Git entfernen (
.gitignoreverwenden) - Dashboard-Passwort ändern (siehe DEPLOYMENT.md)
- Projekte migrieren (siehe LABELS-CHECKLIST.md)
- Backup-Script für
volumes/Traefik.jsonerstellen - Fail2Ban für automatisches IP-Banning einrichten
- Prometheus für Metrics-Collection aufsetzen
- Grafana Dashboard für Traefik-Metriken
- Lokale GeoIP-Datenbank statt geojs.io API
- Custom Error Pages für 4xx/5xx Errors
- Health Checks für alle Services
- Traefik Pilot für zentrales Monitoring (optional)
- ✅ Neue Configs deployen
- ✅ Testen mit
DEPLOYMENT.md - ✅ Validieren dass alles funktioniert
- Shopware Labels aktualisieren (siehe LABELS-CHECKLIST.md)
- JTL Labels aktualisieren + HTTP-Router hinzufügen
- Matomo Labels aktualisieren + HTTP-Router hinzufügen
- Weitere Projekte nach Templates migrieren
- Docker Socket Proxy implementieren
- Fail2Ban einrichten
- Monitoring aufsetzen
Checklist:
- Dashboard erreichbar: https://traefik.server-erde.web-seo-consulting.eu/dashboard/
- HTTP → HTTPS funktioniert
- Security Headers gesetzt
- TLS 1.3 only (TLS 1.2 blockiert)
- Metrics erreichbar: https://traefik.server-erde.web-seo-consulting.eu/metrics
- Keine Errors in Logs:
docker compose logs traefik | grep -i error - Let's Encrypt Zertifikate OK
Test-Commands siehe: DEPLOYMENT.md
- TLS 1.2 Clients - Nur TLS 1.3
- Unverschlüsselte Requests - HTTP wird zwingend zu HTTPS redirected
- Requests ohne Host-Header - SNI Strict Mode
- JTL & Matomo - HTTP-Router hinzufügen
- Alle Projekte -
security-headers@filehinzufügen (empfohlen) - Shopware - Middleware-Chain erweitern
Falls Probleme auftreten:
# Stoppen
docker compose down
# Git Rollback
git checkout HEAD~1 -- configs/
git checkout HEAD~1 -- docker-compose.yaml
# Starten
docker compose up -dWichtig: Rollback innerhalb 90 Tage möglich (Let's Encrypt Rate Limits!)
Basiert auf: