Dieses Tutorial ist NICHT mehr valid und dient nur noch als historisches Anschauungsmaterial!

Bitte lies Dir den Disclaimer durch, bevor Du eine Anleitung umsetzt...

Haftungsausschluss / Disclaimer

Traefik Docker Container als Reverse-Proxy und Let’s Encrypt Provider

Damit ist die Konfiguration von Traefik abgeschlossen. Jetzt brauchen wir noch die „docker-compose“-Datei, um ihn damit herunterzuladen und anschließend zu starten:

nano ~/docker/traefik-v1/docker-compose.yml
### Traefik v1.7
### docker-compose.yml
##START
version: '3'

services:
 traefik:
    image: traefik:1.7
    container_name: traefik-v1
    restart: always
    networks:
      - web
    ports:
      - "80:80"
      - "443:443"
    labels:
      - "traefik.enable=true"
      - "traefik.frontend.rule=Host:traefik.xp-server.de"
      - "traefik.backend=traefik-v1"
      - "traefik.port=8080"
      - "traefik.docker.network=web"
      - "traefik.frontend.headers.STSSeconds=315360000"
      - "traefik.frontend.headers.browserXSSFilter=true"
      - "traefik.frontend.headers.contentTypeNosniff=true"
      - "traefik.frontend.headers.forceSTSHeader=true"
      - "traefik.frontend.headers.STSIncludeSubdomains=true"
      - "traefik.frontend.headers.STSPreload=true"
      - "traefik.frontend.headers.frameDeny=true"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /root/docker/traefik-v1:/etc/traefik
networks:
  web:
    external: true
##EOF

Diese „docker-compose“-Dateien werden uns noch häufiger für jeden einzelnen unserer Dienste begegnen. Die Syntax ist sehr strikt und gleich vorneweg: In einer .yml-Datei dürfen wir keine Tabulatoren für den Zeileneinzug verwenden, sondern nur normale Leerzeichen. Aber gut, woran man sich nicht alles gewöhnt ;)

Zeile 4: Definiert die Version, in der diese .yml-Datei geschrieben ist. Version 3 ist dabei auf dem aktuellen Stand.

Zeilen 6-7: Wir beginnen mit der Deklaration der Services. Eingerückt kommt dann der Name des Services, hier „traefik“.

Zeile 8: Das Image des Containers, den wir laden möchten. Hier ganz wichtig: Normalerweise steht meistens nichts hinter dem Container oder höchstens ein „:latest“ für die neueste Version. Hier brauchen wir explizit die Version 1.7 von Traefik. Die neue v2 wird definitiv mit dieser Konfiguration nicht laufen!

Zeile 9: Wir geben dem Container einen Namen, damit wir ihn mit Docker später leichter verwalten können.

Zeile 10: „restart: always“ sagt Docker, dass dieser Container nach einem Ausfall oder beim Neustart des Servers sofort wieder gestartet werden soll. Ist gerade bei dem Reverse-Proxy, dem Herzstück unserer Docker-Konfiguration, sehr wichtig!

Zeilen 11-12: Die Netzwerk-Deklaration. Hier legen wir fest, mit welchen Docker-Netzwerken dieser Service reden darf. Traefik soll ja nur ins Internet weiterleiten und nicht nach „intern“, darum hier nur das „web“-Netzwerk.

Zeilen 13-15: Wir beschreiben die Ports, auf denen der Container mit dem Netzwerk verbunden werden soll. Wir stöpseln den Port 80 vom Host (außen) an den Port 80 des Containers (innen) an. Selbiges mit Port 443.

Zeilen 16-28: Die „Labels“ brauchen wir allesamt für Traefik. Damit übergeben wir unsere Wünsche, was mit dem Container passieren soll, wie er heißt, welchen Hostname er hat und einige Feinabstimmungen für TLS an Traefik. Diese Konfiguration ist in weiten Teilen für alle unsere weiteren Dienste identisch und ändert sich nur im Host, Backend-Namen und hier als Besonderheit, weil wir Port 8080 an Traefik ankoppeln, was normalerweise bei WordPress oder Matomo ja nicht der Fall ist.
Die einzige Zeile, die Du an Dein System anpassen musst, ist Nummer 18: Hier muss Dein Hostname eingetragen werden. Der Rest der Config passt. Das war auch einer der Gründe, warum ich den „alten“ Traefik v1 so gerne habe: Es bedarf nur weniger Anpassungen an die Config, der Rest bleibt immer gleich. Bei v2 ist das leider nicht mehr so…
Zeile 17: Das Kommando „traefik.enable=true“ schaltet den jeweiligen Container für Traefik frei. Fehlt diese Zeile, wird der Container nicht per Traefik an das Internet angebunden, weil wir die Automatik in der Config deaktiviert haben!

Zeilen 29-31: „Volumes“ sind einfach gesagt virtuelle Laufwerk-Brücken (oder „Mounts“), mit denen wir Speicherplatz unseres Host-Systems mit dem Container verbinden. Links vom „Doppelpunkt“ ist der Pfad des Hosts, rechts davon die Stelle des Containers. In dem Beispiel verbinden wir die Datei „/var/run/docker.sock“ vom Host mit der des Traefik-Containers. Das „:ro“ am Schluss bedeutet „read-only“, also nur lesend. Der Container kann die .sock-Datei lesen, aber nicht hineinschreiben. Über diese Datei bekommt Traefik Änderungen an sämtlichen Docker-Containern mit.
Der Inhalt des Containers an der Stelle „/etc/traefik“ wird bei uns auf dem Host nach „/root/docker/traefik-v1“ geschrieben. Das ist insbesondere für die „traefik.toml“ Datei wichtig, damit die Config von Traefik gelesen werden kann, aber auch ganz wichtig der Zugriff auf die „acme.json“, in der die Zertifikate von Let’s Encrypt abgelegt werden.

Generell: Daten, die innerhalb des Containers abgelegt werden, stehen und fallen zusammen mit dem Container. Wird der Container entfernt, sind auch alle Daten innerhalb des Containers futsch. Darum müssen wir Daten, welche wir unabhängig vom Zustand des Containers bewahren wollen, über Volumes „persistent“ auf unser System außerhalb des Containers schreiben lassen!

Zeilen 32-34: Die Netzwerke werden noch einmal deklariert. Das „external: true“ bedeutet hier NICHT, dass dieses Netzwerk eine externe Anbindung an das Internet hat, sondern, dass es „extern“ definiert worden ist. Das haben wir ja ganz am Anfang in Docker gemacht. Ein „externes“ Netzwerk wird beim Beenden eines Containers nicht gelöscht. Darum der Aufwand…

Anzeige *

2 Kommentare zu „Traefik Docker Container als Reverse-Proxy und Let’s Encrypt Provider“

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Verwendung
von Cookies

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung.

Scroll to Top