# syntax=docker/dockerfile:1 # Needs output: "standalone" in next.config.ts. FROM node:24-alpine AS base WORKDIR /app RUN corepack enable # Install dependencies only when the lockfile changes. FROM base AS deps COPY package.json pnpm-lock.yaml ./ RUN --mount=type=cache,id=pnpm,target=/root/.local/share/pnpm/store \ pnpm install --frozen-lockfile # Build the app. FROM base AS build COPY --from=deps /app/node_modules ./node_modules COPY . . ENV NEXT_TELEMETRY_DISABLED=1 RUN pnpm build # Run the standalone server as a non-root user. FROM node:24-alpine AS runner WORKDIR /app ENV NODE_ENV=production \ NEXT_TELEMETRY_DISABLED=1 \ PORT=3000 \ HOSTNAME=0.0.0.0 RUN addgroup -S -g 1001 nodejs && adduser -S -u 1001 -G nodejs nextjs COPY --from=build --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=build --chown=nextjs:nodejs /app/.next/static ./.next/static COPY --from=build --chown=nextjs:nodejs /app/public ./public USER nextjs EXPOSE 3000 CMD ["node", "server.js"]