Traefik Reverse Proxy für Docker-Services: praxisnahe Produktionskonfiguration

Wenn mehrere Docker-Services auf einem Host laufen, wird Port-Management schnell unübersichtlich. Traefik löst das Problem als dynamischer Reverse Proxy: Services werden per Labels erkannt und Anfragen automatisch geroutet.

Diese Anleitung zeigt eine produktionsnahe Basis mit automatischem TLS, sauberem Routing und einem sicheren Dashboard-Konzept.

Architekturüberblick

Ein typisches Setup enthält:

  • Einen externen Einstiegspunkt auf Port 80/443
  • Ein internes Docker-Netzwerk für Traefik und Apps
  • Service-spezifische Labels für Hostnamen, Middleware und Zielport
  • Einen ACME-Resolver für automatisches HTTPS

Traefik überwacht Docker-Events und aktualisiert Routen ohne manuelle Reloads. Das reduziert Betriebsaufwand deutlich.

1) Gemeinsames Netzwerk erstellen

docker network create edge

Nutze dieses Netzwerk für Traefik und alle veröffentlichten Anwendungscontainer.

2) Traefik mit Docker Compose deployen

Beispiel docker-compose.yml:

services:
  traefik:
    image: traefik:v3.1
    container_name: traefik
    restart: unless-stopped
    command:
      - --providers.docker=true
      - --providers.docker.exposedbydefault=false
      - --entrypoints.web.address=:80
      - --entrypoints.websecure.address=:443
      - --certificatesresolvers.letsencrypt.acme.email=admin@example.com
      - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
      - --certificatesresolvers.letsencrypt.acme.httpchallenge=true
      - --certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web
      - --api.dashboard=true
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./letsencrypt:/letsencrypt
    networks:
      - edge

networks:
  edge:
    external: true

ACME-Datei mit restriktiven Rechten erstellen:

mkdir -p letsencrypt
touch letsencrypt/acme.json
chmod 600 letsencrypt/acme.json

3) App per Labels routen

Beispiel-Service:

services:
  app:
    image: ghcr.io/example/myapp:latest
    restart: unless-stopped
    networks:
      - edge
    labels:
      - traefik.enable=true
      - traefik.http.routers.myapp.rule=Host(`app.example.com`)
      - traefik.http.routers.myapp.entrypoints=websecure
      - traefik.http.routers.myapp.tls.certresolver=letsencrypt
      - traefik.http.services.myapp.loadbalancer.server.port=8080

Der DNS-Eintrag app.example.com muss auf die öffentliche Server-IP zeigen.

4) Betriebsendpunkte absichern

Dashboard niemals ohne Auth veröffentlichen. Bei Bedarf schützen:

labels:
  - traefik.http.middlewares.admin-auth.basicauth.users=admin:$$apr1$$...
  - traefik.http.routers.traefik.rule=Host(`traefik.example.com`)
  - traefik.http.routers.traefik.service=api@internal
  - traefik.http.routers.traefik.entrypoints=websecure
  - traefik.http.routers.traefik.tls.certresolver=letsencrypt
  - traefik.http.routers.traefik.middlewares=admin-auth

5) Härtung für Produktion

  • exposedByDefault=false aktiv halten
  • Docker-Socket nur lesbar binden
  • Firewall auf notwendige Ports beschränken
  • Rate-Limits für öffentliche Endpunkte setzen
  • Security-Header über Middleware aktivieren

Beispiel für sichere Header:

- traefik.http.middlewares.secure-headers.headers.stsSeconds=31536000
- traefik.http.middlewares.secure-headers.headers.browserXssFilter=true
- traefik.http.middlewares.secure-headers.headers.contentTypeNosniff=true

Binde die Middleware an alle relevanten Router.

Prüf-Checkliste

docker ps
docker logs traefik --tail=100
curl -I https://app.example.com

Erwartetes Ergebnis:

  • Gültiges Zertifikat ausgestellt
  • HTTP/2 200 (oder erwarteter App-Status)
  • Keine Zertifikatsfehler im Browser

Fazit

Traefik ist eine starke Wahl für Docker-zentrierte Umgebungen mit häufigen Änderungen. Labelbasiertes Routing plus automatisches TLS sorgen für weniger manuelle Proxy-Pflege und stabileren Betrieb.

Die größten Zuverlässigkeitsgewinne kommen durch Netzsegmentierung, geschütztes Dashboard und klare Middleware-Policies pro Anwendung.