Traefik Docker Anleitung 2026: Der ultimative Reverse Proxy
Traefik mit Docker einrichten für automatisches SSL, Service-Erkennung und Lastverteilung. Vollständige Anleitung für moderne Container-Deployments.
Traefik Docker Anleitung: Automatischer Reverse Proxy
Traefik ist der Cloud-native Reverse Proxy. Er erkennt Ihre Docker-Container automatisch und leitet den Datenverkehr an sie weiter — mit kostenlosen SSL-Zertifikaten.
Was ist Traefik?
Traefik sitzt vor Ihren Diensten:
Internet → Traefik → Container A (app.domain.com)
→ Container B (api.domain.com)
→ Container C (admin.domain.com)
Hauptfunktionen:
- Auto-Erkennung — Erkennt neue Container
- Auto-SSL — Let’s Encrypt Integration
- Lastverteilung — Mehrere Container pro Dienst
- Middleware — Authentifizierung, Ratenbegrenzung, Header
- Dashboard — Visuelle Dienstübersicht
Warum Traefik statt Nginx?
| Funktion | Traefik | Nginx |
|---|---|---|
| Docker-Integration | Nativ | Manuelle Konfiguration |
| Auto-SSL | Integriert | Certbot erforderlich |
| Service-Erkennung | Automatisch | Manuell |
| Konfiguration neu laden | Hot Reload | Neustart erforderlich |
| Lernkurve | Mittel | Niedriger |
| Leistung | Ausgezeichnet | Ausgezeichnet |
Traefik gewinnt in Docker-Umgebungen. Nginx für statische Konfigurationen (siehe unsere Nginx Reverse Proxy Anleitung).
VPS-Anforderungen
Traefik ist leichtgewichtig:
- 1 vCPU
- 512MB RAM (für Traefik selbst)
- Ports 80, 443
Ihre VPS-Spezifikationen hängen von Ihren Diensten ab, nicht von Traefik. Lesen Sie unseren Bester VPS für Docker Leitfaden für Empfehlungen zur Dimensionierung.
Grundlegende Einrichtung
Schritt 1: Netzwerk erstellen
docker network create traefik-public
Schritt 2: Traefik-Konfigurationsverzeichnis erstellen
mkdir -p /opt/traefik
cd /opt/traefik
Schritt 3: Docker Compose erstellen
# docker-compose.yml
version: '3.8'
services:
traefik:
image: traefik:v3.0
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik.yml:/traefik.yml:ro
- ./acme.json:/acme.json
- ./config:/config:ro
networks:
- traefik-public
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik.rule=Host(`traefik.yourdomain.com`)"
- "traefik.http.routers.traefik.entrypoints=websecure"
- "traefik.http.routers.traefik.tls.certresolver=letsencrypt"
- "traefik.http.routers.traefik.service=api@internal"
- "traefik.http.routers.traefik.middlewares=auth"
- "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$xxxxx"
networks:
traefik-public:
external: true
Schritt 4: Traefik-Konfiguration erstellen
# traefik.yml
api:
dashboard: true
insecure: false
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
network: traefik-public
file:
directory: /config
watch: true
certificatesResolvers:
letsencrypt:
acme:
email: you@yourdomain.com
storage: /acme.json
httpChallenge:
entryPoint: web
Schritt 5: Zertifikatsspeicher erstellen
touch acme.json
chmod 600 acme.json
mkdir config
Schritt 6: Dashboard-Passwort generieren
htpasswd -nb admin your-secure-password
# Ausgabe: admin:$apr1$...
# Verwenden Sie dies in docker-compose.yml und verdoppeln Sie die $-Zeichen
Schritt 7: Traefik starten
docker compose up -d
Dashboard aufrufen: https://traefik.yourdomain.com
Dienste hinzufügen
Beispiel: Nginx
# In einer separaten docker-compose.yml
version: '3.8'
services:
nginx:
image: nginx:alpine
container_name: nginx
restart: unless-stopped
networks:
- traefik-public
labels:
- "traefik.enable=true"
- "traefik.http.routers.nginx.rule=Host(`www.yourdomain.com`)"
- "traefik.http.routers.nginx.entrypoints=websecure"
- "traefik.http.routers.nginx.tls.certresolver=letsencrypt"
networks:
traefik-public:
external: true
Das war’s! Traefik erkennt den Container und:
- Leitet
www.yourdomain.comdorthin weiter - Holt automatisch ein SSL-Zertifikat
- Übernimmt die HTTPS-Terminierung
Beispiel: Node.js App
services:
api:
build: .
container_name: api
networks:
- traefik-public
labels:
- "traefik.enable=true"
- "traefik.http.routers.api.rule=Host(`api.yourdomain.com`)"
- "traefik.http.routers.api.entrypoints=websecure"
- "traefik.http.routers.api.tls.certresolver=letsencrypt"
- "traefik.http.services.api.loadbalancer.server.port=3000"
networks:
traefik-public:
external: true
Hinweis: loadbalancer.server.port gibt den Container-Port an.
Middleware
Basic Auth
labels:
- "traefik.http.middlewares.auth.basicauth.users=user:$$hashed$$password"
- "traefik.http.routers.admin.middlewares=auth"
Ratenbegrenzung
labels:
- "traefik.http.middlewares.ratelimit.ratelimit.average=100"
- "traefik.http.middlewares.ratelimit.ratelimit.burst=50"
- "traefik.http.routers.api.middlewares=ratelimit"
IP-Whitelist
labels:
- "traefik.http.middlewares.ipwhitelist.ipwhitelist.sourcerange=192.168.1.0/24,10.0.0.0/8"
- "traefik.http.routers.admin.middlewares=ipwhitelist"
Header
labels:
- "traefik.http.middlewares.security.headers.stsSeconds=31536000"
- "traefik.http.middlewares.security.headers.stsIncludeSubdomains=true"
- "traefik.http.middlewares.security.headers.contentTypeNosniff=true"
- "traefik.http.middlewares.security.headers.frameDeny=true"
Weiterleitung
labels:
- "traefik.http.middlewares.redirect.redirectregex.regex=^https://old.domain.com/(.*)"
- "traefik.http.middlewares.redirect.redirectregex.replacement=https://new.domain.com/$${1}"
Komprimierung
labels:
- "traefik.http.middlewares.compress.compress=true"
- "traefik.http.routers.web.middlewares=compress"
Mehrere Domains
Gleicher Container
labels:
- "traefik.http.routers.web.rule=Host(`domain1.com`) || Host(`domain2.com`)"
Mit Weiterleitung
labels:
- "traefik.http.routers.www.rule=Host(`www.domain.com`)"
- "traefik.http.routers.www.middlewares=redirect-to-apex"
- "traefik.http.middlewares.redirect-to-apex.redirectregex.regex=^https://www\\.(.+)"
- "traefik.http.middlewares.redirect-to-apex.redirectregex.replacement=https://$${1}"
Lastverteilung
Mehrere Container
services:
api:
image: myapi
deploy:
replicas: 3
labels:
- "traefik.enable=true"
- "traefik.http.routers.api.rule=Host(`api.domain.com`)"
Traefik verteilt die Last automatisch auf alle Replikate.
Sticky Sessions
labels:
- "traefik.http.services.api.loadbalancer.sticky.cookie=true"
- "traefik.http.services.api.loadbalancer.sticky.cookie.name=server_id"
Gesundheitsprüfungen
labels:
- "traefik.http.services.api.loadbalancer.healthcheck.path=/health"
- "traefik.http.services.api.loadbalancer.healthcheck.interval=10s"
Pfadbasiertes Routing
labels:
- "traefik.http.routers.api.rule=Host(`domain.com`) && PathPrefix(`/api`)"
- "traefik.http.routers.web.rule=Host(`domain.com`) && PathPrefix(`/`)"
Pfad-Präfix entfernen
labels:
- "traefik.http.middlewares.strip-api.stripprefix.prefixes=/api"
- "traefik.http.routers.api.middlewares=strip-api"
/api/users wird für das Backend zu /users.
Wildcard-Zertifikate
Für *.domain.com:
# traefik.yml
certificatesResolvers:
letsencrypt:
acme:
email: you@domain.com
storage: /acme.json
dnsChallenge:
provider: cloudflare
# docker-compose.yml
environment:
- CF_API_EMAIL=you@domain.com
- CF_API_KEY=your-api-key
Dann verwenden:
labels:
- "traefik.http.routers.web.tls.certresolver=letsencrypt"
- "traefik.http.routers.web.tls.domains[0].main=domain.com"
- "traefik.http.routers.web.tls.domains[0].sans=*.domain.com"
Dateibasierte Konfiguration
Für Nicht-Docker-Dienste verwenden Sie den Datei-Provider:
# /opt/traefik/config/external.yml
http:
routers:
external-service:
rule: "Host(`external.domain.com`)"
service: external-service
tls:
certResolver: letsencrypt
services:
external-service:
loadBalancer:
servers:
- url: "http://192.168.1.100:8080"
Traefik überwacht das Konfigurationsverzeichnis und lädt automatisch neu.
Metriken & Überwachung
Metriken aktivieren
# traefik.yml
metrics:
prometheus:
entryPoint: metrics
buckets:
- 0.1
- 0.3
- 1.2
- 5.0
entryPoints:
metrics:
address: ":8082"
Grafana Dashboard
Verwenden Sie die Dashboard-ID 11462 für Traefik-Metriken. Für eine vollständige Grafana-Überwachungseinrichtung lesen Sie unseren speziellen Leitfaden.
Zugriffsprotokolle
# traefik.yml
accessLog:
filePath: "/var/log/traefik/access.log"
format: json
filters:
statusCodes:
- "400-599"
bufferingSize: 100
Log-Verzeichnis einbinden:
volumes:
- ./logs:/var/log/traefik
Fehlerbehebung
Container wird nicht erkannt
- Netzwerk prüfen:
docker network inspect traefik-public
- Labels überprüfen:
docker inspect container_name | grep -A 50 Labels
- Prüfen Sie
traefik.enable=true
SSL funktioniert nicht
- ACME-Log prüfen:
docker logs traefik 2>&1 | grep -i acme
-
acme.json-Berechtigungen überprüfen (600)
-
Stellen Sie sicher, dass Port 80 für die HTTP-Challenge offen ist
502 Bad Gateway
- Prüfen Sie, ob der Container läuft
- Überprüfen Sie den Port in den Labels
- Container-Logs prüfen
Aktive Konfiguration anzeigen
Das Dashboard zeigt alle Router, Dienste und Middlewares. Alternativ:
curl http://localhost:8080/api/http/routers
Produktions-Checkliste
- Dashboard mit Authentifizierung geschützt
- acme.json hat 600-Berechtigungen
- Zugriffsprotokolle aktiviert
- Metriken zur Überwachung
- Gesundheitsprüfungen konfiguriert
- Ratenbegrenzung für öffentliche APIs
- Sicherheits-Header-Middleware
- Richtige Netzwerkisolierung
Bester VPS für Traefik
Traefik selbst ist winzig. Dimensionieren Sie nach Ihren Diensten:
| Anbieter | Plan | Preis | Am besten für |
|---|---|---|---|
| Hetzner | CX21 | €5,39 | 5-10 Dienste |
| Hostinger | KVM1 | $4,99 | Budget-Einrichtung |
| Vultr | VC2 | $12 | Globale Reichweite |
FAQ
Traefik vs Nginx Proxy Manager?
Traefik für Docker-native Setups. NPM für einfachere GUI-basierte Konfiguration.
Wie viele Dienste kann Traefik verarbeiten?
Hunderte problemlos. Es ist für Microservices im großen Maßstab konzipiert.
Ist Traefik sicher?
Ja. Setzen Sie die API nicht ohne Authentifizierung frei. Halten Sie es aktuell.
Kann ich von Nginx migrieren?
Ja. Eine schrittweise Migration ist möglich — betreiben Sie vorübergehend beide gleichzeitig.
Unterstützt Traefik HTTP/3?
Ja, seit v3.0. Aktivieren Sie es in der Entrypoint-Konfiguration.
Zusammenfassung
Traefik automatisiert das, was Sie in Nginx manuell konfigurieren würden:
| Aufgabe | Nginx | Traefik |
|---|---|---|
| Dienst hinzufügen | Konfiguration bearbeiten, neu laden | Labels hinzufügen |
| SSL erhalten | Certbot ausführen | Automatisch |
| Lastverteilung | Upstream konfigurieren | Automatisch |
| Dienst entfernen | Konfiguration bearbeiten, neu laden | Container stoppen |
Für Docker-Deployments ist Traefik die moderne Wahl. Einmal einrichten, Dienste für immer mit Labels hinzufügen. Für einen vollständigen Deployment-Workflow kombinieren Sie es mit Docker Compose.
Ready to get started?
Get the best VPS hosting deal today. Hostinger offers 4GB RAM VPS starting at just $4.99/mo.
Get Hostinger VPS — $4.99/mo// up to 75% off + free domain included
// related topics
// related guides
$1 VPS Hosting 2026: Cheapest VPS Servers Starting at $1/Month
Looking for $1 VPS hosting? Compare the cheapest VPS providers starting from $1-3/month. Real specs, no hidden fees, honest reviews of budget VPS options.
tutorialCaddy Reverse Proxy Guide 2026: Automatic HTTPS Made Easy
Set up Caddy as a reverse proxy with automatic HTTPS, zero-config SSL, and simple Caddyfile syntax. Complete VPS deployment guide.
tutorialCloudflare Tunnel VPS Guide 2026: Expose Services Without Opening Ports
Set up Cloudflare Tunnel on your VPS to expose web apps securely without opening ports or revealing your server IP. Complete guide with Docker and DNS config.
tutorialCoolify VPS Setup Guide 2026: Self-Hosted Vercel Alternative
Deploy Coolify on your VPS for a self-hosted Vercel/Netlify experience. Complete setup guide with Docker, SSL, and app deployments.
Andrius Putna
I am Andrius Putna. Geek. Since early 2000 in love tinkering with web technologies. Now AI. Bridging business and technology to drive meaningful impact. Combining expertise in customer experience, technology, and business strategy to deliver valuable insights. Father, open-source contributor, investor, 2xIronman, MBA graduate.
// last updated: February 8, 2026. Disclosure: This article may contain affiliate links.