diff --git a/docs/INSTALLATION.md b/docs/INSTALLATION.md index 244f30d..d46648b 100644 --- a/docs/INSTALLATION.md +++ b/docs/INSTALLATION.md @@ -420,6 +420,78 @@ docker compose ps # unter PORTS muss die neue Adresse stehen Das ist der Teil, den du auf dem **anderen** Server einträgst. Ersetz `10.0.0.5` durch die Adresse aus 7a. +Vier Varianten, je nachdem was bei dir läuft: [Nginx Proxy Manager](#nginx-proxy-manager), [Caddy](#caddy), [nginx von Hand](#nginx) oder [Traefik](#traefik). + +#### Nginx Proxy Manager + +In der Oberfläche: **Hosts → Proxy Hosts → Add Proxy Host**. + +**Reiter „Details"** + +| Feld | Wert | +|---|---| +| Domain Names | `cockpit.deine-domain.de` | +| Scheme | `http` — nicht https. Die Anwendung beendet kein TLS | +| Forward Hostname / IP | die Adresse aus 7a, z. B. `10.0.0.5` | +| Forward Port | `3000` (oder dein `APP_PORT`) | +| Cache Assets | **aus** | +| Block Common Exploits | an | +| Websockets Support | an | +| Access List | leer lassen — die Anwendung hat eine eigene Anmeldung mit Pflicht-Zweitfaktor | + +Zu **Cache Assets**: Next.js hängt an jede Skript- und Stildatei einen +Prüfsummen-Namen, ein Zwischenspeicher bringt hier also nichts. Aus bleibt +er, damit nach einem Update niemand rätselt, ob er noch eine alte Fassung +sieht. + +**Reiter „SSL"** + +| Feld | Wert | +|---|---| +| SSL Certificate | *Request a new SSL Certificate* (Let's Encrypt) | +| Force SSL | **an** | +| HTTP/2 Support | an | +| HSTS Enabled | **aus** | +| HSTS Subdomains | aus | + +`HSTS Enabled` bleibt aus, weil die Anwendung den Kopf +`Strict-Transport-Security` bereits selbst setzt — sonst schickt der Server +ihn zweimal. + +**Reiter „Advanced"** + +Hier kommt der Teil hinein, den die Oberfläche nicht abbildet. Genau +dieser Block: + +```nginx +# Fotos mehrseitiger Bescheide sind schnell 10 MB. +client_max_body_size 30M; + +# Belegmappe, Rechnungslegung und Vollexport brauchen länger als die +# üblichen 60 Sekunden. Ohne diese Werte bricht der Download mittendrin ab. +proxy_connect_timeout 30s; +proxy_send_timeout 600s; +proxy_read_timeout 600s; + +# Der Vollexport kommt als Strom. Puffert der Proxy, wartet der Browser, +# bis alles im Speicher des Proxys liegt - und läuft dabei in die Zeitgrenze. +proxy_buffering off; +proxy_request_buffering off; +``` + +Dann **Save**. + +**Was du NICHT eintragen musst:** `proxy_set_header` für `Host`, +`X-Real-IP`, `X-Forwarded-For` und `X-Forwarded-Proto`. Nginx Proxy Manager +setzt diese vier bereits selbst, und zwar im `location`-Block — ein +zweiter Satz im Advanced-Feld läge auf `server`-Ebene und würde ohnehin +überschrieben. Trag sie nicht ein, sonst suchst du später an der falschen +Stelle. + +**Wenn du eine `Access List` benutzt:** Sie sperrt auch `/api/wartung` aus. +Entweder du lässt sie weg, oder du trägst die IP des Servers ein, von dem +der cron-Eintrag aus Schritt 10 kommt. + #### Caddy ```caddyfile