# ============================================================================ # Build stage FROM node:20-alpine AS builder # Ajouter des dépendances nécessaires pour Prisma RUN apk add --no-cache libc6-compat openssl WORKDIR /app # Copier les fichiers de dépendances COPY package*.json ./ COPY prisma ./prisma/ # Installer les dépendances RUN npm ci # Générer le client Prisma RUN npx prisma generate # Copier le code source COPY . . # Build l'application RUN npm run build # ============================================================================ # 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 # Copier le schema Prisma COPY 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 # Créer un utilisateur non-root pour la sécurité RUN addgroup -g 1001 -S nodejs && \ adduser -S nestjs -u 1001 # Changer les permissions RUN chown -R nestjs:nodejs /app # Utiliser l'utilisateur non-root USER nestjs # Exposer le port EXPOSE 3000 # Variable d'environnement ENV NODE_ENV=production # Démarrer l'application CMD ["node", "dist/main"]