Traefik docker-compose-Konfiguration mit sicherem Dashboard und Let's Encrypt

English Deutsch

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):

setup-traefik-dir.sh
sudo mkdir /var/lib/traefik
sudo chown -R $USER: /var/lib/traefik
cd /var/lib/traefik
mkdir acme conf

Erstellen Sie nun docker-compose.yml:

docker-compose-traefik.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:

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:

conf-api.toml
[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-up.sh
docker-compose up

Traefik wird einige Sekunden benötigen, um automatisch das Let’s-Encrypt-Zertifikat für Ihre Domain zu generieren. Sobald Sie eine Meldung wie

traefik-log.txt
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.

Traefik-Dashboard-Weboberfläche nach erfolgreicher Einrichtung

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:

traefik.service
[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.target

und führen Sie aus

systemd-enable-traefik.sh
sudo systemctl enable traefik.service
sudo systemctl start traefik.service

Check out similar posts by category: Traefik