Kostenvergleich Apps Preise Blog Termin buchen

Traefik v3: Der Reverse Proxy für Docker-Infrastruktur — Setup, Let’s Encrypt und Best Practices

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.

Bereit für eigene Infrastruktur?

15 Minuten Call – wir klären ob Self-Hosting für euch passt.

Termin buchen