Traefik v3: Der Reverse Proxy für Docker-Infrastruktur — Setup, Let’s Encrypt und Best Practices
Jede Self-Hosted-Infrastruktur braucht einen Reverse Proxy. Er routet eingehenden Traffic an die richtigen Container, terminiert SSL und bietet Middleware für Rate Limiting, Basic Auth und mehr. Traefik v3 ist dafür gebaut: automatische Service-Discovery per Docker Labels, Let’s Encrypt out of the box, und eine aktive Community mit über 62.000 GitHub Stars und 3,4 Milliarden Docker Hub Pulls.
In diesem Artikel zeigen wir das komplette Setup — von der Grundkonfiguration bis zu fortgeschrittenen Middleware-Patterns. Wenn Sie Ihren Server grundsätzlich absichern möchten, empfehlen wir unseren Artikel über Docker-Server härten.
Traefik v3: Was ist neu?
Die aktuelle stabile Version ist v3.6 (April 2026). Traefik v2 wird parallel gepflegt (v2.11.x), erhält aber nur noch Security-Fixes. Die wichtigsten Neuerungen in v3:
- Entrypoint-Syntax: Vereinfachte Konfiguration mit
--entryPoints.web.address=:80 - TCP/UDP-Routing: Verbessertes Routing für nicht-HTTP-Protokolle
- Provider-Updates: Bessere Kubernetes-Unterstützung, Docker Swarm Improvements
- Performance: Optimierte Routing-Engine für geringere Latenz
Grundsetup: Docker Compose
services:
traefik:
image: traefik:v3.6
command:
# API/Dashboard
- --api.dashboard=true
# Entrypoints
- --entryPoints.web.address=:80
- --entryPoints.websecure.address=:443
# HTTP → HTTPS Redirect
- --entryPoints.web.http.redirections.entryPoint.to=websecure
- --entryPoints.web.http.redirections.entryPoint.scheme=https
# Docker Provider
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --providers.docker.network=traefik-proxy
# Let's Encrypt
- --certificatesresolvers.letsencrypt.acme.email=admin@example.com
- --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
- --certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- letsencrypt:/letsencrypt
networks:
- traefik-proxy
restart: unless-stopped
networks:
traefik-proxy:
external: true
volumes:
letsencrypt:
Wichtige Einstellung: exposedbydefault=false — nur Container mit dem Label traefik.enable=true werden exponiert. Ohne diese Einstellung wäre jeder Container im Netzwerk automatisch öffentlich erreichbar.
Netzwerk erstellen
docker network create traefik-proxy
Alle Container, die über Traefik erreichbar sein sollen, müssen diesem Netzwerk beitreten.
Services per Docker Labels konfigurieren
Das Besondere an Traefik: Die Konfiguration einzelner Services erfolgt über Docker Labels — nicht über zentrale Config-Dateien. Wenn ein Container startet, erkennt Traefik ihn automatisch.
services:
webapp:
image: myapp:latest
labels:
- traefik.enable=true
- traefik.http.routers.webapp.rule=Host(`app.example.com`)
- traefik.http.routers.webapp.entrypoints=websecure
- traefik.http.routers.webapp.tls.certresolver=letsencrypt
- traefik.http.services.webapp.loadbalancer.server.port=8080
networks:
- traefik-proxy
Traefik holt automatisch ein Let’s-Encrypt-Zertifikat für app.example.com und leitet HTTPS-Traffic an Port 8080 des Containers weiter.
Let’s Encrypt: Drei Challenge-Typen
HTTP-01 (Standard)
Port 80 muss von außen erreichbar sein. Einfachste Methode, funktioniert für einzelne Domains.
- --certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web
TLS-ALPN-01
Port 443 muss erreichbar sein. Vorteil: Port 80 kann geschlossen bleiben.
- --certificatesresolvers.letsencrypt.acme.tlschallenge=true
DNS-01 (für Wildcard-Zertifikate)
Die einzige Methode für Wildcard-Zertifikate (*.example.com). Benötigt API-Zugang zum DNS-Provider. Traefik unterstützt via lego-Bibliothek u. a. Cloudflare, Route53, Hetzner DNS:
- --certificatesresolvers.letsencrypt.acme.dnschallenge=true
- --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare
environment:
- CF_API_EMAIL=admin@example.com
- CF_DNS_API_TOKEN=${CF_TOKEN}
Hinweis: Ein Wildcard-Zertifikat deckt nicht die Root-Domain ab. *.example.com gilt für app.example.com, aber nicht für example.com selbst — dafür brauchen Sie einen zusätzlichen SAN-Eintrag.
Middleware: Security-Layer hinzufügen
Traefik-Middlewares modifizieren Requests zwischen Entrypoint und Service. Die wichtigsten für Self-Hosting:
Rate Limiting
labels:
- traefik.http.middlewares.ratelimit.ratelimit.average=100
- traefik.http.middlewares.ratelimit.ratelimit.burst=50
- traefik.http.routers.webapp.middlewares=ratelimit
Token-Bucket-Algorithmus: 100 Requests pro Sekunde im Durchschnitt, Burst bis 50.
Basic Auth
# Passwort-Hash generieren:
# htpasswd -nb admin sicheres_passwort
labels:
- traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$...
- traefik.http.routers.dashboard.middlewares=auth
Ideal für Admin-Panels, Monitoring-Dashboards und interne Tools.
IP-Whitelist
labels:
- traefik.http.middlewares.ipallow.ipallowlist.sourcerange=10.0.0.0/8,192.168.1.0/24
- traefik.http.routers.admin.middlewares=ipallow
Kombiniert mit einem WireGuard-VPN können Sie Admin-Interfaces nur über VPN erreichbar machen.
Security Headers
labels:
- traefik.http.middlewares.secure.headers.stsSeconds=31536000
- traefik.http.middlewares.secure.headers.stsIncludeSubdomains=true
- traefik.http.middlewares.secure.headers.contentTypeNosniff=true
- traefik.http.middlewares.secure.headers.frameDeny=true
- traefik.http.middlewares.secure.headers.browserXssFilter=true
Routing-Regeln: Mehr als nur Hostname
Traefik unterstützt flexible Routing-Regeln:
- Host-basiert:
Host(`example.com`) - Pfad-basiert:
PathPrefix(`/api`) - Kombination:
Host(`example.com`) && PathPrefix(`/api`) - Header-basiert:
Headers(`X-Custom`, `value`)
Die Priorität wird automatisch berechnet (längste Regel = höchste Priorität), kann aber manuell überschrieben werden.
Dashboard absichern
Das Traefik-Dashboard zeigt alle Routes, Services und Middlewares. Es sollte nie öffentlich erreichbar sein:
services:
traefik:
labels:
- traefik.enable=true
- traefik.http.routers.dashboard.rule=Host(`traefik.example.com`)
- traefik.http.routers.dashboard.service=api@internal
- traefik.http.routers.dashboard.entrypoints=websecure
- traefik.http.routers.dashboard.tls.certresolver=letsencrypt
- traefik.http.routers.dashboard.middlewares=auth,ipallow
Praxis-Beispiel: Mehrere Services
Ein typisches Setup mit WordPress, Gitea und Vaultwarden hinter Traefik:
services:
wordpress:
image: wordpress:6.7-php8.3-fpm
labels:
- traefik.enable=true
- traefik.http.routers.wp.rule=Host(`www.example.com`)
- traefik.http.routers.wp.tls.certresolver=letsencrypt
networks:
- traefik-proxy
- wp-internal
gitea:
image: docker.gitea.com/gitea:latest
labels:
- traefik.enable=true
- traefik.http.routers.git.rule=Host(`git.example.com`)
- traefik.http.routers.git.tls.certresolver=letsencrypt
networks:
- traefik-proxy
- git-internal
vaultwarden:
image: vaultwarden/server:latest
labels:
- traefik.enable=true
- traefik.http.routers.vault.rule=Host(`vault.example.com`)
- traefik.http.routers.vault.tls.certresolver=letsencrypt
networks:
- traefik-proxy
- vault-internal
Jeder Service hat sein eigenes internes Netzwerk für die Datenbank-Kommunikation und teilt sich das traefik-proxy-Netzwerk für den eingehenden Traffic.
Häufige Fehler
Container nicht im traefik-proxy Netzwerk
Symptom: 502 Bad Gateway. Traefik kann den Container nicht erreichen. Lösung: networks: - traefik-proxy zum Service hinzufügen.
acme.json Berechtigungen
Let’s Encrypt speichert Zertifikate in acme.json. Die Datei muss Berechtigung 600 haben. Bei falschen Berechtigungen verweigert Traefik den Start.
Falscher Port erkannt
Wenn ein Container mehrere Ports exponiert, weiß Traefik nicht, welchen er nutzen soll. Lösung: traefik.http.services.app.loadbalancer.server.port=8080 explizit setzen.
Managed Traefik: Wir konfigurieren Ihren Reverse Proxy
Traefik ist mächtig — aber die Konfiguration über Labels kann bei vielen Services komplex werden. Bei netzspitze.tech ist Traefik v3 das Herzstück jeder Managed-Infrastruktur:
- Automatische SSL-Zertifikate für alle Ihre Domains
- Security-Middleware (Rate Limiting, Headers, IP-Whitelist)
- Monitoring der Traefik-Instanz mit Prometheus + Grafana
- Docker-Socket-Proxy für erhöhte Sicherheit
- Wildcard-Zertifikate mit DNS-Challenge auf Wunsch
Jetzt Beratungstermin buchen — wir richten Ihre Routing-Infrastruktur ein.