diff --git a/docs/OPERATIONS.md b/docs/OPERATIONS.md index 02b84d2..b3ea527 100644 --- a/docs/OPERATIONS.md +++ b/docs/OPERATIONS.md @@ -68,7 +68,8 @@ Standalone-Variante nutzt deshalb für Build und Betrieb das Host-Netzwerk des L - `DOMAIN`, `TRAEFIK_*` und `INGEST_ALLOWED_IPS` werden in dieser Variante nicht genutzt (das regelt Traefik selbst, siehe unten) 3. **Starten:** ```bash - docker compose -f deploy/docker-compose.standalone.yml --env-file deploy/.env up -d --build + sh deploy/build.sh # Images im Host-Netzwerk bauen (nach jedem git pull wiederholen) + docker compose -f deploy/docker-compose.standalone.yml --env-file deploy/.env up -d docker compose -f deploy/docker-compose.standalone.yml --env-file deploy/.env ps # api, web, db: healthy docker compose -f deploy/docker-compose.standalone.yml --env-file deploy/.env exec api node dist/cli.js admin:create docker compose -f deploy/docker-compose.standalone.yml --env-file deploy/.env exec api node dist/cli.js token:create @@ -116,6 +117,8 @@ Standalone-Variante nutzt deshalb für Build und Betrieb das Host-Netzwerk des L ``` Keine Kompressions- oder Buffering-Middleware auf `/api/live` (Live-Updates per Server-Sent Events). + **Content-Security-Policy:** Next.js braucht `script-src 'self' 'unsafe-inline'`. Mit `script-src 'self'` allein + bleibt die Seite leer (getestet: 38 CSP-Fehler, kein Inhalt). Steht OPNsense vor Traefik, muss Traefik die echte Client-IP sehen, sonst greift die Allowlist nicht (ggf. `forwardedHeaders.trustedIPs` am Entrypoint). 6. Weiter mit Abschnitt 3 (Mod) bzw. 4 (SFTP). Alle späteren Befehle mit `-f deploy/docker-compose.standalone.yml`. @@ -272,9 +275,11 @@ Das Volume `backups` liegt auf demselben Host. Für echte Ausfallsicherheit die | Mod: `outbox limit reached, dropped …` | Backend länger nicht erreichbar | Verbindung reparieren; ggf. `maxOutboxMb` erhöhen | | `/sources`: SFTP „Fehler beim letzten Abgleich“ | Zugangsdaten, Port oder OPNsense-Regel | Fehlertext unter `/admin` → *Letzte Fehler* | | Live-Ticker bleibt leer, Seite sonst ok | Proxy puffert SSE | keine Kompressions-/Buffering-Middleware auf `/api/live` | -| Build: `npm error Exit handler never called!` nach ~2 min | `npm ci` erreicht `registry.npmjs.org` nicht (ausgehender Proxy/Firewall) | Proxy in `deploy/.env` eintragen und Domains freischalten (Abschnitt 1, „Ausgehender Proxy“) | +| Build: `npm error Exit handler never called!` nach ~2 min | `npm ci` erreicht `registry.npmjs.org` nicht (ausgehender Proxy/Firewall, oder Docker im LXC ohne NAT) | Proxy in `deploy/.env` eintragen und Domains freischalten (Abschnitt 1, „Ausgehender Proxy“) | | Build: Fehler beim Laden von Google Fonts | `fonts.googleapis.com`/`fonts.gstatic.com` nicht freigeschaltet | in der Proxy-Whitelist ergänzen | | Nur graue Spielerköpfe | `mc-heads.net` nicht erreichbar | in der Proxy-Whitelist ergänzen (optional) | +| Build: `additional privileges requested: pass "--allow=network.host"` | `docker compose` darf nicht im Host-Netzwerk bauen | Images mit `sh deploy/build.sh` bauen, dann `docker compose … up -d` ohne `--build` | +| Seite bleibt leer, Browser-Konsole meldet „Content Security Policy“ | CSP am Reverse Proxy erlaubt keine Inline-Scripts | `script-src 'self' 'unsafe-inline'` (Abschnitt 2a) | | Login unter `/admin` klappt nicht ohne HTTPS | Cookie ist `Secure` | Portal über HTTPS aufrufen (lokal: `NODE_ENV=development`) | Spieler, die nicht im Portal erscheinen möchten, lassen sich unter `/admin` ausblenden: Sie verschwinden aus allen