Traefik als lokaler Reverse-Proxy

  Tim Moritz   Lesezeit: 4 Minuten  🗪 4 Kommentare

Traefik einrichten für automatisches Routing zu Docker-Container.

traefik als lokaler reverse-proxy

Der Betrieb von mehreren Webanwendungen auf einer Maschine ist fast immer mit nervigen Konfigurationsänderungen verbunden. Port 80 bzw. 443 lassen sich eben nur einmal verwenden. Für jede neue Webanwendung muss entweder ein anderer Port verwendet (und gemerkt) werden oder man ändert die Konfiguration seines Webservers oder Reverse-Proxies und lädt die neue Konfiguration.

Besonders nervig wird das ganze, wenn man nur mal kurz etwas ausprobieren möchte bzw. wenn man sich nicht sicher ist, ob man die Anwendung tatsächlich behalten will. Nach dem löschen der Applikation (oder eigentlich schon nach dem beenden) ist die Konfigurationsänderung eigentlich unnötig, aber wer räumt schon gerne auf?

Wäre es nicht schön, wenn ich bspw. die Software Metabase aus unserem Artikel Daten aus einem anderen Blickwinkel , lokal ausprobieren könnte und die Konfiguration wird vollkommen automatisch hinzugefügt und auch wieder entfernt? Genau das macht Traefik (in Verbindung mit Docker) für uns.


Mit wenigen Handgriffen eingerichtet, beobachtet Traefik die laufenden Docker-Container und routet eingehende HTTP(S)-Requests als Reverse-Proxy anhand des Hostnamens an den richtigen Container.

Beispiel Setup

Dieser Artikel geht davon aus, dass bereits eine funktionsfähige Docker-Umgebung (inkl. Docker-Compose) installiert ist. Traefik selbst läuft ebenfalls als Docker-Container. Dieser benötigt ein eigenes virtuelles Netzwerk für das Routing und Zugriff auf den Docker-Socket.

Netzwerk namens "proxy" erstellen:
docker network create proxy

Eine docker-compose.yml in einem Ordner erstellen:

version: '3'

services: traefik: image: traefik:latest container_name: traefik restart: always volumes: - /var/run/docker.sock:/var/run/docker.sock command: - "--providers.docker=true" - "--providers.docker.defaultRule=Host(`{{ normalize .Name }}.localhost`)" ports: - 80:80 networks: - proxy
networks: proxy: external: name: proxy



Führen wir jetzt in diesem Ordner ein

docker-compose up -d


aus, haben wir schon alles konfiguriert. Alle laufenden Container, mit Webinterface, die mit dem Netzwerk "proxy" konfiguriert werden, sollten nun unter http://<<name des containers>>.localhost über den Browser erreichbar sein. Neue Container werden vollautomatisch hinzugefügt, gestoppte entfernt.

Testen können wir das zum Beispiel so:

docker run -d  --name aaa --network=proxy -t traefik/whoami

Rufen wir jetzt im Browser http://aaa.localhost auf, so Antwortet uns eine Webseite, die Auskunft über den gestarteten Container gibt.

Traefik steht unter MIT Lizenz und bietet noch deutlich mehr Möglichkeiten. So lassen sich bspw. die Hostnamen und Ports der Container über Docker-Labels konfigurieren. Mit automatischem handling von Lets-Encrypt Zertifikaten, Load-Balancing, Metriken und vielem mehr ist Traefik auch für den Einsatz auf Servern in Produktion ein wertvolles Tool.

Quelle: https://traefik.io/

Tags

Traefik, Proxy, Container, HTTP(S)-Requests, Docker-Container, Docker, Reverse

Bitschubser
Geschrieben von Bitschubser am 24. November 2021 um 19:25

Dieser Artikel geht davon aus, dass bereits eine funktionsfähige Docker-Umgebung (inkl. Docker-Compose) installiert ist, Warum gehst du davon aus ? Eine Menge Leute erfüllen diese Voraussetzungen nicht ! Gerade Composer stellt viele vor Probleme. Wenn dann solltest du diesen Teil nicht aussen vor lassen.

Tim Moritz
Geschrieben von Tim Moritz am 25. November 2021 um 08:26

Weil die Installation von Docker abhängig von der Distribution ist. Da ist es m.E. sinnvoller wenn man sich ein Tutorial zu seiner Distribution raussucht.

"Composer" und "Docker-Compose" sind aber zwei unterschiedliche Dinge? Mir fällt jetzt bei docker-compose keine besondere Herausforderung ein.

Bitschubser
Geschrieben von Bitschubser am 25. November 2021 um 12:06

Ich denke mal das niemand so etwas auf einer Desktopumgebung installiert. Man kann bei den meisten von einer Serverumgebung mit Debian ausgehen kann. Das sollte man als Grundlage benutzen. Probleme die sich dann vielleicht bei Ubuntu Server ergeben kann dann jeder immer noch selbst ergoogeln

TheJ
Geschrieben von TheJ am 5. Januar 2022 um 00:49

Da der Artikel traefik thematisiert, macht auch der exklusive Fokus darauf durchaus Sinn.

Generall fällt es bei technisch orientierten Tutorials oftmals schwer, die Grenze zu ziehen, inwieweit man den Leser bei der Hand nimmt. Würde docker / docker-compose noch mit integriert, müsste analog auch die generelle Installation eines Betriebssystems mit ins Tutorial aufgenommen werden, da dieses ebenfalls eine essenzielle Voraussetzung für den Betrieb von docker darstellt. Das würde dann dem eigentlichen Thema inhaltlich nicht wirklich gut tun :)

Als Kompromiss könnte man eventuell noch auf die offizielle Dokumentation der beiden Projekte verlinken: