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.