Traefik Reverse Proxy Setup
Dieses Repository enthält ein vorkonfiguriertes Setup für den Betrieb eines Traefik-Reverse-Proxys in einer Docker-Umgebung. Es ist für den Einsatz mit mehreren selbstgehosteten Services gedacht (z. B. NAS-Dienste, Monitoring, Pi-hole etc.), die per Subdomain über HTTPS erreichbar gemacht werden sollen.
Verzeichnisstruktur
traefik/
├── docker-compose.yml # Docker-Setup für Traefik
├── traefik.yml # Statische Konfiguration von Traefik
├── dynamic/ # Dynamische Konfigurationen (pro Service-Gruppe)
│ ├── cachyos-services.yml
│ ├── monitoring-services.yml
│ ├── nas-services.yml
│ └── pihole-config.yml
└── letsencrypt/
└── acme.json # Zertifikatsdatenbank von Let's Encrypt (automatisch erstellt)
Voraussetzungen
- Docker und Docker Compose installiert
- Eine Domain mit passenden DNS-Einträgen (z. B.
*.domain.tld) - Zugriff auf Ports 80 und 443
- DNS-01 oder HTTP-01 Challenge via Let's Encrypt
- Ein dediziertes Netzwerk (
traefik) für angebundene Container
Konfiguration
1. traefik.yml
Definiert die statischen Einstellungen von Traefik, z. B.:
- Logging
- EntryPoints (
:80,:443) - Let's Encrypt Konfiguration
- API Dashboard
2. docker-compose.yml
Startet den Traefik-Container mit den nötigen Mounts und Umgebungsvariablen. Wichtig:
- Das
letsencrypt/acme.json-File muss existieren undchmod 600gesetzt sein. - Externe Container müssen mit dem gleichen Docker-Netzwerk (
traefik) verbunden werden.
3. dynamic/*.yml
Dynamische Konfigurationen für Services. Jede Datei enthält:
- Service-Labels (Router, Middleware, TLS)
- Weiterleitungen, Redirects, Authentifizierung etc.
Beispiel:
http:
routers:
my-service:
rule: "Host(`example.domain.tld`)"
service: "my-service"
entryPoints: ["websecure"]
tls:
certResolver: "letsencrypt"
Nutzung
-
Repository klonen oder in dein Projektverzeichnis übernehmen:
git clone https://github.com/dein-benutzer/traefik-setup.git cd traefik-setup/traefik -
ACME-Datei für Let's Encrypt vorbereiten:
touch letsencrypt/acme.json chmod 600 letsencrypt/acme.json -
Traefik starten:
docker compose up -dDas Traefik-Dashboard ist dann erreichbar unter:
https://traefik.deine-domain.tld/dashboard/(Domain ggf. anpassen)
Container für eigene Services anbinden
Eigene Container auf dem gleichen host müssen in deren docker-compose.yml folgendermaßen ergänzt werden:
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.meinservice.rule=Host(`service.deine-domain.tld`)"
- "traefik.http.routers.meinservice.entrypoints=websecure"
- "traefik.http.routers.meinservice.tls.certresolver=letsencrypt"
Außerdem muss der Container dem gemeinsamen Traefik-Netzwerk beitreten:
networks:
traefik:
external: true
Tipp: Du kannst neue Regeln auch in einer der
dynamic/*.ymlDateien hinterlegen, z. B. wenn du Dienste nicht direkt mit Labels versehen möchtest.
Hinweise
-
Achte darauf, dass Ports
80und443öffentlich erreichbar sind (für die HTTP-01-Challenge). -
Für Basic Auth kannst du Zugangsdaten mit
htpasswdgenerieren:htpasswd -nb deinbenutzer deinpasswort -
Die dynamischen YML-Dateien können logisch nach Servicegruppen getrennt werden, z. B.:
monitoring-services.ymlnas-services.ymlcachyos-services.yml
Logs & Debugging
-
Live-Logs anzeigen:
docker compose logs -f -
Weiterleitungen testen:
curl -v https://deinservice.deine-domain.tld
Sicherheit
- Die Datei
letsencrypt/acme.jsonenthält vertrauliche TLS-Zertifikatsdaten – sichere sie entsprechend. - Für öffentliche Dienste empfiehlt sich der Einsatz von Authentifizierungsmiddleware (z. B. Basic Auth oder OAuth2).