# syntax=docker/dockerfile:1.7 FROM node:22-bookworm-slim AS dependencies WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci FROM dependencies AS builder ARG NEXT_PUBLIC_SITE_URL=http://localhost:3000 ARG NEXT_PUBLIC_CLOUDFLARE_WEB_ANALYTICS_TOKEN= ARG NEXT_PUBLIC_NEWSLETTER_CAPTURE_ENABLED=false ARG NEWSLETTER_CAPTURE_MODE=disabled ENV NEXT_PUBLIC_SITE_URL=${NEXT_PUBLIC_SITE_URL} \ NEXT_PUBLIC_CLOUDFLARE_WEB_ANALYTICS_TOKEN=${NEXT_PUBLIC_CLOUDFLARE_WEB_ANALYTICS_TOKEN} \ NEXT_PUBLIC_NEWSLETTER_CAPTURE_ENABLED=${NEXT_PUBLIC_NEWSLETTER_CAPTURE_ENABLED} \ NEWSLETTER_CAPTURE_MODE=${NEWSLETTER_CAPTURE_MODE} COPY . . RUN npm run build FROM node:22-bookworm-slim AS runner ENV NODE_ENV=production \ PORT=3000 \ NEXT_PUBLIC_SITE_URL=http://localhost:3000 \ NEXT_PUBLIC_CLOUDFLARE_WEB_ANALYTICS_TOKEN= \ NEXT_PUBLIC_NEWSLETTER_CAPTURE_ENABLED=false \ NEWSLETTER_CAPTURE_MODE=disabled WORKDIR /app COPY --from=builder --chown=node:node /app/package.json /app/package-lock.json ./ COPY --from=builder --chown=node:node /app/node_modules ./node_modules COPY --from=builder --chown=node:node /app/dist ./dist USER node EXPOSE 3000 HEALTHCHECK --interval=10s --timeout=3s --start-period=20s --retries=5 \ CMD ["node", "-e", "fetch('http://127.0.0.1:'+(process.env.PORT||'3000')+'/').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))"] CMD ["npm", "start"]