# ── base: shared dependency install ────────────────────────────── FROM node:20-slim AS base WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci COPY . . # ── dev: Astro dev server with HMR ───────────────────────────── FROM base AS dev ENV HOST=0.0.0.0 EXPOSE 4321 CMD ["npx", "astro", "dev", "--host", "0.0.0.0", "--port", "4321"] # ── build: static site generation ─────────────────────────────── FROM base AS build RUN npx astro build # ── prod: Caddy serving static files ─────────────────────────── FROM caddy:2-alpine AS prod COPY Caddyfile /etc/caddy/Caddyfile COPY --from=build /app/dist /srv EXPOSE 80 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD wget -qO- http://127.0.0.1:80/health || exit 1