| 1 | # syntax=docker/dockerfile:1.7 |
| 2 | # DropHawk frontend - Next.js 16 standalone build. |
| 3 | FROM node:20.20.2-bookworm-slim AS base |
| 4 | ENV PNPM_HOME=/pnpm |
| 5 | ENV PATH=$PNPM_HOME:$PATH |
| 6 | RUN corepack enable && corepack prepare pnpm@9.15.9 --activate |
| 7 | WORKDIR /app |
| 8 | |
| 9 | # --- deps --- |
| 10 | FROM base AS deps |
| 11 | COPY package.json pnpm-lock.yaml* ./ |
| 12 | RUN pnpm install --frozen-lockfile || pnpm install |
| 13 | |
| 14 | # --- build --- |
| 15 | FROM base AS build |
| 16 | COPY --from=deps /app/node_modules ./node_modules |
| 17 | COPY . . |
| 18 | ENV NEXT_TELEMETRY_DISABLED=1 |
| 19 | RUN pnpm build |
| 20 | |
| 21 | # --- runtime --- |
| 22 | FROM node:20.20.2-bookworm-slim AS runner |
| 23 | WORKDIR /app |
| 24 | ENV NODE_ENV=production |
| 25 | ENV NEXT_TELEMETRY_DISABLED=1 |
| 26 | ENV PORT=3000 |
| 27 | RUN groupadd --system --gid 1001 nodejs && useradd --system --uid 1001 --gid nodejs nextjs |
| 28 | COPY --from=build /app/public ./public |
| 29 | COPY --from=build --chown=nextjs:nodejs /app/.next/standalone ./ |
| 30 | COPY --from=build --chown=nextjs:nodejs /app/.next/static ./.next/static |
| 31 | USER nextjs |
| 32 | EXPOSE 3000 |
| 33 | HEALTHCHECK --interval=20s --timeout=4s --start-period=20s --retries=3 \ |
| 34 | CMD node -e "fetch('http://127.0.0.1:3000/').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))" |
| 35 | CMD ["node", "server.js"] |