# syntax=docker/dockerfile:1 FROM node:22-alpine AS deps WORKDIR /app COPY package.json package-lock.json* ./ RUN npm ci FROM node:22-alpine AS build WORKDIR /app # Astro is a STATIC build: import.meta.env.PUBLIC_* is inlined into the HTML here, at image build # time. A runtime env var on the pod can never reach it (the pod only runs nginx over pre-built # files), so anything the browser needs must arrive as a build arg. CI passes these; see # .gitea/workflows/ci.yml. ARG PUBLIC_CONTACT_FORM_ENDPOINT="" ARG PUBLIC_SITE_URL="https://www.bluecapstrategies.com" ENV PUBLIC_CONTACT_FORM_ENDPOINT=$PUBLIC_CONTACT_FORM_ENDPOINT \ PUBLIC_SITE_URL=$PUBLIC_SITE_URL COPY --from=deps /app/node_modules ./node_modules COPY . . RUN npm run build FROM nginx:1.27-alpine AS runtime COPY deploy/nginx.conf /etc/nginx/conf.d/default.conf COPY --from=build /app/dist /usr/share/nginx/html EXPOSE 80 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD wget -qO- http://127.0.0.1/healthz || exit 1