Files
Inventory/docs/traefik.md
2026-09-29 08:43:05 +02:00

2.6 KiB

Traefik-Betrieb

Traefik v3.7.13 ersetzt Caddy. Die Routerdefinition liegt unter traefik/dynamic/routes.yml; ein Docker-Socket ist nicht erforderlich. Nur HTTP/HTTPS werden veröffentlicht, das Dashboard ist deaktiviert. WhiteNoise liefert statische Dateien aus, Uploads bleiben geschützt.

Öffentliche Domain

In .env APP_HOST ohne Protokoll oder Port und ACME_EMAIL setzen. DNS muss auf den Server zeigen; TCP 80 und 443 müssen erreichbar sein. docker compose up -d --build --wait aktiviert HTTPS über Let's Encrypt. ACME-Zustand liegt im Volume traefik_acme und muss gesichert werden.

Privates LAN

Auf Linux mit Python 3 und OpenSSL, im Projektverzeichnis als Administrator:

# APP_HOST in .env auf die LAN-IP setzen.
cp docker-compose.lan.yml docker-compose.override.yml
python3 scripts/renew_local_tls.py --hostname 192.168.188.45
docker compose up -d --build --wait
install -m 644 deploy/csr-inventory-tls.service deploy/csr-inventory-tls.timer /etc/systemd/system/
systemctl daemon-reload
systemctl enable --now csr-inventory-tls.timer
systemctl start csr-inventory-tls.service

Die mitgelieferten Units setzen /home/denis/csr-inventory voraus; bei anderen Installationspfaden beide Pfade im Dienst anpassen. Der LAN-Override deaktiviert ACME und ergänzt Port 8001 als HTTPS-Weiterleitung.

Ohne vorhandene CA erzeugt das Skript eine neue. Zur Übernahme einer bestehenden CA vor dem ersten Lauf deren root.crt und root.key nach tls/ca/ kopieren. Der CA-Schlüssel bleibt auf dem Host und darf nicht verteilt werden. Nur das öffentliche Stammzertifikat wird in den Vertrauensspeicher der Clients importiert. Auf dem Server 192.168.188.45 wird die bisherige Stamm-CA weiterverwendet.

Der Timer prüft täglich um 01:30 Europe/Berlin. Zertifikate gelten 90 Tage und werden bei höchstens 30 Tagen Restlaufzeit erneuert. Ein Standardzertifikat ermöglicht auch den IP-Zugriff ohne SNI. Die Dateikonfiguration wird atomar ersetzt; Traefik lädt sie ohne Neustart. Frühere Zertifikate bleiben erhalten.

systemctl list-timers csr-inventory-tls.timer
journalctl -u csr-inventory-tls.service --no-pager
docker compose logs --tail 100 traefik
# Erneuerung bei Bedarf erzwingen:
python3 scripts/renew_local_tls.py --hostname 192.168.188.45 --force

tls/, .env, Uploads und Datenbank separat geschützt sichern. Der tägliche Datenbankjob umfasst keine TLS-Schlüssel. tls/ und die erzeugte tls.yml sind vom Git-Repository und Docker-Build ausgeschlossen.

Referenzen: File-Provider, TLS-Dateikonfiguration.