From 220298f50d5e2d545f325b24235cad009abf9a09 Mon Sep 17 00:00:00 2001 From: Florian Wilde Date: Sat, 25 Jul 2026 20:11:25 +0200 Subject: [PATCH] fix(docker): Prisma-CLI im Laufzeit-Image lauffaehig machen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- Dockerfile | 14 ++++++++++++-- docker/entrypoint.sh | 7 ++++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4204884..b9dfc76 100644 --- a/Dockerfile +++ b/Dockerfile @@ -39,12 +39,22 @@ ENV HOSTNAME=0.0.0.0 RUN addgroup -g 1001 -S nodejs && adduser -S nextjs -u 1001 +# Prisma-CLI fuer "migrate deploy" beim Containerstart. Sie bekommt eine +# eigene, minimale Installation unter /opt: aus dem Builder laesst sie sich +# nicht herausloesen, weil @prisma/config einen ganzen Abhaengigkeitsbaum +# nachzieht (effect, c12, …). Die Version wird aus dem Builder uebernommen, +# damit CLI und generierter Client nicht auseinanderlaufen. +COPY --from=builder /app/node_modules/prisma/package.json /tmp/prisma-cli.json +RUN npm install --prefix /opt/prisma-cli --no-save --no-audit --no-fund \ + "prisma@$(node -p "require('/tmp/prisma-cli.json').version")" \ + && rm -f /tmp/prisma-cli.json \ + && npm cache clean --force + COPY --from=builder /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static -# Prisma-CLI, Engines und Schema fuer "migrate deploy" beim Containerstart. -COPY --from=builder --chown=nextjs:nodejs /app/node_modules/prisma ./node_modules/prisma +# Query-Engine und Schema fuer die Laufzeit bzw. die Migration. COPY --from=builder --chown=nextjs:nodejs /app/node_modules/@prisma ./node_modules/@prisma COPY --from=builder --chown=nextjs:nodejs /app/node_modules/.prisma ./node_modules/.prisma COPY --from=builder --chown=nextjs:nodejs /app/prisma ./prisma diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index b1b5f9c..fe9b74b 100644 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -4,7 +4,7 @@ # ───────────────────────────────────────────────────────────── set -e -PRISMA_CLI="/app/node_modules/prisma/build/index.js" +PRISMA_CLI="/opt/prisma-cli/node_modules/prisma/build/index.js" SCHEMA="/app/prisma/schema.prisma" if [ -z "$DATABASE_URL" ]; then @@ -12,6 +12,11 @@ if [ -z "$DATABASE_URL" ]; then 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