# FILE: Dockerfile (VERSION CORRIGÉE) # ============================================================================ FROM node:20-alpine AS builder # Ajouter des dépendances nécessaires RUN apk add --no-cache libc6-compat openssl WORKDIR /app # Copier les fichiers de dépendances COPY package*.json ./ COPY tsconfig*.json ./ COPY prisma ./prisma/ # Installer TOUTES les dépendances (dev incluses pour le build) RUN npm ci # Générer le client Prisma RUN npx prisma generate # Copier le code source COPY src ./src # Build l'application RUN npm run build # Vérifier que dist existe RUN ls -la dist/ # ============================================================================ # Production stage # ============================================================================ FROM node:20-alpine AS production # Ajouter OpenSSL pour Prisma RUN apk add --no-cache openssl WORKDIR /app # Copier package.json COPY package*.json ./ # Installer uniquement les dépendances de production RUN npm ci --only=production && npm cache clean --force # Copier le schema Prisma COPY --from=builder /app/prisma ./prisma/ # Générer le client Prisma en production RUN npx prisma generate # Copier les fichiers buildés depuis le builder COPY --from=builder /app/dist ./dist # Vérifier que main.js existe RUN ls -la dist/ && \ if [ ! -f dist/main.js ]; then echo "ERROR: dist/main.js not found!"; exit 1; fi # Créer un utilisateur non-root RUN addgroup -g 1001 -S nodejs && \ adduser -S nestjs -u 1001 && \ chown -R nestjs:nodejs /app USER nestjs EXPOSE 3001 ENV NODE_ENV=production # Démarrer l'application CMD ["node", "dist/src/main.js"]