feat: add Docker support with demo mode and database reset functionality
This commit is contained in:
1 parent
75af38a4b6
commit
373b9278d1
12 files changed
+248
-5
No files matched your search
@@ -8,6 +8,83 @@ SPDX-License-Identifier: AGPL-3.0-only AND LicenseRef-KIBU-Additional-Terms
|
||||
|
||||
Lokale Web-App für die Kinderbetreuung mit Next.js, TypeScript und einer echten PostgreSQL-Datenbank. Keine externen Dienste, Fonts oder Bild-Uploads. Kinderkarten verwenden Initialen.
|
||||
|
||||
## Docker und oeffentliche Demo
|
||||
|
||||
Das gleiche Image unterstuetzt normale Instanzen und einen ausdruecklichen
|
||||
Demomodus. Die Demo ist eine voll bearbeitbare, gemeinsam genutzte Instanz mit
|
||||
12 fiktiven Kindern, Wochenplaenen, Abholberechtigungen und Anwesenheitsverlauf.
|
||||
Nur im Demomodus sind E-Mail und Passwort im normalen Login vorausgefuellt:
|
||||
`demo@kibu.local` / `KIBU-Demo-2026!`. Es gibt keinen Authentifizierungs-Bypass.
|
||||
Aufnahmerunden koennen wie in einer normalen Instanz angelegt werden.
|
||||
|
||||
**Keine echten Daten eingeben! Jeder App-Start loescht alle Demo-Daten und
|
||||
Zugaenge, ersetzt sie durch Beispieldaten und macht alte Sitzungen ungueltig.**
|
||||
Auch ein automatischer App-Neustart nach einem Fehler setzt die Demo zurueck.
|
||||
Die Demo-Datenbank liegt zusaetzlich auf einem fluechtigen `tmpfs`.
|
||||
Nicht mehrfach skalieren: es ist eine einzelne App mit gemeinsamer Datenbank.
|
||||
Der Login, Passwortaenderungen und andere Funktionen verhalten sich normal;
|
||||
aendert jemand das gemeinsame Passwort, stellt ein App-Neustart es wieder her.
|
||||
|
||||
### Lokal bauen und starten
|
||||
|
||||
Docker Desktop mit Linux-Containern muss laufen. Compose verwendet ein separates
|
||||
Projekt `kibu-demo`, eine separate Datenbank ohne veroeffentlichten DB-Port und
|
||||
standardmaessig <http://127.0.0.1:3001>. Die bisherige lokale Instanz auf Port 3000
|
||||
und ihr Datenvolume bleiben unberuehrt.
|
||||
|
||||
```powershell
|
||||
docker compose -f compose.demo.yaml up -d --build --wait
|
||||
docker compose -f compose.demo.yaml logs app
|
||||
# App neu starten und damit Demo-Daten neu erzeugen:
|
||||
docker compose -f compose.demo.yaml restart app
|
||||
# Nur diese Demo stoppen:
|
||||
docker compose -f compose.demo.yaml down
|
||||
```
|
||||
|
||||
### Image pushen und auf einem anderen Host starten
|
||||
|
||||
```powershell
|
||||
docker build -t git.voidcube.de/pixo2000/kibu:demo .
|
||||
docker login git.voidcube.de
|
||||
docker push git.voidcube.de/pixo2000/kibu:demo
|
||||
```
|
||||
|
||||
Auf dem Zielhost nur `compose.demo.yaml` bereitstellen. Bei privater Registry
|
||||
vorher dort ebenfalls anmelden, dann:
|
||||
|
||||
```powershell
|
||||
docker compose -f compose.demo.yaml pull
|
||||
docker compose -f compose.demo.yaml up -d --no-build --wait
|
||||
```
|
||||
|
||||
`KIBU_IMAGE` kann ein anderes Image/Tag oder einen unveraenderlichen Digest setzen.
|
||||
`DEMO_PORT` aendert den Host-Port. `DEMO_BIND_ADDRESS` ist absichtlich
|
||||
`127.0.0.1`; fuer direkten externen Zugriff muss die Bindung bewusst geaendert
|
||||
werden. Vorzugsweise HTTPS ueber einen Reverse Proxy nutzen und dann
|
||||
`DEMO_SESSION_SECURE=true` setzen. Gemeinsame Demo-Zugaenge sind keine
|
||||
Sicherheitsgrenze fuer vertrauliche Daten. Vor oeffentlichem Betrieb sind
|
||||
Ressourcen-/Request-Limits am Proxy und die Betriebsgrenzen unten zu beachten.
|
||||
|
||||
### Normale Instanz mit dem Image
|
||||
|
||||
Ohne `DEMO_MODE=true` bleiben die Loginfelder leer; der Container fuehrt nur
|
||||
`db:setup` aus und behaelt bestehende Daten. `DATABASE_URL` auf die eigene
|
||||
PostgreSQL-Datenbank setzen; optional `BOOTSTRAP_EMAIL`, `BOOTSTRAP_PASSWORD`,
|
||||
`APP_TIMEZONE` und `SESSION_SECURE` konfigurieren. Die App lauscht im Container
|
||||
auf `0.0.0.0:3000`. DB-Readiness vor App-Start sicherstellen.
|
||||
|
||||
Der destruktive Container-Demostart erfordert gemeinsam `DEMO_MODE=true`,
|
||||
`DEMO_RESET_ON_START=true` und genau `demo-db/kibu_demo` als Datenbankziel.
|
||||
Diese Einstellungen niemals auf echte Daten umbiegen. Die normalen lokalen
|
||||
Reset-Befehle bleiben auf lokale Ziele begrenzt; nur das ausdruecklich
|
||||
aktivierte, benannte Container-Demoziel ist zusaetzlich erlaubt.
|
||||
|
||||
Das Image laeuft als unprivilegierter Node-Benutzer und enthaelt Lizenztexte,
|
||||
Quellcode sowie die fuer Einrichtung und Build erforderlichen Werkzeuge.
|
||||
`.env`, lokale Daten, Git-Metadaten und lokale Build-Artefakte werden nicht
|
||||
in den Build-Kontext uebernommen. Vor dem Push muessen Lizenz-/Quellcodehinweise
|
||||
und die veroeffentlichte Quellversion zum Image passen (siehe unten).
|
||||
|
||||
## Lizenz
|
||||
|
||||
Copyright (C) 2026 Paul Schoeneck. Originaler KIBU-Code steht unter
|
||||
|
||||
Reference in new issue
Block a user