Single-port deployment. The API now serves the bundled dashboard SPA itself, and the bundled Traefik
reverse proxy is removed. This is a deployment/packaging change only — there are no API or
application-code changes.
Changed
- BREAKING — single-port dashboard: the API now serves the bundled dashboard SPA. In production the
NestJS API serves the built dashboard from its own port (default2785) via@nestjs/serve-static, so
there is no separate dashboard container and the UI is available by default wherever the API runs./api
and/socket.ioare excluded so they keep returning real API/WebSocket responses. Opt out with
SERVE_DASHBOARD=false. Dev is unchanged:npm run devstill runs the Vite dev server on:2886(HMR)
proxying to the API. Split-origin hosting (dashboard on a separate origin/CDN) still works: build with
VITE_API_URL=<api-origin>and hostdashboard/distanywhere. (#275) - The API's Content-Security-Policy now allows
https://fonts.googleapis.com(style-src) and
https://fonts.gstatic.com(font-src) so the dashboard's webfonts load now that it is served under the
API's CSP. (#275) - BREAKING — removed the bundled Traefik reverse proxy. With the API serving both the UI and the API
on one port, the shipped Traefik service was a single-backend passthrough that added no value (it
terminated no TLS out of the box). Removed thetraefikservice, thetraefik/configs, and the
with-proxyprofile. For TLS / public exposure, put your own reverse proxy (nginx, Caddy, a cloud load
balancer, or a k8s Ingress) in front of the API — seedocs/12-troubleshooting-faq.md. (#276)
Added
npm run build:all(build API + dashboard) andnpm run prod(build then serve) for running the
production build directly without Docker. (#275)
Migration
- The dashboard moved from
:2886(separate nginx container) to the API port:2785. Update bookmarks,
monitoring, and any external reverse-proxy config accordingly. (#275) - The
with-dashboardandwith-proxycompose profiles are removed, and theDASHBOARD_PORT,
PROXY_ENABLED, andDASHBOARD_ENABLEDenv vars are gone (silently ignored if still set).--profile fullnow starts the optional datastores (postgres, redis, minio). If you relied on the bundled Traefik
for TLS, front the API with your own reverse proxy. (#275, #276)