Wenn Sie mehrere Webdienste auf einem einzigen Server verwalten, müssen Sie früher oder später das Problem des Reverse Proxy lösen. Nach dem Ausprobieren verschiedener Lösungen bin ich zu Traefik als in Docker integriertem Reverse Proxy gewechselt — eine der besten Infrastrukturentscheidungen der letzten Jahre. In diesem Artikel berichte ich von meiner konkreten Erfahrung, ausgehend von der Konfiguration, die ich in der Produktion auf diesem Server verwende.
Was ist Traefik und warum als Reverse Proxy für Docker wählen
Traefik ist ein moderner Reverse Proxy und Load Balancer, der nativ für containerisierte Umgebungen entwickelt wurde. Im Gegensatz zu manuell konfigurierten Nginx oder Apache integriert sich Traefik direkt mit Docker und aktualisiert seine Konfiguration automatisch, wenn ein Container gestartet oder gestoppt wird.
- Zero-Touch-Konfiguration: Einfach Labels zum Docker-Container hinzufügen, keine separaten Konfigurationsdateien
- Automatisches SSL mit Let’s Encrypt: Zertifikate werden ohne manuelle Eingriffe generiert und erneuert
- Integriertes Web-Dashboard zur Überwachung
- Native Unterstützung für Docker, Kubernetes, Consul
- Leistungsstarke Middlewares: Weiterleitungen, Authentifizierung, Rate Limiting, Komprimierung
Meine Architektur mit Traefik und Docker
Mein Server betreibt mehrere Dienste, alle über Docker Compose orchestriert. Traefik ist der einzige Container, der Ports nach außen öffnet und als einziger Eintrittspunkt für den gesamten Datenverkehr dient.
- Traefik — der Reverse Proxy, exponiert auf Ports 80 und 443
- WordPress (dieser Blog) — erreichbar unter
rogue1.it - Verschiedene interne Dienste — jeder auf eigener Subdomain
- Datenbanken — nicht nach außen exponiert
Traefik-Konfiguration mit Docker Compose
Entrypoints: die Listening-Ports
command:
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
Docker-Provider: Auto-Discovery
Der Parameter --providers.docker=true aktiviert den Docker-Provider: Traefik verbindet sich mit dem Docker-Socket und überwacht in Echtzeit aktive Container.
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
Automatisches SSL mit Let’s Encrypt
- "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
- "--certificatesresolvers.letsencrypt.acme.email=sie@email.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
Routing mit Docker-Labels
labels:
- "traefik.enable=true"
- "traefik.http.routers.myapp-http.rule=Host(`example.com`)"
- "traefik.http.routers.myapp-http.entrypoints=web"
- "traefik.http.routers.myapp-http.middlewares=myapp-https-redirect"
- "traefik.http.middlewares.myapp-https-redirect.redirectscheme.scheme=https"
- "traefik.http.middlewares.myapp-https-redirect.redirectscheme.permanent=true"
- "traefik.http.routers.myapp.rule=Host(`example.com`)"
- "traefik.http.routers.myapp.entrypoints=websecure"
- "traefik.http.routers.myapp.tls=true"
- "traefik.http.routers.myapp.tls.certresolver=letsencrypt"
- "traefik.http.services.myapp.loadbalancer.server.port=80"
Das Traefik-Dashboard
- "traefik.http.routers.traefik.rule=Host(`traefik.example.com`)"
- "traefik.http.routers.traefik.service=api@internal"
- "traefik.http.routers.traefik.middlewares=auth"
- "traefik.http.middlewares.auth.basicauth.users=IHRUSER:BCRYPT_HASH"
Wichtig: In docker-compose müssen $-Symbole als $$ escaped werden.
Vor- und Nachteile nach Monaten im Produktionsbetrieb
Vorteile
- Neuen Dienst hinzufügen erfordert nur Labels in docker-compose
- SSL-Zertifikate sind nie abgelaufen, Erneuerung vollständig automatisch
- Dashboard macht Infrastrukturzustand sofort sichtbar
- Sehr detaillierte Traefik-Logs vereinfachen Debugging
Nachteile
- Label-Syntax kann bei komplexen Konfigurationen ausführlich werden
- Das Escaping von
$in Labels ist eine häufige Fehlerquelle - Sehr angepasste Konfigurationen erfordern zusätzliche statische Dateien
Fazit
Die Verwendung von Traefik als in Docker integriertem Reverse Proxy hat die Verwaltung meiner Infrastruktur erheblich vereinfacht. Der Configuration-as-Code-Ansatz über Docker-Labels, die automatische SSL-Verwaltung und das Überwachungs-Dashboard machen es zur idealen Wahl für containerisierte Umgebungen.








