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