Traefik docker-compose-Konfiguration mit sicherem Dashboard und Let's Encrypt
Diese Konfiguration bietet nur das Minimum, um das Traefik-Dashboard mit Let’s-Encrypt-basierter SSL-Verschlüsselung und Benutzerauthentifizierung zum Laufen zu bringen. Sie leitet außerdem alle HTTP-Anfragen auf HTTPS um, um unsicheren Zugriff auf das Dashboard und andere Dienste zu vermeiden.
Let’s Encrypt wird mit der HTTP-01-Challenge verwendet. Das bedeutet, dass Traefik über Port 80 aus dem Internet erreichbar sein MUSS.
Um Docker & docker-compose zu installieren, siehe Docker und docker-compose auf Ubuntu in 30 Sekunden installieren.
Bereiten Sie zuerst das Verzeichnis vor (/var/lib/traefik):
sudo mkdir /var/lib/traefik
sudo chown -R $USER: /var/lib/traefik
cd /var/lib/traefik
mkdir acme confErstellen Sie nun docker-compose.yml:
services:
traefik:
image: "traefik:v2.3"
container_name: "traefik"
command:
- "--api=true"
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./acme:/etc/traefik/acme"
- "./traefik.toml:/etc/traefik/traefik.toml"
- "./conf:/etc/traefik/conf"Erstellen Sie nun die Hauptkonfigurationsdatei traefik.toml:
defaultEntryPoints = ["http", "https"]
[api]
dashboard = true
# Sie können Konfigurationsdateien in /var/lib/traefik/traefik.conf erstellen und Traefik wird sie automatisch neu laden
[providers]
[providers.file]
directory = "/etc/traefik/conf/"
watch = true
# Ändern Sie dies in INFO, wenn Sie nicht so viel Debug-Ausgabe möchten
[log]
level = "DEBUG"
[entryPoints.web]
address = ":80"
[entryPoints.web.http]
[entryPoints.web.http.redirections]
[entryPoints.web.http.redirections.entryPoint]
to = "websecure"
scheme = "https"
[entryPoints.websecure]
address = ":443"
[certificatesResolvers.letsencrypttls.acme]
# TODO Fügen Sie hier Ihre E-Mail hinzu
email = "[email protected]"
storage = "/etc/traefik/acme/acme.json"
[certificatesResolvers.letsencrypttls.acme.httpChallenge]
entryPoint = "web"Nun müssen wir die API-Konfigurationsdatei in conf/api.toml erstellen:
[http.routers.traefik-api]
# TODO: Setzen Sie hier Ihre Domain !!!
rule = "Host(`traefik.example.com`)"
service = "api@internal"
middlewares = ["auth"]
[http.routers.traefik-api.tls]
certresolver = "letsencrypttls"
[http.middlewares.auth.basicAuth]
# TODO Fügen Sie hier Ihren Admin-Benutzer und Ihr Passwort hinzu, generieren Sie z.B. mit https://wtools.io/generate-htpasswd-online
users = [
"admin:$1$ySFBr~_y$GsKgEasDQkpCX8sO8vNia0",
]Vergessen Sie nicht, Ihre E-Mail-Adresse und den Domainnamen in den Konfigurationsdateien zu ändern (mit TODO markiert). Stellen Sie sicher, dass Sie alle DNS-Einträge korrekt eingerichtet haben, sodass Ihre Domains auf den Server zeigen, auf dem Traefik läuft!
Jetzt ist es Zeit, Traefik zum ersten Mal zu starten:
docker-compose upTraefik wird einige Sekunden benötigen, um automatisch das Let’s-Encrypt-Zertifikat für Ihre Domain zu generieren. Sobald Sie eine Meldung wie
traefik | time="2020-09-20T23:48:30Z" level=debug msg="Certificates obtained for domains [traefik.mydomain.com]" providerName=letsencrypttls.acme routerName=traefik-api@file rule="Host(`traefik.mydomain.com`)"sehen, ist das Zertifikat verfügbar und wird automatisch geladen.
Nun können Sie zu https://traefik.mydomain.com/ gehen, sich mit dem Benutzernamen und Passwort, die Sie generiert haben, anmelden und das Dashboard ansehen.

Falls gewünscht, können Sie auch einen systemd-Service einrichten, um Traefik automatisch beim Booten zu starten (generiert mit dem docker-compose systemd .service-Generator). Um dies zu tun, stoppen Sie zuerst die laufende docker-compose-Instanz mit Ctrl-C, falls Sie noch das Terminal offen haben, und docker-compose down.
Fügen Sie nun dies als /etc/systemd/system/traefik.service hinzu:
[Unit]
Description=traefik
Requires=docker.service
After=docker.service
[Service]
Restart=always
User=root
Group=docker
WorkingDirectory=/var/lib/traefik
# Container stoppen (falls laufend), wenn Unit gestoppt wird
ExecStartPre=/usr/local/bin/docker-compose -f docker-compose.yml down -v
# Container starten, wenn Unit gestartet wird
ExecStart=/usr/local/bin/docker-compose -f docker-compose.yml up
# Container stoppen, wenn Unit gestoppt wird
ExecStop=/usr/local/bin/docker-compose -f docker-compose.yml down -v
[Install]
WantedBy=multi-user.targetund führen Sie aus
sudo systemctl enable traefik.service
sudo systemctl start traefik.service