# syntax=docker/dockerfile:1 # Build the static site. FROM node:22-bookworm-slim AS build WORKDIR /app ENV ASTRO_TELEMETRY_DISABLED=1 \ PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 COPY package.json package-lock.json ./ RUN npm ci --no-audit --no-fund COPY . . RUN npm run build # The contact handler's production dependencies (nodemailer only). FROM node:22-alpine AS contact WORKDIR /srv/contact COPY server/package.json server/package-lock.json ./ RUN npm ci --omit=dev --no-audit --no-fund COPY server/contact.mjs ./ # Serve dist/ with nginx; POST /contact goes to the handler on 127.0.0.1:3000. FROM nginx:1.27-alpine AS runtime RUN apk add --no-cache nodejs COPY docker/nginx.conf /etc/nginx/conf.d/default.conf COPY docker/entrypoint.sh /entrypoint.sh COPY --from=build /app/dist /usr/share/nginx/html COPY --from=contact /srv/contact /srv/contact EXPOSE 80 ENTRYPOINT ["/entrypoint.sh"] HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD wget -qO- http://127.0.0.1/healthz || exit 1