# ---- 1) Install deps -------------------------------------------------------- FROM node:20-alpine AS deps WORKDIR /app COPY package*.json ./ # Works even if there is no package-lock.json RUN npm install # ---- 2) Build the Next.js app ---------------------------------------------- FROM node:20-alpine AS builder WORKDIR /app ENV NEXT_TELEMETRY_DISABLED=1 COPY --from=deps /app/node_modules ./node_modules COPY . . RUN npm run build # ---- 3) Runtime ------------------------------------------------------------- FROM node:20-alpine AS runner WORKDIR /app ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 ENV PORT=3000 # run as non-root RUN addgroup -g 1001 -S nodejs && adduser -S nextjs -u 1001 # Copy the built app and runtime deps COPY --from=builder /app/.next ./.next COPY --from=builder /app/public ./public COPY --from=builder /app/package*.json ./ COPY --from=builder /app/node_modules ./node_modules # Trim dev deps from node_modules (optional but nice) RUN npm prune --omit=dev EXPOSE 3000 USER 1001 CMD ["npm", "start"]