Docker & Traefik installieren

Die Anleitung bezieht sich auf die aktuelle Traefik Version 2.

1. Docker und docker-compose installieren

Um Docker auf eurem System zu installieren müsst ihr folgende Befehle ausführen.

sudo apt update
sudo apt install docker.io
sudo apt install docker-compose

2. User einrichten

Nachdem wir Docker und docker-compose installiert haben, richten wir nun einen User ein. Mit diesem User sollen alle Container ausgeführt werden.

Legen wir also einen User mit dem Namen "dockeruser" an.

sudo useradd -m dockeruser	#User anlegen
sudo passwd dockeruser		#Passwort vergeben

Der Befehl "docker" kann standardmäßig nur durch den root-Benutzer oder einen Benutzer in der docker-Gruppe ausgeführt werden, die beim Installationsprozess von Docker automatisch erstellt wird. Wenn Ihr versucht, den Befehl docker auszuführen, ohne ihm sudo voranzustellen oder ohne Teil der docker Gruppe zu sein, erhaltet Ihr eine Fehlermeldung.

Um also in Zukunft nicht immer sudo schreiben zu müssen, fügen wir unseren User der Gruppe docker hinzu. Für den Fall dass wir doch einmal sudo benötigen, wie z.B beim Build eines Images, fügen wir den User auch noch der Gruppe "sudo" hinzu.

sudo usermod -aG docker dockeruser
sudo usermod -aG sudo dockeruser

Nun melden wir uns entweder ab und mit unserem neuen User "dockeruser" an oder wir wechseln mit folgendem Befehl direkt zu dem User.

sudo su dockeruser

3. htpasswd installieren

Wir installieren nun noch das Tool htpasswd. Dieses benötigen wir um uns ein Passwort für Traefik zu generieren.

sudo apt update
sudo apt install apache2-utils

4. Traefik installieren und konfigurieren

Als erstes legen wir einige Verzeichnisse und Dateien an, welche wir später noch brauchen werden.

mkdir traefik
mkdir traefik/data
touch traefik/data/acme.json
chmod 600 traefik/data/acme.json
touch traefik/data/traefik.yml
touch traefik/data/dynamic_conf.yml
touch traefik/docker-compose.yml

Nun bearbeiten wir die Datei „traefik.yml“. Ob ihr das mit vi, vim oder nano macht ist euch überlassen.

api:
  dashboard: true

entryPoints:
  http:
    address: ":80"
  https:
    address: ":443"

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false

certificatesResolvers:
  http:
    acme:
      email: email@example.com   #### hier eure E-Mail angeben ####
      storage: acme.json
      httpChallenge:
        entryPoint: http

Das einzige was hier angepasst werden muss ist eure E-Mail Adresse.

Als nächstes bearbeiten wir die Datei "dynamic-conf.yml".

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"

Als nächstes geht es an die "docker-compose.yml".

version: '3'

services:
  traefik:
    image: traefik:latest
    container_name: traefik
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    networks:
      - proxy
    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(`traefik.example.com`)"		#Hier eure Domain anpassen
      - "traefik.http.middlewares.traefik-auth.basicauth.users=USER:PASSWORD"	#Hier User und Passwort anpassen
      - "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(`traefik.example.com`)"	#Hier eure Domain anpassen
      - "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"

networks:
  proxy:
    external: true

Notwendige Anpassungen sind hier:

  • 2 mal eure Domain anpassen (traefik.example.com)
  • Benutzer und Passwort festlegen.

Wir erzeugen uns mit htpasswd ein Passwort Hash. Ändert also bitte die nächste Code-Zeile entsprechend euren Wünschen ab. Dazu gebt ihr folgendes in eure Shell ein:

echo $(htpasswd -nb user password) | sed -e s/\\$/\\$\\$/g

Ausgabe: user:$$apr1$$VhafOIR1$$WgRXmyuJkDEY0OwTJfXSt1

Diese Zeichenkette kopiert ihr nun in eure Konfiguration (docker-compose.yml).

Folgende Zeile ändern:

vorher:
"traefik.http.middlewares.traefik-auth.basicauth.users=USER:PASSWORD"
nachher:
"traefik.http.middlewares.traefik-auth.basicauth.users=user:$$apr1$$VhafOIR1$$WgRXmyuJkDEY0OwTJfXSt1"

Als nächstes müssen wir noch ein internes Netzwerk anlegen, über welches später unsere Docker Container mit Traefik kommunizieren sollen. Dies haben wir in unserer Compose Datei „proxy“ genannt.

docker network create proxy

5. Traefik starten

Nun können wir Traefik starten.

Dazu müsst ihr euch entweder in dem Verzeichnis "~/traefik/" befinden, dann reicht folgender Befehl:

docker-compose up -d

Oder wenn ihr euch nicht im Traefik Verzeichnis befindet:

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

Wenn ihr anschließend auf traefik.example.com geht, solltet ihr folgendes sehen.

Wenn ihr euch erfolgreich einloggen konntet und das Dashboard seht, sind wir mit der Installation und Konfiguration von Traefik fertig.

6. SSL Sicherheit überprüfen

Nun können wir noch prüfen ob wir in der Datei "dynamic_conf.yml" keinen Fehler gemacht haben und unsere SSL Sicherheit mit A+ bewertet wird.

Dazu gehen wir auf SSL Labs und geben dort unsere Domain "traefik.example.com" ein.

Das Ergebnis sollte wie folgt aussehen dann ist alles in Ordnung.

Wenn alles in Ordnung ist könnt ihr weitermachen und ein CMS wie z.B. Contao oder Wordpress installieren.

Solltet ihr noch Anmerkungen, Tipps & Tricks oder euch eine Anleitung zu einem weiteren Thema wünschen,

könnt ihr mich über das Kontakt Formular erreichen.