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

101 lines
4.4 KiB
Markdown
Raw 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 bringen
Das Projekt ist (noch) kein Git-Repository. Entweder per Git (empfohlen, dann klappen Updates mit einem Befehl)
oder einfach kopieren:
```bash
# 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)
```bash
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`:
```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`).
- **Zeitzone** ist `Europe/Berlin` (für Uhrzeiten in Monitoring und Logs).