# Frontend image for Next.js (dev server + standalone production runner) # Dependency + build stage for production FROM node:22-bookworm-slim AS builder WORKDIR /app ENV NODE_ENV=production \ NEXT_TELEMETRY_DISABLED=1 # Install dependencies first for better Docker layer caching COPY package*.json ./ RUN npm ci --ignore-scripts # Copy full source and build standalone output COPY . . RUN npm run build # Dev image keeps the toolchain for next dev FROM node:22-bookworm-slim AS dev WORKDIR /app ENV NODE_ENV=development \ NEXT_TELEMETRY_DISABLED=1 COPY package*.json ./ RUN npm install COPY . . CMD ["npm", "run", "dev"] # Production runtime: minimal Node image serving the standalone build FROM node:22-slim AS runner WORKDIR /app ENV NODE_ENV=production \ NEXT_TELEMETRY_DISABLED=1 \ PORT=3000 # Copy only the files required to serve the built app COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/public ./public COPY --from=builder /app/.next/static ./.next/static # Drop privileges to the bundled node user for safety USER node EXPOSE 3000 # Next.js standalone exposes server.js at the root of the standalone output CMD ["node", "server.js"]