# Stage 1: Build FROM node:20-alpine AS builder # Définir le répertoire de travail WORKDIR /app # Copier les fichiers de dépendances COPY package*.json ./ # Installer les dépendances avec --legacy-peer-deps pour résoudre les conflits RUN npm ci --legacy-peer-deps # Copier le code source COPY . . # Builder l'application RUN npm run build # Stage 2: Production FROM node:20-alpine AS production # Installer dumb-init pour une meilleure gestion des signaux RUN apk add --no-cache dumb-init # Créer un utilisateur non-root RUN addgroup -g 1001 -S nodejs && \ adduser -S nestjs -u 1001 # Définir le répertoire de travail WORKDIR /app # Copier package.json et package-lock.json COPY package*.json ./ # Installer UNIQUEMENT les dépendances de production avec --legacy-peer-deps RUN npm ci --omit=dev --legacy-peer-deps && \ npm cache clean --force # Copier le code buildé depuis le builder COPY --from=builder --chown=nestjs:nodejs /app/dist ./dist # Changer le propriétaire des fichiers RUN chown -R nestjs:nodejs /app # Utiliser l'utilisateur non-root USER nestjs # Exposer le port (ajustez selon votre configuration) EXPOSE 3000 # Healthcheck #HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ # CMD node -e "require('http').get('http://localhost:3000/health', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})" # Démarrer l'application avec dumb-init ENTRYPOINT ["dumb-init", "--"] CMD ["node", "dist/main"]