FROM node:22-alpine AS deps WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci FROM node:22-alpine AS builder WORKDIR /app ARG NEXT_PUBLIC_SUPABASE_URL=https://example.supabase.co ARG NEXT_PUBLIC_SUPABASE_ANON_KEY=public-anon-placeholder ARG SUPABASE_SERVICE_ROLE_KEY=service-role-placeholder ARG CRON_API_KEY=cron-placeholder ARG NEXT_PUBLIC_SITE_URL=http://localhost:8302 ENV NEXT_PUBLIC_SUPABASE_URL=$NEXT_PUBLIC_SUPABASE_URL \ NEXT_PUBLIC_SUPABASE_ANON_KEY=$NEXT_PUBLIC_SUPABASE_ANON_KEY \ SUPABASE_SERVICE_ROLE_KEY=$SUPABASE_SERVICE_ROLE_KEY \ CRON_API_KEY=$CRON_API_KEY \ NEXT_PUBLIC_SITE_URL=$NEXT_PUBLIC_SITE_URL COPY --from=deps /app/node_modules ./node_modules COPY package.json package-lock.json ./ COPY next.config.ts tsconfig.json postcss.config.mjs eslint.config.mjs ./ COPY public ./public COPY src ./src COPY data ./data RUN npm run build FROM node:22-alpine AS runner WORKDIR /app ENV NODE_ENV=production ENV PORT=8302 ENV HOSTNAME=0.0.0.0 COPY package.json package-lock.json ./ COPY --from=deps /app/node_modules ./node_modules RUN npm prune --omit=dev COPY --from=builder /app/.next ./.next COPY --from=builder /app/public ./public COPY --from=builder /app/data ./data EXPOSE 8302 HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \ CMD wget -q -O - http://127.0.0.1:8302/favicon.ico > /dev/null || exit 1 CMD ["npm", "run", "start", "--", "-p", "8302", "-H", "0.0.0.0"]