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:
- 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
echo $(htpasswd -nb christian supersicher) | sed -e s/\\$/\\$\\$/g
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