# ---------- Build-Stage ---------- # Debian statt Alpine: Prisma 5.x erkennt hier die OpenSSL-3-Engine # (debian-openssl-3.0.x) zuverlaessig. Auf aktuellen Alpine-Versionen # (OpenSSL >= 3.5) faellt Prisma auf die nicht verfuegbare 1.1-Engine # zurueck und der Client kann nicht initialisiert werden. FROM node:20-bookworm-slim AS builder WORKDIR /app ARG HUB_BASE_PATH="" ARG MPM_AUTH_MODE="false" ENV HUB_BASE_PATH=${HUB_BASE_PATH} ENV MPM_AUTH_MODE=${MPM_AUTH_MODE} ENV NEXT_PUBLIC_APP_BASE_PATH=${HUB_BASE_PATH} COPY package.json package-lock.json ./ # ci statt install: reproduzierbarer Build aus dem Lockfile RUN npm ci # openssl-Binary: Prisma nutzt es zur Erkennung der Engine-Version. # Ohne dieses Binary faellt Prisma auf debian-openssl-1.1.x zurueck, # dessen Engine auf Bookworm (OpenSSL 3) nicht ladbar ist. RUN apt-get update -y \ && apt-get install -y --no-install-recommends openssl \ && rm -rf /var/lib/apt/lists/* COPY prisma ./prisma RUN npx prisma generate COPY . . RUN npm run build # ---------- Runtime-Stage ---------- FROM node:20-bookworm-slim AS runner WORKDIR /app ENV NODE_ENV=production ENV HOSTNAME=0.0.0.0 ENV PORT=3000 # openssl auch zur Laufzeit: die Prisma-CLI (migrate deploy) nutzt es # zur Engine-Erkennung; ohne Binary sucht sie die 1.1.x-Engine und failt. RUN apt-get update -y \ && apt-get install -y --no-install-recommends openssl \ && rm -rf /var/lib/apt/lists/* RUN addgroup --system nodejs && adduser --system --ingroup nodejs nextjs 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 Client inkl. Query-Engine fuer den Laufzeit-Container COPY --from=builder --chown=nextjs:nodejs /app/node_modules/.prisma ./node_modules/.prisma # Prisma-CLI fuer "migrate deploy" beim Start (kein npx-Download zur Laufzeit) 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 # bcryptjs fuer das Admin-Seed-Script (manuell ausfuehrbar, nicht beim Start) COPY --from=builder --chown=nextjs:nodejs /app/node_modules/bcryptjs ./node_modules/bcryptjs COPY --from=builder --chown=nextjs:nodejs /app/container-entrypoint.cjs ./container-entrypoint.cjs COPY --from=builder --chown=nextjs:nodejs /app/module-runtime.js ./module-runtime.js COPY --from=builder --chown=nextjs:nodejs /app/platform-module-sdk.cjs ./platform-module-sdk.cjs COPY --from=builder --chown=nextjs:nodejs /app/module.json ./module.json USER nextjs EXPOSE 3000 41030 # Der gemeinsame Entrypoint setzt die Datenbankverbindung, wendet # Migrationen an und startet anschließend Standalone- oder MPM-Betrieb. CMD ["node", "container-entrypoint.cjs"]