Der App-Container brach beim Start mit "Cannot find module 'effect'" ab und lief in die Wiederholschleife des Entrypoints. Ursache: aus dem Builder wurden nur node_modules/prisma und node_modules/@prisma uebernommen. Die CLI laedt aber @prisma/config, und das zieht einen eigenen Abhaengigkeitsbaum (effect, c12, …) nach, der ausserhalb dieser beiden Verzeichnisse liegt. Statt einzelne Pakete nachzukopieren bekommt die CLI jetzt eine eigene, minimale Installation unter /opt/prisma-cli. Die Version wird aus der package.json des Builders gelesen, damit CLI und generierter Client nicht auseinanderlaufen. Der Entrypoint bricht ausserdem mit klarer Meldung ab, wenn die CLI fehlt, statt fuenfzehnmal auf eine vermeintlich nicht bereite Datenbank zu warten. Verifiziert: docker compose --profile full up -d --build spielt die Migrationen ein, der Container meldet sich als healthy und erreicht die Git-APIs nach aussen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
36 lines
1.3 KiB
Bash
36 lines
1.3 KiB
Bash
#!/bin/sh
|
||
# ─────────────────────────────────────────────────────────────
|
||
# Startet Nebula im Container: erst Migrationen, dann der Server.
|
||
# ─────────────────────────────────────────────────────────────
|
||
set -e
|
||
|
||
PRISMA_CLI="/opt/prisma-cli/node_modules/prisma/build/index.js"
|
||
SCHEMA="/app/prisma/schema.prisma"
|
||
|
||
if [ -z "$DATABASE_URL" ]; then
|
||
echo "[nebula] FEHLER: DATABASE_URL ist nicht gesetzt." >&2
|
||
exit 1
|
||
fi
|
||
|
||
if [ ! -f "$PRISMA_CLI" ]; then
|
||
echo "[nebula] FEHLER: Prisma-CLI nicht unter $PRISMA_CLI gefunden." >&2
|
||
exit 1
|
||
fi
|
||
|
||
echo "[nebula] Migrationen werden eingespielt…"
|
||
|
||
attempt=0
|
||
max_attempts=15
|
||
until node "$PRISMA_CLI" migrate deploy --schema "$SCHEMA"; do
|
||
attempt=$((attempt + 1))
|
||
if [ "$attempt" -ge "$max_attempts" ]; then
|
||
echo "[nebula] FEHLER: Migration nach $max_attempts Versuchen fehlgeschlagen." >&2
|
||
exit 1
|
||
fi
|
||
echo "[nebula] Datenbank noch nicht bereit – neuer Versuch in 3s ($attempt/$max_attempts)"
|
||
sleep 3
|
||
done
|
||
|
||
echo "[nebula] Migrationen ok. Server startet auf Port ${PORT:-3000}."
|
||
exec "$@"
|