# Use Node.js LTS Alpine for smaller image FROM node:20-alpine AS base # Set working directory WORKDIR /app # Install dependencies only when needed FROM base AS deps COPY package.json package-lock.json* ./ RUN npm ci --only=production # Build the app FROM base AS builder COPY package.json package-lock.json* ./ RUN npm ci COPY . . ENV NEXT_PUBLIC_API_URL=https://cmcbackend.rootxwire.com ENV NEXT_TELEMETRY_DISABLED=1 RUN npm run build # Production image FROM base AS runner ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 # Create non-root user RUN addgroup --system --gid 1001 nodejs && \ adduser --system --uid 1001 nextjs WORKDIR /app # Copy all necessary files COPY --from=builder --chown=nextjs:nodejs /app/package.json ./package.json COPY --from=builder --chown=nextjs:nodejs /app/package-lock.json ./package-lock.json COPY --from=builder --chown=nextjs:nodejs /app/next.config.js ./next.config.js COPY --from=builder --chown=nextjs:nodejs /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next COPY --from=deps --chown=nextjs:nodejs /app/node_modules ./node_modules USER nextjs EXPOSE 3000 ENV PORT=3000 CMD ["npm", "start"]