From 0bd850b40d3c8dc0cbea3202ee7ecbc1360892c6 Mon Sep 17 00:00:00 2001 From: Greg Date: Sun, 18 May 2025 16:17:54 +0200 Subject: [PATCH] feat: implement multi-stage Docker build for optimized Next.js production deployment --- Dockerfile | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index eafab74..7b1f88b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Production-ready Dockerfile for Next.js -FROM node:20-alpine AS base +FROM node:20-alpine AS builder # Set the working directory in the container WORKDIR /app @@ -17,18 +17,31 @@ RUN npm ci COPY myfavstuff . # Build the Next.js application -RUN echo "--- Debugging Build Environment Variables ---" && \ - echo "NEXT_PUBLIC_SUPABASE_URL as set in Dockerfile: ($NEXT_PUBLIC_SUPABASE_URL)" && \ - echo "NEXT_PUBLIC_SUPABASE_ANON_KEY as set in Dockerfile: ($NEXT_PUBLIC_SUPABASE_ANON_KEY)" && \ +RUN echo "--- Debugging Build Environment Variables (Builder Stage) ---" && \ + echo "NEXT_PUBLIC_SUPABASE_URL: ($NEXT_PUBLIC_SUPABASE_URL)" && \ + echo "NEXT_PUBLIC_SUPABASE_ANON_KEY: ($NEXT_PUBLIC_SUPABASE_ANON_KEY)" && \ echo "--- End Debugging --- " && \ npm run build # Use a non-root user for security RUN addgroup -g 1001 -S nodejs && adduser -S nextjs -u 1001 + +# Production stage +FROM node:20-alpine AS runner +WORKDIR /app + +ENV NODE_ENV=production + +COPY --from=builder /app/public ./public +# Next.js 15 uses a standalone output by default in the .next/standalone directory +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static + USER nextjs -# Expose port 3000 (default for Next.js) EXPOSE 3000 -# Command to run the application -CMD ["npm", "start"] +ENV PORT 3000 +ENV HOSTNAME 0.0.0.0 + +CMD ["node", "server.js"]