# mcaxl docs — dev/prod via compose profiles. # # Mode is driven by COMPOSE_PROFILES in .env: # COMPOSE_PROFILES=dev → hot-reload astro dev server at https://${DEV_DOMAIN} # COMPOSE_PROFILES=prod → static site via in-container Caddy at https://${DOMAIN} # # Both profiles sit behind the host's external caddy-docker-proxy on the # `caddy` network. mcaxl is a public OSS project; no basic auth. # # Prerequisite: `docker network create caddy` (one-time, shared with the # edge caddy-docker-proxy instance). # Explicit project name. Without this, Compose defaults to the parent # directory's basename — and all three docs sites live in `docs/`, so # they would collide and cross-recreate each other on every `up`. name: mcaxl-docs services: docs-dev: profiles: ["dev"] build: context: . dockerfile: Dockerfile target: dev image: ${COMPOSE_PROJECT}-dev container_name: ${COMPOSE_PROJECT}-dev restart: unless-stopped environment: ASTRO_TELEMETRY_DISABLED: "1" NODE_ENV: development DOMAIN: ${DEV_DOMAIN} # Vite HMR binds wss://${DEV_DOMAIN}:443 volumes: - .:/app - /app/node_modules - /app/.astro networks: - caddy labels: caddy: ${DEV_DOMAIN} caddy.reverse_proxy: "{{upstreams 4321}}" # ── HMR-through-Caddy streaming tweaks ── # Vite HMR doesn't send app-level pings; Caddy closes idle WebSockets # after ~10-15s without these. Refs in ~/.claude/CLAUDE.md. 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" caddy.encode: "gzip zstd" docs-prod: profiles: ["prod"] build: context: . dockerfile: Dockerfile target: prod args: DOMAIN: ${DOMAIN} image: ${COMPOSE_PROJECT}-prod container_name: ${COMPOSE_PROJECT}-prod restart: unless-stopped networks: - caddy labels: caddy: ${DOMAIN} caddy.reverse_proxy: "{{upstreams 80}}" caddy.encode: "gzip zstd" networks: caddy: external: true