- Multi-stage Dockerfile: Node builder → Caddy static prod, Node HMR dev - docker-compose with dev/prod profiles on external caddy network - Caddyfile with immutable hashed asset caching - Makefile: prod, dev, down, logs, rebuild targets - Site URL configurable via SITE_URL env var
45 lines
1.3 KiB
YAML
45 lines
1.3 KiB
YAML
services:
|
|
# ── Production: Caddy serves static build ──────────────────────
|
|
docs:
|
|
build:
|
|
context: .
|
|
target: prod
|
|
args:
|
|
SITE_URL: https://${DOMAIN}
|
|
restart: unless-stopped
|
|
networks:
|
|
- caddy
|
|
labels:
|
|
caddy: ${DOMAIN}
|
|
caddy.reverse_proxy: "{{upstreams 80}}"
|
|
|
|
# ── Development: Node with HMR ────────────────────────────────
|
|
docs-dev:
|
|
build:
|
|
context: .
|
|
target: dev
|
|
profiles: [dev]
|
|
volumes:
|
|
- ./src:/app/src
|
|
- ./astro.config.mjs:/app/astro.config.mjs
|
|
- ./package.json:/app/package.json
|
|
environment:
|
|
- VITE_HMR_HOST=${DOMAIN}
|
|
networks:
|
|
- caddy
|
|
labels:
|
|
caddy: ${DOMAIN}
|
|
caddy.reverse_proxy: "{{upstreams 4321}}"
|
|
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
|
|
|
|
networks:
|
|
caddy:
|
|
external: true
|