Files
p42.f-w/DEPLOY.md
T
guyg1474andClaude Opus 5.5 dd58b3d1f8 P42 Dashboard: erster Stand
FastAPI-Backend und React-Frontend mit Konten, Sendungsverfolgung,
Projekt-Artikeln, Vorrat & Einkauf mit Rezeptabgleich, Reise-Weltkarte,
Kanban-Projekten mit Priorität, Server-Monitoring und den Designs
Matrix und Blackwall. Betrieb per Docker hinter nginx (siehe DEPLOY.md).

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

4.4 KiB
Raw Blame History

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 bringen

Das Projekt ist (noch) kein Git-Repository. Entweder per Git (empfohlen, dann klappen Updates mit einem Befehl) oder einfach kopieren:

# lokal, im Ordner Dokumente/Projekte – ohne lokale Umgebungen und Build-Ergebnisse
rsync -av --exclude node_modules --exclude .venv --exclude dist --exclude _alt-node \
  P42-F.W./ DEIN-USER@SERVER:~/festplatte/dockercontainer/p42/

Mit Git: Repository anlegen (config.json, data/ und .env stehen bereits in .gitignore), auf dem Server klonen wie beim HCRB-Projekt (Deploy-Key mit Lesezugriff).

2. Einstellungen und Daten (einmalig, auf dem Server)

cd ~/festplatte/dockercontainer/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: den Ordner data/ vom bisherigen Rechner mitkopieren (Server vorher stoppen, damit die Datenbank vollständig ist). 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-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

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).
  • Zeitzone ist Europe/Berlin (für Uhrzeiten in Monitoring und Logs).