Make admin seed idempotent-upsert so a corrupted password can be fixed by restart
Build and Deploy / version (push) Successful in 1s
Build and Deploy / build (push) Successful in 6s
Build and Deploy / deploy (push) Successful in 1s

Grund: $ in SEED_ADMIN_PASSWORD wird von Docker-Compose/Portainer als
Variablen-Referenz interpretiert und kann dadurch verstümmelt beim Container
ankommen. Seed synct das Passwort jetzt bei jedem Start neu, solange die
Variable gesetzt ist, statt nur einmalig anzulegen. README um Warnhinweis
ergänzt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Fidelis Huber
2026-08-21 18:33:36 +02:00
co-authored by Claude Sonnet 5
parent 11a3753d76
commit ca5d240cf6
2 changed files with 23 additions and 13 deletions
+13 -6
View File
@@ -102,14 +102,21 @@ Benutzername anmelden". Damit das funktioniert, muss im Portainer-Stack `JWT_SEC
gesetzt sein (Schritt 4).
Ein erstes Konto legt der Server **automatisch beim Start** an, wenn
`SEED_ADMIN_USERNAME` und `SEED_ADMIN_PASSWORD` als Stack-Env gesetzt sind (idempotent
läuft bei jedem Neustart mit, legt aber nur an, was noch nicht existiert). Das
Klartext-Passwort steht dabei nur in der Portainer-Stack-Konfiguration, nie im Git-Repo
der Server speichert ausschließlich einen bcrypt-Hash in der Datenbank.
`SEED_ADMIN_USERNAME` und `SEED_ADMIN_PASSWORD` als Stack-Env gesetzt sind (Upsert
läuft bei jedem Neustart mit und synchronisiert das Passwort neu, solange die Variable
gesetzt ist ein falsch übernommenes Passwort lässt sich also einfach per Neustart
korrigieren). Das Klartext-Passwort steht dabei nur in der Portainer-Stack-Konfiguration,
nie im Git-Repo der Server speichert ausschließlich einen bcrypt-Hash in der Datenbank.
**Vorsicht bei `$` im Passwort:** Docker-Compose/Portainer interpretieren `$` in
Env-Werten als Beginn einer Variablen-Referenz (`$xyz` wird als `${xyz}` gelesen und bei
fehlender Definition oft still zu leer aufgelöst) ein Passwort mit `$` kann dadurch
unbemerkt anders ankommen, als eingetippt. Entweder jedes `$` im Passwortwert als `$$`
escapen, oder einfacher ein Passwort ohne `$` verwenden.
Optional danach `SEED_ADMIN_PASSWORD` aus dem Stack wieder entfernen (Härtung), sobald
das Konto einmal erfolgreich angelegt wurde `SEED_ADMIN_USERNAME` kann stehen bleiben,
ohne Passwort passiert dann nichts mehr. Weitere lokale Konten aktuell nur direkt in der
das Konto wie gewünscht funktioniert `SEED_ADMIN_USERNAME` kann stehen bleiben, ohne
Passwort-Variable wird nichts mehr verändert. Weitere lokale Konten aktuell nur direkt in der
Datenbank anlegbar (`INSERT INTO users …` mit einem bcrypt-Hash) ein Verwaltungs-UI
dafür gibt es noch nicht.