Statt lokal zu bauen, verwendet docker-compose.yml jetzt gitea.korbel.network/nico/wichteln:latest – auf dem Server reicht damit ein einmaliges docker login plus compose up.
78 lines
3.0 KiB
Markdown
78 lines
3.0 KiB
Markdown
# Wichtel-Werkstatt 🎅
|
||
|
||
Wichteln ohne Zettel-Chaos: Ein Admin erstellt einen Raum, alle melden sich per
|
||
Link an, Ausschlüsse werden festgelegt (z. B. Ehepartner), dann wird fair
|
||
ausgelost. Jede Person sieht **nur ihr eigenes Ergebnis** – der Admin sieht
|
||
keine Zuweisungen.
|
||
|
||
## So funktioniert's
|
||
|
||
1. **Raum erstellen:** Auf der Startseite Raumname + Admin-Passwort angeben.
|
||
Es gibt einen Einladungslink und einen 6-stelligen Code zum Weitergeben.
|
||
2. **Anmelden:** Alle Teilnehmer öffnen den Link und geben ihren Namen ein.
|
||
Der Browser merkt sich die Teilnahme über ein langlebiges Cookie.
|
||
Der Admin nimmt über „Selbst mitwichteln" im Panel direkt selbst teil.
|
||
3. **Ausschlüsse:** Der Admin legt einseitig fest: „A darf nicht B ziehen“.
|
||
(Ehepaare = zwei Einträge, je einer pro Richtung.)
|
||
4. **Auslosen:** Ab 3 Teilnehmern. Danach ist der Raum eingefroren –
|
||
nichts kann mehr geändert werden.
|
||
5. **Ergebnis:** Jeder Teilnehmer sieht auf seiner Seite, wen er beschenkt.
|
||
Der Admin sieht nur, *dass* ausgelost wurde – nicht, wer wen gezogen hat.
|
||
|
||
**Cookie verloren?** Der Admin kann im Panel jederzeit (auch nach der Auslosung)
|
||
einen Einmal-Wiederherstellungslink für eine Person erstellen. Damit bekommt
|
||
sie auf einem beliebigen Gerät ihr Ergebnis zurück. Der Link funktioniert
|
||
genau einmal und verrät dem Admin weiterhin nichts über die Zuweisungen.
|
||
|
||
## Technik
|
||
|
||
- Python/FastAPI, serverseitig gerenderte Templates (Jinja2), kein Build-Schritt
|
||
- SQLite-Datei in einem Volume – dieses Verzeichnis zu sichern ist das komplette Backup
|
||
- Mobil-zuerst gestaltet, läuft ohne externe CDN/Font-Abhängigkeiten
|
||
|
||
## Lokal testen (Bazzite/podman)
|
||
|
||
```bash
|
||
podman build -t wichteln .
|
||
podman volume create wichtel-data # überlebt Container-Neustarts
|
||
podman run -d --name wichteln -p 127.0.0.1:8080:8000 \
|
||
-v wichtel-data:/data wichteln
|
||
```
|
||
|
||
Dann <http://localhost:8080> öffnen. Stoppen/aufräumen:
|
||
|
||
```bash
|
||
podman rm -f wichteln
|
||
# optional: podman volume rm wichtel-data
|
||
```
|
||
|
||
Alternativ mit Bind-Mount statt Volume (auf SELinux-Systemen wie Bazzite/Fedora
|
||
ist `:z` für das SELinux-Label nötig):
|
||
|
||
```bash
|
||
podman run -d --name wichteln -p 127.0.0.1:8080:8000 -v "$PWD/data:/data:z" localhost/wichteln
|
||
```
|
||
|
||
Die Compose-Datei zieht das fertige Image aus der Gitea-Registry und
|
||
funktioniert sowohl mit `docker compose` (Server) als auch mit
|
||
`podman-compose up -d` lokal – einmalig anmelden nicht vergessen:
|
||
`docker login gitea.korbel.network` bzw. `podman login gitea.korbel.network`.
|
||
|
||
## Auf dem Server (docker compose + nginx)
|
||
|
||
```bash
|
||
docker login gitea.korbel.network # einmalig
|
||
docker compose up -d
|
||
```
|
||
|
||
Der Container lauscht nur auf `127.0.0.1:8000`; davor gehört ein Reverse
|
||
Proxy – siehe [`nginx.example.conf`](nginx.example.conf). **HTTPS wird dringend
|
||
empfohlen**, damit Ergebnis-Cookies nicht unverschlüsselt übertragen werden.
|
||
Die Daten liegen im `./data/`-Verzeichnis neben der Compose-Datei.
|
||
|
||
## Tests
|
||
|
||
```bash
|
||
python3 tests/test_draw.py # Auslosungslogik, ohne Abhängigkeiten
|
||
```
|