01 Installation

 

https://goneuland.de/traefik-v2-reverse-proxy-fuer-docker-unter-debian-10-einrichten/


Meine Anleitung bezieht sich auf die aktuelle Traefik Version 2. Dies ist wichtig, da die Konfigurationen bei Version 1 anders sind.

0. Was ist das Ziel dieser Anleitung?

  • Traefik v2 installieren
  • TLS aktivieren
  • Automatisch gültige Zertifikate von Let´s encrypt zu beziehen
  • Wissen, wie ihr neue Anwendungen zu Traefik hinzufügt.

1. Installation von Docker und Docker Compose

Nun installieren wir zuerst Docker & Docker Compose. Diese beiden Programme bilden die Grundlage.

1.1 Docker installieren

Zur Installation von Docker habe ich hier eine Anleitung geschrieben.

2. htpasswd installieren

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

apt-get update
apt-get install apache2-utils

3. Traefik installieren und konfigurieren

3.1 Verzeichnisse / Dateien anlegen

Als erstes legen wir uns ein Verzeichnis für Traefik an. Ich wähle dazu folgendes:

mkdir -p /opt/containers/traefik

Anschließend erzeugen wir uns noch ein paar Datein / Ordner, welche wir später noch benötigen.

mkdir -p /opt/containers/traefik/data
touch /opt/containers/traefik/data/acme.json
chmod 600 /opt/containers/traefik/data/acme.json
touch /opt/containers/traefik/data/traefik.yml

3.2 traefik.yml anpassen

Nun bearbeiten wir die Datei “traefik.yml”. Dabei ist wichtig, dass ihr nur Leerzeichen und keine Tabs benutzen dürft.

nano /opt/containers/traefik/data/traefik.yml

Inhalt:

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: email@example.com   #### hier eure E-Mail angeben ####
      storage: acme.json
      httpChallenge:
        entryPoint: http

Notwendige Anpassungen:

  1. E-Mail Adresse anpassen. Ohne Anführungszeichen oder sonstiges.

3.3 docker-compose.yml anpassen

Nun legen wir unsere Docker Compose Datei an.

nano /opt/containers/traefik/docker-compose.yml

Inhalt:

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`)"
      - "traefik.http.middlewares.traefik-auth.basicauth.users=USER:PASSWORD"
      - "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`)"
      - "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:

  • Hostnamen anpassen: Hier müsst ihr noch die Zeilen mit eurem Hostnamen (traefik.example.com) anpassen.
  • Benutzer / Passwort festlegen: Ihr müsst noch euer Passwort / Benutzer festlegen. Hier in diesem Beispiel werden folgende Daten festgelegt.

3.4 Benutzer erzeugen

Nun legen wir uns einen neuen Benutzer sowie Passwort an. Dazu müsst ihr nachfolgenden Code anpassen:

echo $(htpasswd -nb <user> <password>) | sed -e s/\\$/\\$\\$/g
 
Zum Beispiel:
 
echo $(htpasswd -nb christian supersicher) | sed -e s/\\$/\\$\\$/g
 
Ausgabe: christian:$$apr1$$uNheRNLT$$apG7iqwsukzfV0ob6qJFs0

Der Befehl wird hier beim Hersteller erklärt. Diese Zeichenkette kopiert ihr nun in eure Konfiguration:

vorher:
"traefik.http.middlewares.traefik-auth.basicauth.users=USER:PASSWORD"
 
nachher:
"traefik.http.middlewares.traefik-auth.basicauth.users=christian:$$apr1$$uNheRNLT$$apG7iqwsukzfV0ob6qJFs0"

3.5 Dynamic_conf.yml anlegen

Hier legen wir nun noch eine neue Datei an. Dazu gebt ihr folgenden Code ein:

nano /opt/containers/traefik/data/dynamic_conf.yml

Kopiert nun folgenden Code in die Datei:

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"

3.6 Docker Netzwerk anlegen

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

4. Traefik starten

Nun können wir Traefik starten.

docker compose -f /opt/containers/traefik/docker-compose.yml up -d

Wenn ihr nun auf traefik.euredomain.de geht, solltet ihr folgendes sehen:

Nach dem Login mit eurem oben festgelegten Passwort solltet ihr diese Übersicht sehen.

Hier sind wir jetzt fertig mit der Traefik Konfiguration und Installation.

5. Wie kann ich Anwendungen im Allgemeinen zu Traefik hinzufügen?

Im Allgemeinen ist es wichtig, dass ihr die Labels hinzufügt.

   wp:
     labels:
      - "traefik.enable=true"
      - "traefik.http.routers.wp.entrypoints=http"
      - "traefik.http.routers.wp.rule=Host(`wordpress.euredomain.de`)"
      - "traefik.http.middlewares.wp-https-redirect.redirectscheme.scheme=https"
      - "traefik.http.routers.wp.middlewares=wp-https-redirect"
      - "traefik.http.routers.wp-secure.entrypoints=https"
      - "traefik.http.routers.wp-secure.rule=Host(`wordpress.euredomain.de`)"
      - "traefik.http.routers.wp-secure.tls=true"
      - "traefik.http.routers.wp-secure.tls.certresolver=http"
      - "traefik.http.routers.wp-secure.service=wp"
      - "traefik.http.services.wp.loadbalancer.server.port=80"
      - "traefik.docker.network=proxy"

Wichtig ist hier auch, dass unser Service “wp” heißt und dementsprechend die Labels auch alle auf den Namen “wp” angepasst werden müssen. Dies kann aber auch jeder andere Name sein. Muss nur konstant sein.

Ihr müsst immer noch das Netzwerk hinzufügen, mit dem Traefik kommuniziert. Dieses Netzwerk ist im einfachsten Fall bei jeder Anwendung identisch. In diesem Fall also “proxy”.

   wp:
     networks:
       - proxy

networks:
  proxy:
    external: true

Der Name “proxy” wurde hier auch frei gewählt. Dort könnt ihr auch jeden anderen Namen verwenden. Wichtig hierbei ist jedoch, dass das Netzwerk unter Docker angelegt ist:

docker network create NamedesNetzwerks

Version #4
Erstellt: 12 August 2022 12:33:38 von Admin
Zuletzt aktualisiert: 12 August 2022 12:46:59 von Admin

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.

Ok