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>
4.9 KiB
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.
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)
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):
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:
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
./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
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-Forist wichtig: Der Login-Schutz (max. 5 Fehlversuche in 10 Minuten) zählt pro echter Client-IP.- Ohne
client_max_body_sizeschlagen 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 alsclient_max_body_size 16m;eintragen.
6. Nützliche Befehle
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.1meint 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(legtupdate-docker.shan). Läuft dort der Agent P42-S.M., im Monitoring „Server-Auslastung (P42-S.M.)“ mit der Adressehttp://p42-sm:9142und dessen Token eintragen. - Zeitzone ist
Europe/Berlin(für Uhrzeiten in Monitoring und Logs).