# Astro + Starlight docs site for warehack.ing/omni-pca. # # Two modes via APP_ENV in .env: # APP_ENV=dev APP_PORT=4321 astro dev with HMR (volume-mounted) # APP_ENV=prod APP_PORT=80 caddy serving the built static dist # # Switch with `make dev` or `make prod` (both rebuild + restart). services: docs: build: context: . target: ${APP_ENV:-dev} container_name: ${COMPOSE_PROJECT_NAME:-omni-pca-docs} restart: unless-stopped environment: - PUBLIC_DOMAIN=${PUBLIC_DOMAIN} - VITE_HMR_HOST=${VITE_HMR_HOST} networks: - caddy labels: caddy: ${PUBLIC_DOMAIN} caddy.reverse_proxy: "{{upstreams ${APP_PORT:-4321}}}" # Streaming/HMR-friendly Caddy config (CLAUDE.md "HMR Behind Caddy"): caddy.reverse_proxy.flush_interval: "-1" caddy.reverse_proxy.transport: http caddy.reverse_proxy.transport.read_timeout: "0" caddy.reverse_proxy.transport.write_timeout: "0" caddy.reverse_proxy.transport.keepalive: 5m caddy.reverse_proxy.transport.keepalive_idle_conns: "10" caddy.reverse_proxy.stream_timeout: 24h caddy.reverse_proxy.stream_close_delay: 5s # Volume mounts only matter in dev mode; in prod they're harmless # (the prod stage doesn't reference /app — it serves /srv from caddy). volumes: - ./src:/app/src - ./public:/app/public - ./astro.config.mjs:/app/astro.config.mjs networks: caddy: external: true