Was du brauchst

Du brauchst einen Server mit Docker und Docker Compose. Für HTTPS sollte eine Domain per DNS auf die Server-IP zeigen, zum Beispiel demo.example.com.

1. Projektordner anlegen

mkdir traefik-sample
cd traefik-sample
mkdir letsencrypt

2. Docker Compose Datei erstellen

Die Beispielseite nutzt den offiziellen traefik/whoami Container. Er zeigt Request-Informationen an und ist ideal, um Traefik-Routing zu testen.

services:
  traefik:
    image: traefik:v3.0
    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
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./letsencrypt:/letsencrypt
    restart: unless-stopped

  sample:
    image: traefik/whoami:v1.10
    labels:
      - traefik.enable=true
      - traefik.http.routers.sample.rule=Host(`demo.example.com`)
      - traefik.http.routers.sample.entrypoints=websecure
      - traefik.http.routers.sample.tls.certresolver=letsencrypt
      - traefik.http.services.sample.loadbalancer.server.port=80
    restart: unless-stopped

Ersetze admin@example.com durch deine E-Mail-Adresse und demo.example.com durch deine echte Domain.

3. Starten

docker compose up -d

Rufe danach https://demo.example.com auf. Wenn DNS, Firewall und Ports stimmen, siehst du die Whoami-Ausgabe.

4. Häufige Fehler

  • Port 80 oder 443 ist bereits durch nginx, Apache oder einen anderen Container belegt.
  • Die Domain zeigt noch nicht auf die richtige Server-IP.
  • Die Firewall blockiert eingehende HTTP- oder HTTPS-Verbindungen.
  • Das Docker Socket Volume fehlt, dadurch erkennt Traefik die Container-Labels nicht.

5. Nächster Schritt

Wenn die Sample Page funktioniert, kannst du den sample Service durch deine echte App ersetzen. Wichtig sind vor allem traefik.enable=true, die Host-Regel und der korrekte interne Container-Port.