11# ============================================================
2- # Stage 1: deps — install production dependencies
2+ # Stage 1: base — base image with essential libraries
33# ============================================================
4- FROM node:20-alpine AS deps
4+ FROM node:20-alpine AS base
55RUN apk add --no-cache libc6-compat
6-
76WORKDIR /app
87
9- COPY src/package.json src/package-lock.json ./
10- RUN npm ci --omit=dev --ignore-scripts
8+ # Application version (passed at build time)
9+ ARG NEXT_PUBLIC_APP_VERSION
10+ ENV NEXT_PUBLIC_APP_VERSION=$NEXT_PUBLIC_APP_VERSION
1111
1212# ============================================================
13- # Stage 2: builder — compile the Next.js app
13+ # Stage 2: development — prep for dev environment
1414# ============================================================
15- FROM node:20-alpine AS builder
15+ FROM base AS development
1616
1717WORKDIR /app
1818
19- # Copy ALL deps (including devDeps) for build
19+ # Copy ALL deps (including devDeps)
2020COPY src/package.json src/package-lock.json ./
2121RUN npm ci --ignore-scripts
2222
2323# Copy source code
2424COPY src/ .
2525
26+ # Disable Next.js telemetry
27+ ENV NEXT_TELEMETRY_DISABLED=1
28+
29+ # ============================================================
30+ # Stage 3: builder — compile the Next.js app
31+ # ============================================================
32+ FROM development AS builder
33+
2634# Build-time env vars (public ones only — never leak secrets here)
2735ARG NEXT_PUBLIC_SUPABASE_URL
2836ARG NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY
2937
3038ENV NEXT_PUBLIC_SUPABASE_URL=$NEXT_PUBLIC_SUPABASE_URL
3139ENV NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=$NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY
3240
33- # Disable Next.js telemetry
34- ENV NEXT_TELEMETRY_DISABLED=1
35-
3641RUN npm run build
3742
3843# ============================================================
3944# Stage 3: runner — minimal production image
4045# ============================================================
41- FROM node:20-alpine AS runner
46+ FROM base AS runner
4247
4348WORKDIR /app
4449
@@ -50,7 +55,7 @@ RUN addgroup --system --gid 1001 nodejs && \
5055 adduser --system --uid 1001 nextjs
5156
5257# Copy built assets from builder
53- COPY --from=builder /app/public ./public
58+ COPY --from=builder --chown=nextjs:nodejs /app/public ./public
5459COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
5560COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
5661
0 commit comments