# syntax=docker/dockerfile:1 # ============================================ # Base stage — Node 22 slim # ============================================ FROM node:22-slim AS base WORKDIR /app COPY package.json package-lock.json ./ # ============================================ # Development — hot reload # ============================================ FROM base AS dev RUN npm ci COPY . . EXPOSE 4321 CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0"] # ============================================ # Build — static site generation # ============================================ FROM base AS build RUN npm ci COPY . . ENV ASTRO_TELEMETRY_DISABLED=1 RUN npm run build # ============================================ # Production — Caddy serves static files # ============================================ FROM caddy:2-alpine AS prod COPY --from=build /app/dist /usr/share/caddy RUN echo ':80 { \ root * /usr/share/caddy \ encode gzip \ try_files {path} {path}/ /index.html \ file_server \ }' > /etc/caddy/Caddyfile EXPOSE 80 CMD ["caddy", "run", "--config", "/etc/caddy/Caddyfile"]