# --- Stage 1: Build --- FROM node:20-alpine AS builder WORKDIR /usr/src/app # Copiar archivos de dependencias COPY package*.json ./ # Instalar TODAS las dependencias (incluyendo devDependencies para posibles builds) RUN npm install # Copiar el resto del código COPY . . # --- Stage 2: Production --- FROM node:20-alpine WORKDIR /usr/src/app # Establecer entorno de producción ENV NODE_ENV=production # Copiar solo los archivos necesarios de la etapa anterior COPY --from=builder /usr/src/app/package*.json ./ COPY --from=builder /usr/src/app/src ./src # Instalar solo dependencias de producción RUN npm install --omit=dev # Crear un usuario no root por seguridad RUN addgroup -S appgroup && adduser -S appuser -G appgroup # Crear directorio de caché y asignar permisos al usuario de la aplicación RUN mkdir -p /usr/src/app/cache && chown -R appuser:appgroup /usr/src/app USER appuser # Exponer el puerto configurado en .env (por defecto 3120) EXPOSE 3120 # Comando para iniciar la aplicación usando node directamente (no nodemon) CMD ["node", "src/index.js"]