c637b2783c
Operators/admins reach the booth at http://<name-or-ip>/ (no :3000). Adds a caddy:2-alpine
proxy to the prod override that reverse-proxies :80 → server:3000 (the /api/ws WebSocket
upgrades pass through natively); the server is now `expose: 3000` (internal, no published
port), vision stays internal. The Caddyfile binds `:80` so it matches ANY hostname/IP —
works for the booth IP, localhost, AND parksystems.msai.al (pointed at the booth via
hosts/DNS on-site; no domain baked into any image). TLS later = swap `:80` for the real
hostname + uncomment :443 → Caddy auto-provisions HTTPS.
Pairs with the relative-/api SPA fix (77b2acb): together verified end-to-end locally —
through Caddy on :80 with Host: parksystems.msai.al, GET / serves the SPA, assets/health
200, and POST /api/auth/login reaches the server (real 401, no CORS/connection error).
Claude-Session: https://claude.ai/code/session_01Xcm6ikLgGoCxxHrxtjkk5V
14 lines
713 B
Caddyfile
14 lines
713 B
Caddyfile
# Booth reverse proxy. `:80` matches ANY hostname/IP, so the booth is reachable as
|
|
# http://<booth-ip>/, http://localhost/, or http://parksystems.msai.al/ (the name pointed
|
|
# at the booth's IP via hosts/DNS on-site) — with no domain baked into any image. The SPA
|
|
# uses a relative /api base, so everything (HTTP + the /api/ws WebSocket, which Caddy
|
|
# upgrades automatically) just flows through to the server container.
|
|
#
|
|
# TLS later: replace `:80` with the real hostname (e.g. `parksystems.msai.al`), uncomment
|
|
# Caddy's :443 in docker-compose.prod.yml, and Caddy auto-provisions HTTPS. For a private
|
|
# CA / internal cert, use `tls /path/cert.pem /path/key.pem`.
|
|
:80 {
|
|
encode gzip
|
|
reverse_proxy server:3000
|
|
}
|