Doku: Deployment-Stand und Entscheidungen nachgezogen
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
16
CLAUDE.md
16
CLAUDE.md
@@ -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
|
||||
|
||||
@@ -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).
|
||||
|
||||
Reference in New Issue
Block a user