From a062f5573bdf7e53e60f2976fa9da9b07f2db81a Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Fri, 19 Dec 2025 09:04:30 +0100 Subject: [PATCH] Refactor Dockerfile to improve DATABASE_URL handling and enhance entrypoint script: Introduce ARG for DATABASE_URL during build, streamline migration commands, and add error handling for migration failures in the entrypoint script. --- Dockerfile | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 19fd03d..412ba16 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,7 +19,9 @@ RUN corepack enable && corepack prepare pnpm@latest --activate COPY --from=deps /app/node_modules ./node_modules COPY . . -ENV DATABASE_URL="postgresql://user:pass@localhost:5432/db" +# ARG pour DATABASE_URL au build (valeur factice par défaut, car prisma generate n'a pas besoin de vraie DB) +ARG DATABASE_URL_BUILD="postgresql://user:pass@localhost:5432/db" +ENV DATABASE_URL=$DATABASE_URL_BUILD RUN pnpm prisma generate ENV NEXT_TELEMETRY_DISABLED=1 @@ -50,12 +52,15 @@ COPY --from=builder --chown=nextjs:nodejs /app/prisma ./prisma # Copier prisma.config.ts (nécessaire pour Prisma 7) COPY --from=builder --chown=nextjs:nodejs /app/prisma.config.ts ./prisma.config.ts -ENV DATABASE_URL="postgresql://user:pass@localhost:5432/db" - # Installer seulement les dépendances de production puis générer Prisma Client +# ARG pour DATABASE_URL au build (valeur factice par défaut, car prisma generate n'a pas besoin de vraie DB) +# Au runtime, DATABASE_URL sera définie par docker-compose.yml (voir ligne 41) +ARG DATABASE_URL_BUILD="postgresql://user:pass@localhost:5432/db" +ENV DATABASE_URL=$DATABASE_URL_BUILD RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store \ pnpm install --frozen-lockfile --prod && \ pnpm dlx prisma generate +# Ne pas définir ENV DATABASE_URL ici - elle sera définie par docker-compose.yml au runtime # Create uploads directories RUN mkdir -p /app/public/uploads /app/public/uploads/backgrounds && \ @@ -70,7 +75,13 @@ RUN echo '#!/bin/sh' > /app/entrypoint.sh && \ echo ' exit 1' >> /app/entrypoint.sh && \ echo 'fi' >> /app/entrypoint.sh && \ echo 'export DATABASE_URL' >> /app/entrypoint.sh && \ - echo 'cd /app && pnpm dlx prisma migrate deploy' >> /app/entrypoint.sh && \ + echo 'cd /app' >> /app/entrypoint.sh && \ + echo 'echo "Applying migrations..."' >> /app/entrypoint.sh && \ + echo 'if ! pnpm dlx prisma migrate deploy; then' >> /app/entrypoint.sh && \ + echo ' echo "Migration failed. Attempting to resolve failed migration..."' >> /app/entrypoint.sh && \ + echo ' pnpm dlx prisma migrate resolve --applied 20251217101717_init_postgres 2>/dev/null || true' >> /app/entrypoint.sh && \ + echo ' pnpm dlx prisma migrate deploy || echo "WARNING: Some migrations may need manual resolution"' >> /app/entrypoint.sh && \ + echo 'fi' >> /app/entrypoint.sh && \ echo 'exec pnpm start' >> /app/entrypoint.sh && \ chmod +x /app/entrypoint.sh && \ chown nextjs:nodejs /app/entrypoint.sh