Files
bin/docs/reverse-proxy.md

3.2 KiB

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

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 <host>: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):

# /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:

<VirtualHost *:443>
    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/
</VirtualHost>

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.