Files
guyg1474andClaude Opus 5.5 b30acb652a Listen mit eigenem Vorrat und Einkauf, Städte anderer auf der Reise-Karte, Design "Fabrik"
Vorrat & Einkauf:
- Mehrere Listen (z. B. "Zuhause", "Urlaub"), jede mit eigenem Vorrat und
  eigener Einkaufsliste; Auswahl oben auf der Seite, gemerkt pro Browser
- Beim Anlegen festlegen, wer die Liste sieht: alle Konten oder nur
  ausgewählte (Ersteller sieht sie immer); ändern/löschen nur Ersteller
  und Administratoren
- Gekauft, aufgebraucht, Nachkaufen und Rezeptabgleich wirken innerhalb
  der gewählten Liste
- Migration: bisheriger Vorrat und Einkauf werden zur Liste "Zuhause"
  (für alle sichtbar)

Reisen:
- Schalter "Städte anderer zeigen": Städte der übrigen Konten in je einer
  eigenen Farbe, einzelne Personen ein-/ausblendbar, nur lesend
- Info-Karte zeigt, wer noch in einer Stadt bzw. einem Land war

Design "Fabrik" (Industrie-Inventar à la Satisfactory):
- Stahlplatten mit Schrauben, Titelleisten mit Fenstersymbol, gelb
  leuchtende Hauptbuttons, orange Mengen-Zähler, Warnstreifen,
  Riffelblech und drehende Zahnräder im Hintergrund
- Schriften Roboto / Roboto Condensed (OFL), lokal eingebunden

Doku: README verlinkt das zugehörige Repository P42-S.M.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 11:50:46 +02:00

113 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# P42 Dashboard auf dem Server betreiben (Docker + eigener nginx)
Der Container öffnet **nur einen internen Port** (Standard `127.0.0.1:3000`). Von außen erreichbar wird das
Dashboard ausschließlich über deinen nginx, der per HTTPS auf diesen Port weiterleitet.
- **Daten** (`data/`: Datenbank + hochgeladene Bilder) liegen auf dem Server außerhalb des Containers.
- **Einstellungen** (`config.json`: API-Keys, Wikipedia-Kontakt) werden nur lesend eingebunden, nicht ins Image gebaut.
- Beides bleibt bei Updates und beim Neubau des Containers erhalten.
## 1. Projekt auf den Server holen (einmalig)
Der Code liegt in https://github.com/guyg1474/p42.f-w. `config.json`, `data/` und `.env` stehen in `.gitignore` –
Schlüssel und Daten landen nie im Repository.
`/pfad/zu/docker` ist ein Platzhalter – durch den Container-Ordner auf dem Server ersetzen.
```bash
mkdir -p /pfad/zu/docker
git clone https://github.com/guyg1474/p42.f-w.git /pfad/zu/docker/p42
cd /pfad/zu/docker/p42
```
Das Repository ist öffentlich, Klonen klappt daher ohne Schlüssel. Wird es später privat, wie beim HCRB-Projekt einen
Deploy-Key (nur Lesezugriff) anlegen und mit `git@github.com:guyg1474/p42.f-w.git` klonen.
`deploy/update-docker.sh` holt bei jedem Aufruf per `git pull` den neuesten Stand und baut den Container neu.
## 2. Einstellungen und Daten (einmalig, auf dem Server)
```bash
cd /pfad/zu/docker/p42
cp config.example.json config.json # nur falls nicht mitkopiert – API-Keys etc. eintragen
chmod +x deploy/*.sh
# Datenordner: der Container läuft als UID 1000 und muss hier schreiben dürfen
mkdir -p data && sudo chown -R 1000:1000 data
```
Bestehende Daten übernehmen (lokal ausführen, den lokalen Server vorher stoppen, damit die Datenbank vollständig ist):
```bash
scp -r data config.json DEIN-USER@SERVER:/pfad/zu/docker/p42/
# danach auf dem Server: sudo chown -R 1000:1000 /pfad/zu/docker/p42/data
```
Neue Tabellen und Spalten legt der Server beim ersten Start selbst an.
## 3. Port und Bindung (optional)
Standard: Port `3000`, nur auf `127.0.0.1` – passt, wenn nginx **direkt auf dem Server** läuft.
Prüfen, ob der Port frei ist (keine Ausgabe = frei): `sudo ss -ltnp | grep ':3000 '`
Anpassen über `.env`:
```bash
cp .env.example .env
nano .env
```
| Variable | Bedeutung |
|---|---|
| `P42_PORT` | Port auf dem Server (Ziel für nginx) |
| `P42_BIND` | `127.0.0.1` für nginx auf dem Server. Läuft nginx als Docker-Container (z. B. Nginx Proxy Manager), die lokale Server-IP eintragen (`hostname -I`). Nicht `0.0.0.0`, sonst ist der Port offen im Netz. |
| `P42_TRUSTED_PROXIES` | Wem die `X-Forwarded-*`-Header geglaubt werden. `*` ist sicher, solange nur nginx den Port erreicht. |
## 4. Starten / Updaten
```bash
./deploy/update-docker.sh
```
Baut das Image (Frontend + Backend), startet den Container und zeigt den Status. Bei einem Git-Projekt holt es vorher
den neuen Code. Nach etwa 15 Sekunden sollte `docker compose ps` den Zustand `healthy` zeigen.
Erster Aufruf über die Domain: Es erscheint die Einrichtung des ersten Kontos (wird Administrator) – oder, mit
übernommenen Daten, die normale Anmeldung.
## 5. nginx (machst du) – was das Dashboard braucht
```nginx
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; # sonst bekommt das Login-Cookie kein "Secure"
client_max_body_size 16m; # Bild-Uploads bis 15 MB (nginx-Standard: 1 MB)
proxy_read_timeout 60s; # Rezept-/Infoabrufe können ein paar Sekunden dauern
}
```
- `X-Forwarded-For` ist wichtig: Der Login-Schutz (max. 5 Fehlversuche in 10 Minuten) zählt pro echter Client-IP.
- Ohne `client_max_body_size` schlagen Fotos über 1 MB mit Fehler 413 fehl.
- Nginx Proxy Manager: „Forward Hostname/IP" = Server-IP, „Forward Port" = `P42_PORT`; die Größe im Reiter
*Advanced* als `client_max_body_size 16m;` eintragen.
## 6. Nützliche Befehle
```bash
docker compose logs -f # Log ansehen
docker compose restart # nach Änderungen an config.json
docker compose exec p42 python -m app.reset_password BENUTZERNAME # Passwort zurücksetzen
```
**Backup:** Container kurz stoppen (`docker compose stop`), Ordner `data/` sichern, wieder starten (`docker compose start`).
## Hinweise
- **Monitoring:** Die Prüfungen laufen jetzt aus dem Container. `localhost`/`127.0.0.1` meint dort den Container
selbst, nicht den Server – für Dienste auf dem Server dessen LAN-IP eintragen (z. B. `192.168.0.10:22`).
- **Server-Auslastung:** Das Dashboard hängt zusätzlich im Docker-Netz `p42` (legt `update-docker.sh` an).
Läuft dort der Agent [P42-S.M.](https://github.com/guyg1474/p42.s-m), im Monitoring „Server-Auslastung (P42-S.M.)“ mit der Adresse
`http://p42-sm:9142` und dessen Token eintragen.
- **Zeitzone** ist `Europe/Berlin` (für Uhrzeiten in Monitoring und Logs).