# Stage 1: Build the React Application FROM node:20-bookworm AS builder WORKDIR /app # Copiamo solo il package.json inizialmente per sfruttare la cache dei layer di Docker COPY package.json ./ # Installiamo tutte le dipendenze (incluse quelle di sviluppo necessarie per il build) # Usiamo npm install invece di npm ci per evitare errori se manca il package-lock.json RUN npm install --legacy-peer-deps --no-audit --no-fund # Copiamo il resto del codice sorgente COPY . . # Eseguiamo il build del frontend (Vite genererà la cartella /dist) RUN npm run build # Stage 2: Setup del Server di Produzione FROM node:20-bookworm-slim WORKDIR /app # Copiamo il package.json per installare le dipendenze di produzione COPY package.json ./ # Installiamo SOLO le dipendenze di produzione # --omit=dev è il modo moderno per escludere le devDependencies RUN npm install --omit=dev --legacy-peer-deps --no-audit --no-fund # Copiamo i file compilati del frontend dallo stage precedente COPY --from=builder /app/dist ./dist # Copiamo il file del server Node.js COPY server.js ./ # Impostiamo le variabili d'ambiente di default ENV NODE_ENV=production ENV PORT=3000 # Esponiamo la porta del server EXPOSE 3000 # Avviamo il server direttamente con node per una migliore gestione dei log e dei segnali CMD ["node", "server.js"]