# ------------------------------------ # Base image + pnpm # ------------------------------------ FROM node:20-alpine AS base WORKDIR /app RUN apk add --no-cache libc6-compat RUN corepack enable && corepack prepare pnpm@9 --activate # ------------------------------------ # Install dependencies # ------------------------------------ FROM base AS deps WORKDIR /app COPY package.json pnpm-lock.yaml* ./ RUN --mount=type=cache,target=/root/.local/share/pnpm/store \ pnpm install --no-frozen-lockfile # ------------------------------------ # Build the application # ------------------------------------ FROM base AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . # Jadikan build lebih netral tanpa API URL/SECRET ENV NEXT_TELEMETRY_DISABLED=1 RUN pnpm build # ------------------------------------ # Production image # ------------------------------------ FROM node:20-alpine AS runner WORKDIR /app RUN apk add --no-cache libc6-compat RUN addgroup -g 1001 nodejs && \ adduser -u 1001 -G nodejs -s /bin/sh -D nextjs COPY --from=builder /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static USER nextjs # => ENV hanya untuk runtime, BUKAN build time! ENV NODE_ENV=production ENV HOSTNAME=0.0.0.0 ENV PORT=4000 EXPOSE 4000 HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ CMD node -e "require('http').get('http://localhost:4000', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})" CMD ["node", "server.js"]