feat: add Docker support with demo mode and database reset functionality

This commit is contained in:
Paul Schoeneck committed 2026-11-03 08:50:48 +01:00
1 parent 75af38a4b6
commit 373b9278d1
12 files changed
+248 -5

No files matched your search

+77
View File
@@ -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