# Reverse-Proxy-Betrieb (Ausbaustufe 10) Ziel: Erreichbarkeit über **eine** Subdomain `https://fb.wolfundlaemmlein.de/`, Grafana als Unterpfad `/grafana/`. Kette: Internet → **sv003** (Apache, TLS-Terminierung) → WireGuard-VPN → **sv006** (Traefik, ohne TLS, `10.8.0.6:8080`) → finance_pod (`127.0.0.1:8096` GUI/API, `127.0.0.1:8097` Grafana). Die Proxy-Konfiguration selbst (Traefik, Apache) liegt **außerhalb** dieses Repos — die folgenden Snippets sind Vorlagen. Tool-seitig genügt es, in der `.env` unter `~/.local/share/finance_pod/.env` zwei Variablen zu setzen und `./create_pod_finance.sh` erneut auszuführen. ## `.env`-Schalter (single-quoted!) ```sh FB_GRAFANA_PUBLIC_URL='https://fb.wolfundlaemmlein.de/grafana/' FB_SESSION_COOKIE_SECURE='true' ``` - `FB_GRAFANA_PUBLIC_URL` — öffentliche Grafana-Basis-URL (mit `/grafana/`, abschließender Slash empfohlen). Bewirkt: - `create_pod_finance.sh` startet Grafana mit `GF_SERVER_ROOT_URL` + `GF_SERVER_SERVE_FROM_SUB_PATH=true`; - interner Health-Check und interne Grafana-API-URL (`FB_GRAFANA_URL`, für die GUI-Passwortänderung) erhalten automatisch den `/grafana`-Präfix; - alle GUI-Links/iframes zeigen auf die öffentliche URL statt `:8097`. - **Leer lassen** = unveränderter Direktbetrieb auf `127.0.0.1`. - `FB_SESSION_COOKIE_SECURE='true'` — Session-Cookie nur über HTTPS. Vor der Internet-Freigabe setzen. Default (leer/`false`) für lokalen HTTP-Zugriff. Nach dem Editieren: `./create_pod_finance.sh` (übernimmt die `.env` unverändert, baut Pod/Container neu). HTTPS/HSTS und Login-Rate-Limiting sind Proxy-Sache (Apache auf sv003 bzw. fail2ban) — außerhalb dieses Repos. ## Traefik (sv006) — Datei-Provider, Beispiel Kein Prefix-Stripping für `/grafana` (Grafana serviert dank `serve_from_sub_path` selbst unter dem Sub-Pfad): ```yaml # /etc/traefik/dynamic/finance.yml http: routers: finance-grafana: rule: "Host(`fb.wolfundlaemmlein.de`) && PathPrefix(`/grafana`)" priority: 20 service: finance-grafana entryPoints: [web] finance-app: rule: "Host(`fb.wolfundlaemmlein.de`)" priority: 10 service: finance-app entryPoints: [web] services: finance-grafana: loadBalancer: servers: - url: "http://127.0.0.1:8097" finance-app: loadBalancer: servers: - url: "http://127.0.0.1:8096" ``` ## Apache (sv003) — VHost, Beispiel TLS terminiert hier; Weiterleitung an Traefik über die WireGuard-IP. `X- Forwarded-Proto https` ist wichtig, damit uvicorn (mit `--proxy-headers`) das öffentliche Schema erkennt: ```apache ServerName fb.wolfundlaemmlein.de SSLEngine on SSLCertificateFile /etc/letsencrypt/live/fb.wolfundlaemmlein.de/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/fb.wolfundlaemmlein.de/privkey.pem ProxyPreserveHost On RequestHeader set X-Forwarded-Proto "https" ProxyPass / http://10.8.0.6:8080/ ProxyPassReverse / http://10.8.0.6:8080/ ``` ## Zurück in den Lokalbetrieb `FB_GRAFANA_PUBLIC_URL` und `FB_SESSION_COOKIE_SECURE` aus der `.env` entfernen (oder leeren) und `./create_pod_finance.sh` erneut ausführen.