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>
This commit is contained in:
commit
dd58b3d1f8
75 files changed
+11418
No files matched your search
@@ -0,0 +1,100 @@
|
||||
# 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).
|
||||
Reference in new issue
Block a user