docs(env): Beispieldateien kürzen, Erklärungen ins README

Die beiden .env.example zusammen waren 251 Zeilen für 40 Schlüssel – gut
gemeint, aber niemand liest einen Absatz pro Variable. Jetzt eine Zeile je
Schlüssel (58 + 89), die Begründungen stehen im README unter
'Einstellungen', gebündelt als die sieben Dinge, die nicht beim Start
auffallen, sondern später.

Dabei durch einen echten Start aus den Beispieldateien gefunden:
STORAGE_PATH fehlte, Vorgabe ./data wird im Container zu /app/data, und
der Start endete in 'mkdir /app/data: permission denied'. Das Abbild setzt
STORAGE_PATH und TMP_PATH jetzt selbst – es kennt seine Verzeichnisse
besser als eine Beispieldatei. Eine .env darf weiter überschreiben.

Geprüft: jeder Schlüssel, den die Anwendung liest, steht weiterhin in
deploy/.env.example; eine frische Instanz startet allein aus den beiden
Beispieldateien.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
HoneyandClaude Opus 5 committed 2026-08-24 11:27:31 +02:00
1 parent 35ebf609b7
commit 428fd2672c
5 files changed
+195 -186

No files matched your search

+29
View File
@@ -646,6 +646,35 @@ breiteste.
---
## Frische Umgebung nur aus den Beispieldateien (24.08.2026)
Der einzige Test, der zählt: `docker-compose.example.yml` + `.env.example`
kopieren, Passwörter eintragen, starten. Nichts sonst.
Beim ersten Durchlauf brachte er sofort einen Fehler ans Licht, den keine
Codeprüfung findet:
```
migrations up to date
FTL blob storage init failed error="mkdir /app/data: permission denied"
```
`STORAGE_PATH` hat die Voreinstellung `./data` – richtig für ein Binary, das
man von Hand startet, falsch im Container, wo daraus `/app/data` wird statt
des Mounts unter `/data`. Die schlanke `.env.example` führte den Schlüssel
nicht, weil er „eine brauchbare Vorgabe" hat. Hatte er nicht.
Jetzt setzt das **Abbild** `STORAGE_PATH` und `TMP_PATH` selbst. Es kennt seine
Verzeichnisstruktur besser als jede Beispieldatei; eine `.env` darf weiterhin
überschreiben.
- [ ] Frische Umgebung nur aus den beiden Beispieldateien → `migrations up to
date`, `admin account ready`, `listening` 🔎
- [ ] `/health` 200, Anmeldung 200, `data/tmp` liegt auf dem Wirt 🔎
- [ ] Dabei ein Passwort mit `%` und `@` verwendet 🔎
---
## Datenbank-Passwort mit Sonderzeichen (24.08.2026)
Die Verbindungszeichenkette wurde mit `fmt.Sprintf` zusammengeklebt. Beim