Reverse Proxy mit Traefik:
Docker-Container auf dem Raspberry Pi über .local-Domains erreichenIn diesem Tutorial zeige ich dir Schritt für Schritt, wie du Traefik als Reverse Proxy auf deinem Raspberry Pi einrichtest.
DarkWolfCave.de
Mit dieser Konfiguration greifst du auf deine Docker-Container über benutzerfreundliche .local-Domains zu, statt komplizierte Portnummern zu verwenden. Die präzisen Anweisungen umfassen die vollständige Verzeichnisstruktur, alle notwendigen Docker Compose Dateien und die exakte Traefik-Konfiguration.
Ein besonderer Vorteil: Im Gegensatz zu anderen Reverse Proxy-Lösungen erkennt Traefik neue Docker-Container automatisch anhand der Labels, wodurch sich der Konfigurationsaufwand erheblich reduziert.
Die Anleitung enthält zudem spezifische Troubleshooting-Tipps für typische Fehlerquellen bei der Einrichtung des Reverse-Proxys in deinem Heimnetzwerk.
Einleitung
In diesem Artikel dokumentiere ich die Installation und Konfiguration von Traefik als Reverse Proxy auf dem Raspberry Pi mit Docker. Die Anleitung zeigt die exakte Einrichtung eines Systems, mit dem du deine Docker-Container über intuitive URLs wie grafana.local oder bookstack.local erreichst – eine praktische Alternative zu numerischen Ports.
Traefik funktioniert als HTTP-Reverse-Proxy mit spezifischer Docker-Integration. Der technische Hauptvorteil: Traefik überwacht die Docker-Socket-API und erkennt automatisch neue Container. Für jeden Container mit entsprechenden Labels generiert Traefik die Routing-Konfiguration ohne manuelle Eingriffe. Diese Funktionsweise unterscheidet sich von klassischen Reverse Proxies wie Nginx oder HAProxy, bei denen jeder neue Dienst eine Anpassung der Konfigurationsdateien erfordert.
Voraussetzungen
Für diese Implementierung benötigst du:
- Raspberry Pi 3 oder neuer (mindestens 2 GB RAM)
- Raspberry Pi OS Lite (64-Bit empfohlen bei Pi 4/400 oder neuer)
- Docker Engine 20.10.x oder neuer
- Docker Compose v2
- Pi-hole für lokale DNS-Auflösung (optional, aber empfohlen)
- SSH-Zugang zum Raspberry Pi
- Statische IP-Adresse für den Raspberry Pi im lokalen Netzwerk
Falls Docker bisher nicht installiert ist, kannst du folgende Befehle verwenden oder in den entsprechenden Artikel von mir hineinschauen:
# Docker installieren curl -sSL https://get.docker.com | sh # Deinen Benutzer zur Docker-Gruppe hinzufügen sudo usermod -aG docker $USER # Docker Compose installieren sudo apt-get update sudo apt-get install -y docker-compose-plugin # Einmal die Gruppenrichtlinien neu starten newgrp docker
Traefik-Architektur im lokalen Netzwerk
Bei dieser Konfiguration fungiert dein Raspberry Pi (z.B. mit IP 192.168.1.36) als zentraler Einstiegspunkt (Entrypoint) für alle deine Docker-Dienste im Netzwerk:
- Client-Anfragen, wie
http://bookstack.local
werden über DNS (Pi-hole) zur IP deines Raspberry Pi aufgelöst - Traefik empfängt alle Anfragen auf Port 80 (HTTP)
- Basierend auf dem Host-Header (
bookstack.local
) leitet Traefik die Anfrage an den entsprechenden Container weiter - Die Antwort wird zurück an den Client gesendet
Auf dieser Hardware laufen meine Umgebungen
Bei mir gibt es mehrere sogenannte »Umgebungen«, die ich benutze.
Zum einen meine »Live« oder auch »Produktion« Umgebung, auf der alles läuft, was ich in meinem Netzwerk so benötige.
Dann gibt es noch Umgebungen für unterschiedliche Szenarien: ein Labor (LAB), eine Entwickler (DEV) und eine zum finalen Testen (UAT).
Hardwaretechnisch sind aber alle fast gleich ausgestattet, da ich mit diesen Kombinationen bisher nie Probleme hatte.
Lediglich setzt meine neue Live-Umgebung erstmalig auf eine NVMe-SSD.
Werbung
Aktuelle Produktions-Umgebung (live)
Preview | Product | Price | |
---|---|---|---|
|
Raspberry Pi 5 8 GB |
91,88 EUR |
Bei Amazon kaufen |
|
offizieller Raspberry Pi 5 USB-C Netzteil 27W, USB-C… |
18,72 EUR |
Bei Amazon kaufen |
|
GeeekPi Raspberry Pi 5 Aluminiumgehäuse mit Official… |
23,98 EUR |
Bei Amazon kaufen |
|
GeeekPi N04 M.2 M-Key NVMe SSD Shield für Raspberry Pi… |
19,99 EUR
12,95 EUR |
Bei Amazon kaufen |
|
Crucial P3 Plus SSD 1TB M.2 PCIe Gen4 NVMe Interne SSD,… |
74,99 EUR |
Bei Amazon kaufen |
|
SanDisk Extreme 32 GB microSDHC Memory Card + SD… |
14,99 EUR
7,79 EUR |
Bei Amazon kaufen |
|
Transcend 32GB kleiner und kompakter USB-Stick 3.1 Gen… |
16,62 EUR |
Bei Amazon kaufen |
|
UGREEN USB C 312MB/S Kartenleser SD 4.0 Kartenleser USB… |
25,99 EUR
19,94 EUR |
Bei Amazon kaufen |
Letzte Aktualisierung am 24.04.2025 (Preise können abweichen) / Infos zu Affiliate Links / Bilder von der Amazon Product Advertising API
Affiliate – Links
DarkWolfCave.de ist Teilnehmer des Amazon-Partnerprogramm, das zur Bereitstellung eines Mediums für Webseiten konzipiert wurde, mittels dessen durch die Platzierung von Partner-Links zu Amazon.de Entgelte verdient werden können.
Werbung
Test-Umgebungen (UAT/DEV/LAB)
Preview | Product | Price | |
---|---|---|---|
|
Raspberry Pi 5 4GB |
69,69 EUR |
Bei Amazon kaufen |
|
Raspberry Pi 4 Modell B (8 GB) |
86,53 EUR
83,96 EUR |
Bei Amazon kaufen |
|
Raspberry Pi 4 Modell B (4 GB) | 129,00 EUR 72,70 EUR | Bei Amazon kaufen |
|
Raspberry Pi Raspberry Fuente de Alimentación USB-C… |
13,53 EUR |
Bei Amazon kaufen |
|
Miuzei Gehäuse für Raspberry Pi 4 mit Lüfter, 5.1V… |
17,99 EUR |
Bei Amazon kaufen |
|
SD kartenleser 5 in 1 USB 3.0, Aluminiumlegierung mit… | Bei Amazon kaufen | |
|
Samsung MZ-76E1T0B/EU 860 EVO 1 TB SATA 2,5″ Interne… |
135,00 EUR |
Bei Amazon kaufen |
|
UGREEN Festplattengehäuse 2,5 Zoll USB C 3.2 Gen 2 auf… |
19,99 EUR
11,89 EUR |
Bei Amazon kaufen |
|
JSAUX Adapter |
11,99 EUR |
Bei Amazon kaufen |
Letzte Aktualisierung am 25.04.2025 (Preise können abweichen) / Infos zu Affiliate Links / Bilder von der Amazon Product Advertising API
Affiliate – Links
DarkWolfCave.de ist Teilnehmer des Amazon-Partnerprogramm, das zur Bereitstellung eines Mediums für Webseiten konzipiert wurde, mittels dessen durch die Platzierung von Partner-Links zu Amazon.de Entgelte verdient werden können.
Verzeichnisstruktur vorbereiten
Wir beginnen mit der Erstellung einer sauberen Verzeichnisstruktur für unsere Reverse Proxy Traefik-Installation:
# Hauptverzeichnis sowie config-Verzeichnis für Docker-Projekte erstellen # mit diesem Befehl werden alle Ordner und Unterordner erzeugt, falls sie nicht vorhanden sind. mkdir -p ~/docker/traefik/config # In das Traefik-Verzeichnis wechseln cd ~/docker/traefik
Traefik-Konfiguration erstellen
Die Konfiguration des Reverse Proxy besteht aus zwei Hauptdateien:
der Docker Compose Definition und der Traefik-Hauptkonfiguration.
Docker Compose Datei
Erstelle eine docker-compose.yml
Datei im Traefik-Verzeichnis:
nano docker-compose.yml
Füge folgenden Inhalt ein, der den Reverse Proxy als Container einrichtet:
services: traefik: image: traefik:latest container_name: traefik restart: unless-stopped security_opt: - no-new-privileges:true ports: - "80:80" # HTTP - "8080:8080" # Traefik Dashboard volumes: - /var/run/docker.sock:/var/run/docker.sock:ro # Docker-Socket für Container-Erkennung - ./config/traefik.yml:/etc/traefik/traefik.yml:ro # Hauptkonfiguration networks: - traefik_network labels: - "traefik.enable=true" # Dashboard lokal verfügbar machen - "traefik.http.routers.dashboard.rule=Host(`traefik.local`)" - "traefik.http.routers.dashboard.service=api@internal" - "traefik.http.routers.dashboard.entrypoints=web" networks: traefik_network: name: traefik_network
Diese Konfiguration definiert:
- Den Traefik Reverse Proxy in seiner neuesten Version (:latest)
- Die notwendigen Ports für HTTP (80) und das Admin-Dashboard (8080)
- Die erforderlichen Volumes für Docker-Socket und Konfigurationsdatei
- Ein dediziertes Netzwerk für die Container-Kommunikation (
traefik_network
) - Labels für den Dashboard-Zugriff über traefik.local
Traefik Hauptkonfiguration
Erstelle die Hauptkonfigurationsdatei für den Reverse Proxy:
cd config nano traefik.yml
Füge folgenden Inhalt ein:
# Globale Konfiguration global: checkNewVersion: true sendAnonymousUsage: false # Log-Konfiguration log: level: INFO # Für detailliertere Logs während der Einrichtung: level: DEBUG # Traefik API und Dashboard aktivieren api: dashboard: true insecure: true # Im lokalen Netzwerk akzeptabel # EntryPoints konfigurieren (Zugangspunkte für Anfragen) entryPoints: web: address: ":80" # Provider konfigurieren providers: docker: endpoint: "unix:///var/run/docker.sock" exposedByDefault: false # Container müssen explizit per Label aktiviert werden network: traefik_network
Diese YAML-Konfiguration definiert die zentralen Komponenten des Traefik Reverse Proxy:
- Globale Einstellungen und Logging-Parameter
- Das Dashboard für die Verwaltung und Überwachung
- Den „web“ Entrypoint auf Port 80 für HTTP-Anfragen
- Die Docker-Integration für die automatische Container-Erkennung
Traefik Reverse Proxy starten
Nach dieser Konfiguration können wir den Reverse-Proxy starten:
cd ~/docker/traefik docker compose up -d
Der Parameter -d
startet den Reverse Proxy im Hintergrund (detached mode). Prüfe anschließend den Status des Containers:
docker ps | grep traefik
Die Ausgabe sollte einen laufenden Traefik-Container anzeigen. Bei korrekter Konfiguration erscheint etwa Folgendes:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a1b2c3d4e5f6 traefik:v3.0 "/entrypoint.sh trae…" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:8080->8080/tcp traefik
Überprüfe die Logs des Reverse Proxy auf mögliche Fehler oder Warnungen:
docker logs traefik
In den Logs sollte die erfolgreiche Initialisierung des Traefik Reverse Proxy ohne Fehlermeldungen zu sehen sein. Wichtige Indikatoren sind:
- Die Bestätigung des Docker-Provider-Starts
- Die Aktivierung des Dashboards
- Die Konfiguration des „web“ Entrypoints auf Port 80
Zur Überprüfung des Dashboard-Zugangs öffne in deinem Browser:
http://[Raspberry-Pi-IP]:8080
Ersetze [Raspberry-Pi-IP] durch die tatsächliche IP-Adresse deines Raspberry Pi, beispielsweise http://192.168.1.36:8080. Das Dashboard bietet:
- Übersicht über konfigurierte Entrypoints
- Aktuell registrierte Routen des Reverse Proxy
- Status der Services und Router
- Visualisierung der HTTP-Middleware
Sollte das Dashboard nicht erreichbar sein, prüfe folgende Aspekte:
- Läuft der Container? (
docker ps
) - Sind die Ports korrekt freigegeben? (
netstat -tulpn | grep 8080
) - Ist die Firewall konfiguriert? (
sudo ufw status
)
DNS-Konfiguration mit Pi-hole
Für die Namensauflösung der lokalen Domains benötigst du einen DNS-Server, der die lokalen Hostnamen auf die IP-Adresse deines Raspberry Pi auflöst. Oder du musst bei jedem Gerät die Hosts-Datei entsprechend anpassen. Dies ist aber bei mehreren Geräten sehr aufwendig und lästig.
Daher bietet sich Pi-hole hierfür ideal an, da es:
- Als lokaler DNS-Server fungiert
- Benutzerdefinierte DNS-Einträge erlaubt
- Zusätzlichen Werbeschutz bietet
Konfiguriere in Pi-hole die benötigten DNS-Einträge für den Reverse Proxy:
- Öffne die Pi-hole Admin-Oberfläche in deinem Browser
- Navigiere zu „Local DNS“ > „DNS Records“
- Füge für jeden hinter dem Reverse Proxy betriebenen Service einen separaten Eintrag hinzu:
Domain | IP-Adresse |
---|---|
traefik.local | 192.168.1.36 |
bookstack.local | 192.168.1.36 |
grafana.local | 192.168.1.36 |
Ersetze 192.168.1.36 mit der tatsächlichen IP-Adresse deines Raspberry Pi, auf dem der Reverse Proxy läuft.
Mit dieser Konfiguration wird jede Anfrage an beispielsweise bookstack.local an den Raspberry Pi weitergeleitet, wo der Traefik Reverse Proxy anhand des Host-Headers die Anfrage an den korrekten Container weiterleitet.
Um die Namensauflösung lokal ohne Pi-hole mithilfe der hosts-Datei auf deinen Geräten zu konfigurieren, kannst du die folgenden Schritte ausführen. Beachte, dass du dies auf jedem Gerät separat durchführen musst:
DNS-Konfiguration über die hosts-Datei
Du hast keinen Pi-hole am laufen?! Keine Sorge, du kannst die DNS-Einträge auch lokal auf jedem Gerät hinterlegen:
hosts-Datei auf dem Gerät finden:
- Linux/Mac: Öffne ein Terminal und bearbeite die Datei
/etc/hosts
. Du benötigst Root-/Administratorrechte, um diese Datei zu ändern.bash sudo nano /etc/hosts
- Windows: Öffne den Editor als Administrator und lade die Datei
C:\Windows\System32\drivers\etc\hosts
.
Einträge für lokale Domains hinzufügen:
- Füge am Ende der Datei die lokalen Domain-Einträge hinzu. Verwende dabei die IP-Adresse deines Raspberry Pi, auf dem der Reverse Proxy läuft.
192.168.1.36 traefik.local 192.168.1.36 bookstack.local 192.168.1.36 grafana.local
Speichern und Schließen:
- Speichere die Datei und schließe den Editor. Bei Linux/Mac kannst du dies in
nano
mitCTRL+X
,Y
undEnter
tun.
Gerät neu starten oder DNS-Cache leeren:
- Um die Änderungen wirksam zu machen, starte dein Gerät neu oder leere den DNS-Cache:
- Linux:
bash sudo systemctl restart nscd
- Mac:
bash sudo dscacheutil -flushcache
- Windows: Öffne die Eingabeaufforderung als Administrator und führe aus:
shell ipconfig /flushdns
- Linux:
Nach diesen Schritten sollten Anfragen an traefik.local
, bookstack.local
und grafana.local
korrekt an deinen Raspberry Pi weitergeleitet werden, ohne Pi-hole zu verwenden. Allerdings musst du diesen Vorgang für jedes Gerät im Netzwerk wiederholen.
Pi-hole hinter dem Reverse Proxy einrichten
Wenn Pi-hole auf demselben Raspberry Pi wie der Traefik Reverse Proxy betrieben wird, entsteht ein Portkonflikt, da beide Dienste standardmäßig Port 80 benötigen. Diese Konfiguration löst den Konflikt durch Anpassung des Pi-hole-Webinterfaces. Dazu musst du lediglich die docker-compose.yml für deinen Pi-hole-Container anpassen:
services: pihole: container_name: pihole image: pihole/pihole:latest restart: unless-stopped environment: TZ: 'Europe/Berlin' WEBPASSWORD: 'dein-passwort' # Ersetze mit einem sicheren Passwort ServerIP: '192.168.1.36' # IP-Adresse des Raspberry Pi WEB_PORT: '8080' # Geändert von 80 auf 8080 für internen Webserver volumes: - './etc-pihole:/etc/pihole' - './etc-dnsmasq.d:/etc/dnsmasq.d' dns: - 127.0.0.1 # Pi-hole verwendet sich selbst als primären DNS - 1.1.1.1 # Cloudflare als Upstream-DNS networks: - traefik_network ports: - "53:53/tcp" # DNS über TCP - "53:53/udp" # DNS über UDP labels: - "traefik.enable=true" # Aktiviert Integration mit dem Reverse Proxy - "traefik.http.routers.pihole.rule=Host(`pihole.local`)" # Domain für Pi-hole - "traefik.http.services.pihole.loadbalancer.server.port=8080" # Interner Port des Pi-hole Webinterfaces networks: traefik_network: external: true # Verwendet das bereits vom Reverse Proxy erstellte Netzwerk
Diese Konfiguration bewirkt:
- Pi-hole verwendet intern Port 8080 für sein Webinterface (über
WEB_PORT
) - Die DNS-Dienste bleiben auf Port 53 (TCP/UDP) verfügbar
- Der Traefik Reverse Proxy leitet Anfragen von
pihole.local
an den internen Port 8080 des Pi-hole-Containers weiter - Beide Dienste sind Teil des
traefik_network
, ermöglichen aber eine saubere Trennung der HTTP-Dienste
Jetzt musst du nur noch deinen Pi-Hole-Container stoppen und neu starten:
docker compose down docker compose up -d
Du wirst hier einen groben Überblick finden.
Allerdings biete ich dir auch noch etwas mehr Support an:
- Du benötigst persönlichen Support
- Du möchtest von Beginn an Unterstützung bei deinem Projekt
- Du möchtest ein hier vorgestelltes Plugin durch mich installieren und einrichten lassen
- Du würdest gerne ein von mir erstelltes Script etwas mehr an deine Bedürfnisse anpassen
Für diese Punkte und noch einiges mehr habe ich einen limitierten
VIP-Patreon Tarif
eingerichtet. Falls er dir dort zurzeit nicht angeboten wird,
kontaktiere mich bitte über Discord und wir finden eine Lösung!
Beispiel: BookStack hinter dem Reverse Proxy Traefik einrichten
BookStack ist ein Wiki-System, das aus mehreren Containern besteht und daher ein gutes Beispiel für die Einrichtung einer komplexeren Anwendung hinter dem Reverse Proxy darstellt:
Zuerst erstellen wir wieder einen neuen Ordner für BookStack:
mkdir -p ~/docker/bookstack cd ~/docker/bookstack
Dann benötigen wir die docker-compose.yml:
nano docker-compose.yml
services: bookstack: image: lscr.io/linuxserver/bookstack:latest container_name: bookstack restart: unless-stopped depends_on: - mariadb environment: - APP_URL=http://bookstack.local - APP_KEY=base64:Kf8Y2LkN3OPqwM9Zy1xzT4PgZ/cDlVoXRD196tcQD/A= - DB_HOST=mariadb - DB_PORT=3306 - DB_DATABASE=bookstack - DB_USERNAME=bookstack - DB_PASSWORD=geheimespasswort volumes: - ./bookstack_data:/config networks: - traefik_network ports: - "6875:80" # Optional: für direkten Zugriff ohne Traefik labels: - "traefik.enable=true" - "traefik.http.routers.bookstack.rule=Host(`bookstack.local`)" - "traefik.http.routers.bookstack.entrypoints=web" - "traefik.http.services.bookstack.loadbalancer.server.port=80" # Interner Container-Port! mariadb: image: mariadb:10.5 container_name: bookstack_db restart: unless-stopped environment: - MYSQL_ROOT_PASSWORD=supergeheim - MYSQL_DATABASE=bookstack - MYSQL_USER=bookstack - MYSQL_PASSWORD=geheimespasswort volumes: - ./mariadb_data:/var/lib/mysql networks: - traefik_network networks: traefik_network: external: true
Wichtige Konfigurationsdetails:
- APP_URL: Muss exakt mit der URL übereinstimmen, unter der BookStack über den Reverse Proxy erreichbar sein soll
- traefik.http.services.bookstack.loadbalancer.server.port: Definiert den internen Port des Containers (80), nicht den externen Port
- networks: Alle Container müssen im
traefik_network
sein, um mit dem Reverse Proxy und untereinander kommunizieren zu können - depends_on: Stellt sicher, dass die Datenbank vor der Anwendung gestartet wird
Speichere diese Konfiguration und starte BookStack:
# Starte die Container docker compose up -d
Nach dem erfolgreichen Start ist BookStack über http://bookstack.local
erreichbar, wobei der Traefik Reverse Proxy die Anfragen entsprechend der Host-Header-Analyse an den korrekten Container weiterleitet. Natürlich musst du den DNS-Eintrag entweder in deiner Hosts-Datei oder in Pi-hole eingerichtet haben!
Template für weitere Container
Hier ist ein allgemeines Template, das du für weitere deine Docker-Container verwenden kannst, wenn du diese über den Traefik Reverse Proxy verwalten lassen möchtest.
services: myservice: image: image/name:tag container_name: myservice restart: unless-stopped volumes: - ./data:/pfad/im/container networks: - traefik_network labels: - "traefik.enable=true" - "traefik.http.routers.myservice.rule=Host(`myservice.local`)" - "traefik.http.routers.myservice.entrypoints=web" - "traefik.http.services.myservice.loadbalancer.server.port=CONTAINER_PORT" networks: traefik_network: external: true
Ersetze myservice
, image/name:tag
und CONTAINER_PORT
entsprechend deinen Anforderungen.
Häufige Fehler und Troubleshooting
Container ist nicht über Traefik erreichbar
Prüfe folgende Punkte:
- Labels korrekt? Besonders häufig werden falsche Ports angegeben. Beachte: In
loadbalancer.server.port
musst du den internen Container-Port angeben, nicht den externen Port. - Netzwerke verbunden? Der Container muss im Traefik-Netzwerk sein:
networks: - traefik_network
- DNS-Eintrag vorhanden? Überprüfe in Pi-hole, ob der Hostname richtig zur Raspberry Pi-IP aufgelöst wird.
- Logs prüfen:
docker logs traefik docker logs dein_container_name
Container startet nicht
Wenn ein Container nicht startet, prüfe die Logs:
docker logs dein_container_name
Häufige Ursachen:
- Fehlerhafte Umgebungsvariablen
- Bereits belegte Ports
- Fehlende Berechtigungen für Volume-Mounts
Erweiterte Konfigurationen
Mehrere Hosts für einen Container
Du kannst mehrere Hostnamen für einen Container definieren, musst diese dann aber auch im DNS angeben:
- "traefik.http.routers.myservice.rule=Host(`service.local`) || Host(`alternative.local`)"
Pfadbasiertes Routing
Statt über Hostnamen kannst du auch über Pfade routen:
- "traefik.http.routers.myservice.rule=PathPrefix(`/meinservice`)"
HTTP Basic Auth hinzufügen
Für einen – wirklich sehr- einfachen Passwortschutz:
# htpasswd installieren sudo apt-get install -y apache2-utils # Passwort-Hash erzeugen htpasswd -nb benutzername passwort
Den generierten Hash dann in der Container-Konfiguration verwenden:
- "traefik.http.middlewares.auth.basicauth.users=benutzername:$$hashedpassword" - "traefik.http.routers.myservice.middlewares=auth"
Geschafft!
Mit Traefik hast du einen leistungsstarken und zugleich einfach zu bedienenden Reverse Proxy für deine Docker-Container auf dem Raspberry Pi eingerichtet. Du kannst nun alle deine Services über benutzerfreundliche URLs wie bookstack.local
oder grafana.local
erreichen, ohne dir Portnummern merken zu müssen.
Das Schöne an Traefik ist seine nahtlose Integration mit Docker: Sobald du einen neuen Container mit den richtigen Labels startest, wird er automatisch in Traefik registriert und ist über die konfigurierte URL erreichbar.
Mit Pi-hole für die DNS-Auflösung und Traefik für das Routing hast du eine elegante, leichtgewichtige Lösung geschaffen, die selbst komplexe Setups übersichtlich hält und einfach zu erweitern ist.
Ich hoffe, dieser Artikel hilft dir bei deinen eigenen Projekten.
Fragen und Anregungen sind wie immer willkommen!
FAQ´s
Ein Reverse Proxy leitet Anfragen von Clients an Server weiter und fungiert als zentrale Schnittstelle. Traefik bietet hier den Vorteil der automatischen Container-Erkennung in Docker-Umgebungen und reduziert den Konfigurationsaufwand erheblich. Mit Traefik auf dem Raspberry Pi erreichst du deine Dienste über benutzerfreundliche URLs wie grafana.local statt über Port-Nummern.
Traefik erkennt Docker-Container automatisch und generiert dynamisch Routing-Regeln, während bei Nginx oder HAProxy jeder neue Dienst eine manuelle Konfigurationsänderung erfordert. Für Docker-Umgebungen reduziert Traefik den Wartungsaufwand deutlich, da Container nur mit Labels versehen werden müssen, um im Routing berücksichtigt zu werden.
Traefik empfängt als Reverse Proxy alle HTTP-Anfragen auf Port 80 des Raspberry Pi. Anhand des Host-Headers in der Anfrage (z.B. „bookstack.local“) leitet Traefik die Anfrage an den entsprechenden Docker-Container weiter. Die DNS-Auflösung (z.B. durch Pi-hole) sorgt dafür, dass die lokalen Domainnamen auf die IP-Adresse des Raspberry Pi aufgelöst werden.
Für Traefik als Reverse Proxy empfehle ich mindestens einen Raspberry Pi 3 mit 2GB RAM. Bei umfangreicheren Setups mit vielen Containern ist ein Raspberry Pi 4 mit 4GB oder mehr RAM vorteilhaft. Der Speicherbedarf selbst ist mit etwa 50-100MB relativ gering, aber für die Docker-Umgebung solltest du ausreichende Ressourcen einplanen.
Konfiguriere Pi-hole mit der Umgebungsvariablen WEB_PORT: '8080'
, um dessen internen Webserver auf Port 8080 statt 80 zu betreiben. Anschließend richte Traefik mit dem Label traefik.http.services.pihole.loadbalancer.server.port=8080
ein, um Anfragen von pihole.local
an den geänderten internen Port weiterzuleiten. Dadurch können beide Dienste auf dem gleichen Raspberry Pi koexistieren.
Du hast weitere Fragen oder benötigst Hilfe? Gerne versuche ich im Rahmen meiner Möglichkeiten dich zu unterstützen. Dafür kannst du hier die Kommentar-Sektion (nicht vergessen Antworten zu abonnieren) nutzen oder du schaust auf meinem Discord-Kanal vorbei.