# syntax=docker/dockerfile:1.7 # # Multi-stage Dockerfile matching the warehack-ing services convention: # * dev — Astro dev server with HMR, source-mounted via compose volumes # * build — runs `astro build`, produces /app/dist # * prod — Caddy serves the static dist on port 80, plus a /health probe # # Pick the stage at compose-build time via APP_ENV={dev,prod} in .env. # ── base: shared dependency install ────────────────────────────── FROM node:lts-slim AS base WORKDIR /app ENV ASTRO_TELEMETRY_DISABLED=1 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