Doku: Deployment-Stand und Entscheidungen nachgezogen

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-05 11:25:27 +02:00
parent be525641aa
commit b06a1d2103
2 changed files with 24 additions and 6 deletions

View File

@@ -1,7 +1,7 @@
# QR-Tabellen (table.lehrstun.de)
## Status
**Phase:** MVP fertig — lokal verifiziert, Deployment auf Hetzner in Arbeit
**Phase:** MVP live auf https://table.lehrstun.de (Admin: /admin/, Basic Auth)
**Stand:** 2026-07-05
## Zweck
@@ -41,10 +41,13 @@ tests/test_engine.py — Selbsttest ohne pytest
4. Validierung (URLs, Bewertung 1-5, Zahlen); bei Fehlern wird nichts gespeichert
5. Version abgelegt + in sich geschlossene HTML-Seite nach `public/<slug>/` gerendert
### Produktion (Ziel)
- Öffentliche Seiten: Nginx liefert `public/` statisch aus (App-Ausfall egal)
- Admin-Panel: Flask via gunicorn + systemd, hinter Nginx Basic Auth unter `/admin`
- Env: `QT_BASE_URL=https://table.lehrstun.de`, `QT_DATA_DIR`, `QT_PUBLIC_DIR`
### Produktion (live seit 2026-07-05)
- Server: Hetzner, `~/qr-tabellen` (Klon von Gitea `admin/qr-tabellen`, öffentliches Repo)
- Öffentliche Seiten: Nginx statisch aus `/var/www/table` (verifiziert: bleiben bei App-Stopp online)
- Admin: gunicorn (Port 8010) via systemd `qr-tabellen.service`, Nginx Basic Auth unter `/admin`
- Zugangsdaten: lokal in `~/.config/claude-secrets/qr-tabellen.env`; Hash in `/etc/nginx/htpasswd-table`
- TLS: certbot (Let's Encrypt), DNS via hetznerdns.py angelegt
- Deploy-Update: `ssh herb@46.225.114.15`, `cd ~/qr-tabellen && git pull && sudo systemctl restart qr-tabellen`
## Design
Tokens in `table.css` (`:root`-Variablen: Farben, Fonts, QR-Größe, Breite).
@@ -67,6 +70,7 @@ lokal hosten (kein Google-CDN, Schulkontext). Print-Media-Query vorhanden.
- Keine
## Nächste Schritte
- [ ] Deployment: DNS `table.lehrstun.de`, Gitea-Repo, gunicorn + systemd, Nginx (statisch + /admin Basic Auth), TLS
- [x] Deployment: DNS `table.lehrstun.de`, Gitea-Repo, gunicorn + systemd, Nginx (statisch + /admin Basic Auth), TLS
- [ ] Demo-Tabelle (`demo-stationenlernen`) nach dem Ausprobieren im Admin löschen
- [ ] Design-Feintuning (Tokens in table.css), ggf. Fonts lokal hosten
- [ ] Später: XLSX-Direkt-Upload, QR-Label-Styling, XLSX-Re-Export mit QR-Bildern

View File

@@ -24,3 +24,17 @@
später.
- **Global:** Docker-Default aus den Infrastruktur-Regeln gestrichen — Docker
nur noch als Vorschlag für Projekte mit eigenem Ökosystem.
## 2026-07-05 — Deployment auf Hetzner
- **Gitea-Repo öffentlich** statt privat: entspricht dem Muster der anderen
Web-Projekte (arduino/3d.lehrstun.de) und vermeidet, dass der Gitea-Token
auf dem Server abgelegt werden muss. Das Repo enthält keine Secrets.
- **gunicorn (2 Worker, Port 8010) + systemd** statt Flask-Dev-Server;
`QT_PUBLIC_DIR=/var/www/table`, damit Nginx die öffentlichen Seiten ohne
Zugriff auf `/home/herb` ausliefern kann.
- **Basic Auth in Nginx**, nicht in der App: `/etc/nginx/htpasswd-table`
(apr1-Hash), Klartext-Zugangsdaten nur lokal in
`~/.config/claude-secrets/qr-tabellen.env`.
- **Verifiziert:** kompletter Workflow live (Tabelle anlegen → Vorlage →
Upload → veröffentlichte Seite mit QR-SVGs); öffentliche Seiten bleiben
bei gestopptem App-Prozess erreichbar (Nginx statisch).