# Stage 1: Build FROM node:18-alpine AS builder # Set working directory WORKDIR /app # Copy package files and install dependencies COPY package.json package-lock.json ./ RUN npm install --production # Copy the rest of the app COPY . . # Pass build-time environment variable ARG NEXT_PUBLIC_API_URL ENV NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL} # Build the Next.js app RUN npm run build # Stage 2: Run FROM node:18-alpine AS runner WORKDIR /app # Copy built app from builder COPY --from=builder /app/.next ./.next COPY --from=builder /app/public ./public COPY --from=builder /app/package.json ./package.json COPY --from=builder /app/package-lock.json ./package-lock.json COPY --from=builder /app/next.config.js ./next.config.js # Install only production dependencies RUN npm install --production # Expose port EXPOSE 3000 # Runtime environment variables ENV NODE_ENV=production ENV NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL} ENV HOST=0.0.0.0 # Start the app CMD ["npm", "start"]