{ email {$ACME_EMAIL} } www.teeoff.no { redir https://teeoff.no{uri} permanent } teecup.teeoff.no { encode zstd gzip log { output stdout format console } # Offentlig, anonym lesing av opplastede bilder (MinIO, public-read # bucket-policy) -- bucket-navnet ligger i selve stien (path-style # adressering), derav /teecup-media/* som prefiks, ikke et eget # subdomene (unngår en DNS-avhengighet som viste seg ikke å peke på # denne serveren -- se CLAUDE.md-status). handle /teecup-media/* { reverse_proxy teecup-minio:9000 } # WebSocket-trafikk (ADR-025, Kommunikasjon) -- rett til teecup_api, # IKKE via Next.js sin rewrites()/teecup_frontend. Next.js proxyer ikke # WebSocket-oppgraderinger pålitelig i "standalone"-modus; Caddy sin # reverse_proxy håndterer Upgrade-headeren transparent uten egen config. handle /ws/* { reverse_proxy teecup_api:8000 } handle { reverse_proxy teecup_frontend:3000 } } teeoff.no { encode zstd gzip log { output stdout format console } # This upload route is implemented in Next.js, not FastAPI. handle /api/admin/uploads/images* { reverse_proxy frontend:3000 } # All other /api traffic goes to the FastAPI backend. # Use handle, not handle_path, so the /api prefix is preserved. handle /api/* { reverse_proxy api:8000 } # Everything else is served by Next.js. handle { reverse_proxy frontend:3000 } }