Skip to main content

Traefik v2 installieren und einrichten

Einleitung

In dieser Anleitung installieren wir Traefik v2 als Reverse Proxy / Edge Router. Der entscheidende Vorteil von einem Reverse Proxy ist der, das dadurch mehrere Container mit Port 80 nach außen kommunizieren. So müssen wir uns keine Ports mehr merken, oder Portfreigaben erstellen. Traefik generiert obendrauf noch SSL Zertifikate und erneuert diese automatisch.

Das Routing zwischen den Containern wird über die Subdomain bewerkstelligt. Dadurch weiß Traefik in welchen Container der Benutzer gelangen soll. Ein Load Balancing lässt sich auch einrichten.

Die Installation erfolgt mit docker-compose und dem offiziellen Image von Traefik.

Traefik Installation und Konfiguration

Installation der Pakete

Im ersten Schritt müssen wir uns mit unserem Server verbinden damit wir Konsolenzugriff haben. Wichtig dabei ist das auf deinem Linux Server Docker und Docker-Compose installiert ist. Falls das nicht erledigt ist, wird hier beschrieben wie wir Docker und Docker-Compose installieren: Docker und Docker-Compose installieren.

Im nächsten Schritt müssen wir das Paket apache2-utils installieren, da wir das Tool htpasswd benötigen um später ein Kennwort für den Administrationsbenutzer zu generieren. 

sudo apt-get update
sudo apt-get install apache2-utils -y
Dateien und Verzeichnisse anlegen

In diesem Schritt legen wir die benötigen Verzeichnisse und Dateien an damit wir Traefik zum laufen zu bekommen. Ich erstelle immer einen zentralen Ordner in dem ich die docker-compose Dateien nach Apps in Ordnern ablege. So kann ich schnell die Container neu starten oder um Konfigurationen vorzunehmen. 

sudo mkdir /_docker
sudo mkdir /_docker/traefik
sudo mkdir -p /_docker/traefik/data
sudo touch /_docker/traefik/data/acme.json
sudo chmod 600 /_docker/traefik/data/acme.json
sudo touch /_docker/traefik/data/traefik.yml

Als zweiten Schritt müssen wir die traefik.yml etwas anpassen. Dazu öffnen wir die Datei mit einem Editor unserer Wahl. Ich verwende dafür den Editor nano.

sudo nano /_docker/traefik/data/traefik.yml

In der Datei fügen wir folgenden Inhalt ein:

api:
  dashboard: true
entryPoints:
  http:
    address: ":80"
  https:
    address: ":443"
providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false
  file:
    filename: "./dynamic_conf.yml"
certificatesResolvers:
  http:
    acme:
      email: <empfänger>@<domain>
      storage: acme.json
      httpChallenge:
        entryPoint: http

In der Datei müssen wir unsere E-Mail Adresse eingeben. Diese wird verwendet um euch bei eventuellen Problemen zu benachrichtigen. 

Im nächsten Schritt erstellen wir die docker-compose.yml und fügen dort den Inhalt ein.

sudo nano /_docker/traefik/docker-compose.yml

version: '3'

networks:
  traefik:
    external: true

services:
  traefik:
    image: traefik:latest
    container_name: traefik
    restart: always
    security_opt:
      - no-new-privileges:true
    networks:
      - traefik
    ports:
      - 80:80
      - 443:443
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./data/traefik.yml:/traefik.yml:ro
      - ./data/acme.json:/acme.json
      - ./data/dynamic_conf.yml:/dynamic_conf.yml
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.entrypoints=http"
      - "traefik.http.routers.traefik.rule=Host(`<subdomain>.<domain>`)"
      - "traefik.http.middlewares.traefik-auth.basicauth.users=ADMIN:PASSWORT"
      - "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https"
      - "traefik.http.routers.traefik.middlewares=traefik-https-redirect"
      - "traefik.http.routers.traefik-secure.entrypoints=https"
      - "traefik.http.routers.traefik-secure.rule=Host(`<subdomain>.<domain>`)"
      - "traefik.http.routers.traefik-secure.tls=true"
      - "traefik.http.routers.traefik-secure.tls.certresolver=http"
      - "traefik.http.routers.traefik-secure.service=<api>@<internal>"
      - "providers.file.filename=/dynamic_conf.yml"
      - "traefik.http.routers.traefik-secure.middlewares=<secHeaders>@<file>,traefik-auth"

Wir müssen in Zeile 36 und 38 eben dann die Eckigen Klammern (<>) kurz entfernen damit die Anwendung funktioniert.

Im nächsten Schritt generieren wir das Kennwort um uns in das Webinterface einzuloggen. Dazu überlegen wir uns einen Benutzernamen und ein Kennwort. Dieses geben wir dann in den folgenden Befehl ein.

echo $(htpasswd -nb <benutzer> <passwort>) | sed -e s/\\$/\\$\\$/g

Wir erhalten dann eine Zeichenkette mit dem Benutzernamen und dem verschlüsselten Kennwort. Diese Informationen fügen wir in der docker-compose.yml in der 29. Zeile am Ende an. Dazu entfernen wir die Platzhalter ADMIN:PASSWORT und tragen dort die Ausgabe des Befehls ein. 

Im letzte Schritt legen wir jetzt die dynamic_conf.yml an. Dazu geben wir folgenden Befehl ein.

sudo nano /_docker/traefik/data/dynamic_conf.yml

In der Datei fügen wir folgenden Inhalt ein.

tls:
  options:
    default:
      minVersion: VersionTLS12
      cipherSuites:
        - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
        - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
        - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
        - TLS_AES_128_GCM_SHA256
        - TLS_AES_256_GCM_SHA384
        - TLS_CHACHA20_POLY1305_SHA256
      curvePreferences:
        - CurveP521
        - CurveP384
      sniStrict: true
http:
  middlewares:
    secHeaders:
      headers:
        browserXssFilter: true
        contentTypeNosniff: true
        frameDeny: true
        sslRedirect: true
        #HSTS Configuration
        stsIncludeSubdomains: true
        stsPreload: true
        stsSeconds: 31536000
        customFrameOptionsValue: "SAMEORIGIN"
Docker Netzwerk anlegen

Jetzt legen wir das Docker Netzwerk an. Das Docker Netzwerk hat die Funktion das die Container die Zugriff auf das Netzwerk haben, darüber miteinander kommunizieren. Traefik schiebt den Traefik in die Container über dieses Netzwerk. 

sudo docker network create traefik
Docker Container starten

Als letztes müssen wir unseren Container starten, dazu geben wir folgenden Befehl ein.

docker-compose -f /_docker/traefik/docker-compose.yml up -d

Wenn wir jetzt die angegebene Domain in unseren Browser eingeben, erhalten wir ein Anmeldefenster. Wenn wir dort unsere vorhin angegebene Login Daten eingeben, gelangen wir auf das Dashboard von Traefik. Dort können wir Fehler und andere Informationen einsehen.  

Wenn wir neue Services zu Traefik hinzufügen wollen müssen entsprechende DNS-Einträge auf dem DNS-Server hinterlegt sein.