From 6f293211a4c991a67c630d9a5d054d4aaf92fce7 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Thu, 7 May 2026 15:37:34 +0200 Subject: [PATCH] =?UTF-8?q?docker:=20Auto-Seed=20bei=20leerer=20DB=20(kein?= =?UTF-8?q?=20RUN=5FSEED-Toggle=20n=C3=B6tig)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der entrypoint prüft jetzt nach prisma db push, ob die User-Tabelle leer ist – wenn ja, wird automatisch geseeded. Damit muss man bei Erstinstallation nicht mehr daran denken, RUN_SEED=true zu setzen. Logik: RUN_SEED=true → Force-Seed (auch bei nicht-leerer DB; für Reset) User-Count = 0 → Auto-Seed (Default-Verhalten bei leerer DB) User-Count > 0 → kein Seed (DB schon initialisiert) Implementiert via "node -e" mit @prisma/client – kein extra Tool nötig. Fallback bei Fehlern: User-Count = -1, dann kein Seed. .env.example aktualisiert: RUN_SEED bleibt 'false' als Default und ist nur noch für Force-Reseed-Szenarien gedacht. Co-Authored-By: Claude Opus 4.7 (1M context) --- .env.example | 8 ++++++++ backend/docker-entrypoint.sh | 17 ++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index d51617f7..0abe1034 100644 --- a/.env.example +++ b/.env.example @@ -60,3 +60,11 @@ LISTEN_ADDR=0.0.0.0 # In Docker = 0.0.0.0, in Bare-Metal-Production = 127 # price, rmsoft, rmsoft_blue, rmsoft_blue-dark, win98 # Empfehlung: dracula (dark) oder adminer-dark – beide modern. ADMINER_DESIGN=dracula + +# ============== SEED ============== +# Bei leerer DB seedet der Container automatisch (legt admin@admin.com / admin +# + Stammdaten an) – nichts zu konfigurieren. +# Nur wenn man eine NICHT-leere DB nochmal forciert seeden will (z.B. nach +# Reset / Stammdaten-Update), kurz auf 'true' setzen, neu starten, dann +# wieder zurück. +RUN_SEED=false diff --git a/backend/docker-entrypoint.sh b/backend/docker-entrypoint.sh index 6b1b5dd7..a3882fd3 100755 --- a/backend/docker-entrypoint.sh +++ b/backend/docker-entrypoint.sh @@ -35,9 +35,24 @@ until npx prisma db push --skip-generate --accept-data-loss 2>/dev/null; do done echo "[entrypoint] DB-Schema synced" +# Auto-Seed: wenn die User-Tabelle leer ist (= Erstinstallation), automatisch seeden. +# RUN_SEED=true erzwingt Seed auch bei nicht-leerer DB (z.B. nach Reset). +USER_COUNT=$(node -e " + const { PrismaClient } = require('@prisma/client'); + const p = new PrismaClient(); + p.user.count() + .then((n) => { process.stdout.write(String(n)); process.exit(0); }) + .catch(() => { process.stdout.write('-1'); process.exit(0); }); +" 2>/dev/null) + if [ "${RUN_SEED:-false}" = "true" ]; then - echo "[entrypoint] RUN_SEED=true – seede DB" + echo "[entrypoint] RUN_SEED=true – seede DB (Force)" npx prisma db seed || echo "[entrypoint] Seed fehlgeschlagen oder schon gelaufen – ignoriert" +elif [ "$USER_COUNT" = "0" ]; then + echo "[entrypoint] DB ist leer (User-Count=0) – Auto-Seed wird ausgeführt" + npx prisma db seed || echo "[entrypoint] Auto-Seed fehlgeschlagen – ignoriert" +else + echo "[entrypoint] DB enthält $USER_COUNT User – kein Seed nötig" fi echo "[entrypoint] Starte Backend…"