diff --git a/AGENTS.md b/AGENTS.md index 6ca0164..9b7bbfe 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -153,6 +153,13 @@ Standorte (sites) sind die oberste Organisationsebene und gruppieren Screens. - User-Dropdown im Header: zeigt E-Mail + Role-Badge, Menü mit Passwort ändern, MFA einrichten (mit "Aktiv"-Badge wenn MFA eingeschaltet), Userverwaltung (Admin), Abmelden. - Info-Tab in Screen-Cards: zeigt Client-Info-Tabelle (IP, Browser, Auflösung, zuletzt gesehen) aus dem Heartbeat-JSON für den jeweiligen Screen +## Betrieb / Diagnose + +- `docker compose up -d` startet nur neu und **baut nicht**. Nach Code-Aenderungen `--build` verwenden, sonst laeuft weiter das alte Image - das hat bei der Fehlersuche mehrfach zu falschen Schluessen gefuehrt. +- Das Dockerfile setzt `PYTHONUNBUFFERED=1`. Ohne das puffert Python `stdout` blockweise (kein TTY) und **keine** `print()`-Ausgabe der App erscheint in `docker compose logs`. Tracebacks waren sichtbar, weil Flask sie ueber stderr schreibt - das machte den blinden Fleck schwer erkennbar. +- gunicorn laeuft mit `--access-logfile -`, protokolliert also jeden Request. Ohne das laesst sich nicht feststellen, ob eine Anfrage den Container ueberhaupt erreicht. +- `add_customer` protokolliert je Kundenfeld `Upload = ` bzw. `Upload = keiner`. Ein geleertes `` - etwa nach einem Reload der Seite - sieht serverseitig sonst genauso aus wie "kein Logo hochgeladen". + ## Repo Quirks - `media/` and media file extensions are gitignored. diff --git a/README.md b/README.md index 274cdb3..7265c1f 100755 --- a/README.md +++ b/README.md @@ -75,9 +75,12 @@ signage/ ├── history.json # Aktivitätsverlauf (Dashboard) ├── media/ │ ├── / -│ │ ├── lobby/ +│ │ ├── lobby/ # Screen-Ordner (jeder Unterordner = ein Screen!) │ │ ├── casino/ -│ │ └── videosysteme/ +│ │ ├── videosysteme/ +│ │ ├── background.jpg # Hintergrundbild der Willkommensseite (optional) +│ │ ├── logo_1.png # hochgeladene Kundenlogos (Slot 1-3) +│ │ └── welcome.html # Standort-Kopie der Willkommensseite │ └── priority/ ├── templates/ │ ├── admin.html # Admin-Dashboard (Übersicht) @@ -175,6 +178,25 @@ docker compose up -d Server läuft auf `http://localhost:5005` (gunicorn mit 4 Workern, non-root User). +**Wichtig:** `docker compose up -d` startet nur neu, es baut nicht. Nach Code-Änderungen: + +```bash +docker compose up -d --build +``` + +### Logs + +```bash +docker compose logs -f signage +``` + +Der Container ist so eingestellt, dass dort alles Nötige ankommt: + +- `ENV PYTHONUNBUFFERED=1` im Dockerfile – ohne das puffert Python `stdout` blockweise, sobald es kein Terminal ist, und sämtliche `print()`-Ausgaben der App bleiben unsichtbar. +- `gunicorn --access-logfile -` – protokolliert jeden Request. Ohne das ist nicht einmal erkennbar, ob eine Anfrage den Container überhaupt erreicht. + +Beides fehlte anfangs und machte die Fehlersuche unnötig schwer. + --- ## Routen @@ -222,6 +244,8 @@ Server läuft auf `http://localhost:5005` (gunicorn mit 4 Workern, non-root User | `GET /media///` | Medien-Datei ausliefern | | `GET /media/priority/` | Priority-Medien (global) | | `GET /media//logos/` | Manuell hochgeladenes Kundenlogo | +| `GET /admin/help` | Hilfeseite zur Bedienung | +| `GET /customer` | Alias für `/willkommen` | | `GET /media//background/` | Hintergrundbild der Willkommensseite | ### Heartbeat / Online-Status