bootstrap-admin.mjs: Zugangsdaten nicht mehr verlieren, wenn ZUGANGSDATEN.md nicht beschreibbar ist
Der Admin-Benutzer wird immer in der Datenbank angelegt, bevor versucht wird, die generierten Zugangsdaten in ZUGANGSDATEN.md zu schreiben. Schlug dieser Schreibvorgang fehl (z. B. EACCES, weil die per Bind-Mount eingebundene Host-Datei root gehört und der App-Container als nicht-root läuft), flog bisher eine ungefangene Exception – das Skript brach ab, BEVOR das Passwort irgendwo protokolliert wurde. Der Admin existierte dann in der DB, aber niemand kannte sein Passwort mehr. appendFileSync() läuft jetzt in einem try/catch; schlägt der Dateizugriff fehl, werden E-Mail und Passwort stattdessen direkt ins Log geschrieben, und das Skript beendet sich weiterhin mit Exitcode 0 (die eigentlich kritische Operation – der DB-Insert – ist ja bereits erfolgreich). Lokal verifiziert: Skript bricht bei einer nicht beschreibbaren ZUGANGSDATEN.md nicht mehr ab, Zugangsdaten landen im Log, zweiter Lauf bleibt idempotent. DEPLOYMENT.md: Schritt 2 ergänzt um "chmod 666 ZUGANGSDATEN.md" (der eigentliche Auslöser), neue Fehlerbehebung-Einträge für ECONNREFUSED-Startreihenfolge und diesen EACCES-Fall inkl. Recovery-Anleitung für einen bereits verwaisten Admin-Account.
This commit is contained in:
+39
-1
@@ -51,10 +51,12 @@ Docker-Compose-Start ignoriert.
|
||||
|
||||
Zusätzlich eine leere Datei für die automatisch generierten
|
||||
Admin-Zugangsdaten anlegen, da sie per Bind-Mount in den Container
|
||||
eingebunden wird:
|
||||
eingebunden wird. Der App-Container läuft als nicht-root-Nutzer –
|
||||
damit er die Datei beschreiben darf, muss sie für alle schreibbar sein:
|
||||
|
||||
```bash
|
||||
touch ZUGANGSDATEN.md
|
||||
chmod 666 ZUGANGSDATEN.md
|
||||
```
|
||||
|
||||
## 3. App starten
|
||||
@@ -176,6 +178,42 @@ docker compose exec db psql -U postgres -c "ALTER USER postgres WITH PASSWORD '<
|
||||
docker compose --env-file .env.local up -d
|
||||
```
|
||||
|
||||
### `Error: connect ECONNREFUSED ...:5432` beim Start
|
||||
|
||||
Normal beim allerersten Start: Der App-Container versucht sich zu
|
||||
verbinden, bevor PostgreSQL im `db`-Container fertig hochgefahren ist.
|
||||
Dank `restart: unless-stopped` startet der App-Container automatisch
|
||||
neu und verbindet sich, sobald die Datenbank bereit ist (kann ein paar
|
||||
Sekunden bis wenige Minuten dauern). Mit `docker compose logs app -f`
|
||||
verfolgen – taucht der Fehler dauerhaft (mehrere Minuten) weiter auf,
|
||||
`docker compose ps` prüfen, ob der `db`-Container tatsächlich dauerhaft
|
||||
läuft.
|
||||
|
||||
### `EACCES: permission denied, open '/app/ZUGANGSDATEN.md'`
|
||||
|
||||
Die Datei wurde ohne Schreibrecht für alle angelegt (Schritt 2 oben,
|
||||
`chmod 666` fehlte). Der Admin-Benutzer wurde in diesem Fall trotzdem
|
||||
in der Datenbank angelegt, nur die Zugangsdaten konnten nicht in die
|
||||
Datei geschrieben werden – sie stehen dann stattdessen im Log
|
||||
(`docker compose logs app` nach `bootstrap-admin – Admin-Passwort:`
|
||||
durchsuchen). Für zukünftige Deployments zusätzlich die Berechtigung
|
||||
korrigieren:
|
||||
|
||||
```bash
|
||||
chmod 666 ZUGANGSDATEN.md
|
||||
```
|
||||
|
||||
Falls das Passwort auch im Log nicht mehr auffindbar ist (z. B. weil
|
||||
Logs schon rotiert wurden), Admin-Konto neu anlegen lassen:
|
||||
|
||||
```bash
|
||||
docker compose exec db psql -U postgres -d canteen_menu -c "delete from users;"
|
||||
chmod 666 ZUGANGSDATEN.md
|
||||
docker compose restart app
|
||||
docker compose logs app --tail 20
|
||||
cat ZUGANGSDATEN.md
|
||||
```
|
||||
|
||||
## Updates einspielen
|
||||
|
||||
```bash
|
||||
|
||||
Reference in New Issue
Block a user