[[it-themen:docker:stacks|zurück]] ====== Traefik Stack (Docker) ====== ===== Verzeichnisstruktur ===== traefik/ ├─ config/ │ ├─ traefik.yml │ └─ dynamic/ │ ├─ security.yml │ ├─ tcp.yml │ ├─ mail.yml │ └─ prometheus.yml ├─ letsencrypt/ │ ├─ acme.json │ └─ clean.sh ├─ data/ │ ├─ prometheus/ │ └─ grafana/ ├─ errorpage/ │ ├─ index.html │ ├─ test.html │ └─ nginx.conf └─ docker-compose.yml ===== docker-compose.yml – Aufbau ===== Die ''docker-compose.yml'' definiert folgende Services: ==== 1) Traefik (Reverse Proxy) ==== * **Image:** ''traefik:v3.5.0-rc2'' * **Ports:** 80 (HTTP), 443 (HTTPS), 25 / 587 / 993 (Mail/TCP) * **Volumes:** * ''/var/run/docker.sock:/var/run/docker.sock:ro'' * ''./config/traefik.yml:/etc/traefik/traefik.yml:ro'' * ''./config/dynamic/:/etc/traefik/dynamic/:ro'' * ''./letsencrypt:/letsencrypt'' * **Labels (Auszug):** * Dashboard über ''traefik.nctl.de'' (Service ''api@internal'') * BasicAuth: ''traefik-auth'' * Redirect HTTP→HTTPS: ''mw-redirect-to-https@file'' * Security-Chain: ''global-secure-chain@file'' * **Netzwerke:** ''ldap-net'', ''docker_backend'' ==== 2) Certs-Dumper ==== * **Image:** ''ldez/traefik-certs-dumper:v2.9.3'' * Liest ''letsencrypt/acme.json'' und schreibt extrahierte Zertifikate nach ''./certs'' (Watch-Mode) ==== 3) Prometheus ==== * **Image:** ''prom/prometheus:latest'' * **Ports:** extern 9091 → intern 9090 * **Volumes:** ''config/prometheus'', ''data/prometheus'' * **Traefik:** ''https://prometheus.nctl.de'' (TLS via ''dnsresolver'', HTTP→HTTPS aktiv) ==== 4) Grafana ==== * **Image:** ''grafana/grafana:latest'' * **Port:** 3000 * **Volume:** ''data/grafana'' * **Env:** ''GF_SECURITY_ADMIN_USER'', ''GF_SECURITY_ADMIN_PASSWORD'', ''GF_SERVER_ROOT_URL'' * **Traefik:** ''https://grafana.nctl.de'' (TLS via ''dnsresolver'', Redirect + ''global-secure-chain@file'') ==== 5) Errorpage ==== * **Image:** ''nginx:alpine'' * **Volumes:** ''errorpage/'' (HTML), ''errorpage/nginx.conf'' * Liefert benutzerdefinierte Fehlerseiten für 4xx/5xx ===== Netzwerke ===== * **ldap-net** → Bridge für LDAP-Bezug * **docker_backend** → Zentrales Backend-Netz (extern vorhanden) * **proxy** → optional/external (nur falls von anderen Stacks genutzt) ===== Sicherheit ===== * **Zertifikate:** Let's Encrypt (DNS-Challenge via IONOS), persistent in ''letsencrypt/acme.json'' * **Middlewares:** * ''traefik-auth'' (BasicAuth fürs Dashboard) * ''mw-redirect-to-https@file'' * ''global-secure-chain@file'' (Header/Rates) ===== Monitoring ===== * **Prometheus** sammelt Metriken (Traefik-/System-Dashboards möglich) * **Grafana** visualisiert (Subdomain: ''grafana.nctl.de'') ===== Zugriff ===== * Traefik Dashboard: ''https://traefik.nctl.de'' * Prometheus: ''https://prometheus.nctl.de'' * Grafana: ''https://grafana.nctl.de'' ===== ASCII-Netzwerkübersicht (a2s) ===== .-----------------. .----------------. | Client | HTTPS | Traefik | | (Browser) |<---------->| ReverseProxy | '-----------------' '----------------' | | HTTP/TCP | +--> Prometheus (9090) +--> Grafana (3000) +--> Errorpage (nginx) +--> Mail (25 / 587 / 993)