FROM node:22-alpine AS base RUN apk add --no-cache libc6-compat ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN corepack enable && corepack prepare pnpm@10 --activate WORKDIR /app # Prune the monorepo for only the packages @advdoors/web needs FROM base AS pruner RUN pnpm add -g turbo@^2 COPY . . RUN turbo prune @advdoors/web --docker # Install dependencies using the pruned lockfile (cached unless deps change) FROM base AS builder COPY --from=pruner /app/out/json/ . COPY --from=pruner /app/out/pnpm-lock.yaml ./pnpm-lock.yaml RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ pnpm install --frozen-lockfile # Copy pruned source and build via Turbo COPY --from=pruner /app/out/full/ . ENV NEXT_TELEMETRY_DISABLED=1 RUN --mount=type=cache,target=/app/apps/web/.next/cache \ pnpm turbo build --filter=@advdoors/web # Production FROM base AS runner ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 RUN addgroup --system --gid 1001 nodejs && \ adduser --system --uid 1001 nextjs COPY --from=builder --chown=nextjs:nodejs /app/apps/web/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/apps/web/.next/static ./apps/web/.next/static COPY --from=builder --chown=nextjs:nodejs /app/apps/web/public ./apps/web/public USER nextjs EXPOSE 3000 ENV PORT=3000 ENV HOSTNAME="0.0.0.0" CMD ["node", "apps/web/server.js"]