# 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: ```sh # 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. ```sh 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](https://doc.traefik.io/traefik/providers/file/), [TLS-Dateikonfiguration](https://doc.traefik.io/traefik/reference/routing-configuration/other-providers/file/).