# syntax=docker/dockerfile:1.7 FROM node:24-bookworm-slim AS dependencies WORKDIR /app RUN apt-get update \ && apt-get install -y --no-install-recommends build-essential python3 \ && rm -rf /var/lib/apt/lists/* COPY package.json package-lock.json ./ RUN npm ci FROM node:24-bookworm-slim AS builder WORKDIR /app ARG NEXT_PUBLIC_SUPABASE_URL ARG NEXT_PUBLIC_SUPABASE_ANON_KEY ARG NEXT_PUBLIC_APP_URL ARG NEXT_PUBLIC_GOOGLE_OAUTH_ENABLED="" ARG GOOGLE_SITE_VERIFICATION="" ENV NEXT_TELEMETRY_DISABLED=1 \ NEXT_PUBLIC_SUPABASE_URL=${NEXT_PUBLIC_SUPABASE_URL} \ NEXT_PUBLIC_SUPABASE_ANON_KEY=${NEXT_PUBLIC_SUPABASE_ANON_KEY} \ NEXT_PUBLIC_APP_URL=${NEXT_PUBLIC_APP_URL} \ NEXT_PUBLIC_GOOGLE_OAUTH_ENABLED=${NEXT_PUBLIC_GOOGLE_OAUTH_ENABLED} \ GOOGLE_SITE_VERIFICATION=${GOOGLE_SITE_VERIFICATION} COPY --from=dependencies /app/node_modules ./node_modules COPY . . RUN npm run build FROM node:24-bookworm-slim AS runner WORKDIR /app ARG APP_REVISION="unknown" ENV NODE_ENV=production \ NEXT_TELEMETRY_DISABLED=1 \ HOSTNAME=0.0.0.0 \ PORT=3000 \ APP_REVISION=${APP_REVISION} RUN groupadd --system --gid 1001 nodejs \ && useradd --system --uid 1001 --gid nodejs --home-dir /app nextjs COPY --from=builder --chown=nextjs:nodejs /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static RUN mkdir -p /app/.next/cache /app/data \ && chown -R nextjs:nodejs /app/.next/cache /app/data USER nextjs EXPOSE 3000 HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \ CMD ["node", "-e", "fetch('http://127.0.0.1:3000/api/health').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))"] CMD ["node", "server.js"]