Skip to content

PlayoutAdmin Environment Variables Reference

Build-time (Vite — baked into JS bundle, requires image rebuild to change)

Variable Value (local) Role Status Used In
VITE_ASSET_BASE_URL http://localhost:15173 Base URL prefixed to relative /assets/<key> paths returned by CoreAPI, to build the full browser-facing media/thumbnail URL. Also passed explicitly in GitLab CI (--build-arg), so staging/prod have their own CI-configured value. Active components/channels/sections/SectionFallback.jsx (currently routed). Also present in components/legacy/origin/CacheOriginManager.jsx, legacy/channels.backup/sections/SectionFallback.jsx, legacy/media/MediaBeta.jsx (all unrouted legacy). Not yet used in MediaList.jsx — planned addition.
VITE_CORE_API_URL http://localhost:3000 Base URL for axios clients (authApiClient, coreApiClient) hitting /api/v1. Active, but only inside utils/api.js utils/api.js — confirmed dead/unimported by any component per grep. Correctly wired, but its only consumer is itself unused.
VITE_AUTH_API_URL http://localhost:3002 Base URL for authApiClient. Same as above utils/api.js only
VITE_TELLYID_URL (passed as ${VITE_AUTH_URL}, renamed) Fallback/default for TellyID auth service URL. Active utils/auth.js
VITE_AUTH_URL from root .env Used to construct AUTH_URL for auth redirect flow. Active components/sideBar/Sidebar.jsx
NPM_AUTH from root .env Populates .npmrc for private @playtelly package registry auth during npm install. Build-stage only — never reaches runtime or the JS bundle. Active (build infra, not app-level) Dockerfile only

Runtime (container env — read live by nginx via envsubst, changeable without rebuild)

Variable Value (local) Role Status Used In
COREAPI_URL http://coreapi:3000 Upstream target for /api/ proxy block. Active nginx.conf.template
TUSD_URL http://tusd:8080 Upstream target for /files/ proxy block (tus resumable upload passthrough). Active nginx.conf.template
FORWARDED_HOST localhost:15173 Intended to set forwarded-host header context. Dead — confirmed via grep, zero references in nginx.conf.template or anywhere else; template uses nginx's built-in $http_host, not ${FORWARDED_HOST}. Declared in compose environment: only, never consumed

Planned addition

Variable Proposed value Role Status Used In
ASSET_SERVING_URL http://cproxy_vod:8080 New upstream target for /assets/ proxy block, replacing ${COREAPI_URL}/assets/ — routes asset-serving traffic to cproxy → SeaweedFS instead of through CoreAPI. Planned nginx.conf.template

Historical context (from git log)

Two commits confirm the current relative-path convention was a deliberate, completed refactor, not accidental drift:

  • PlayoutAdmin: feat(media): asset URL refactor, nginx X-Forwarded-Host fix, VITE_ASSET_BASE_URL
  • CoreAPI: refactor(media): unified /assets/ route, relative URLs, remove ASSET_BASE_URL from backend

The intended end state is: CoreAPI returns relative /assets/<key> paths only, and the frontend concatenates VITE_ASSET_BASE_URL (or falls back to "", matching the existing pattern in SectionFallback.jsx) to build the full URL. The only outstanding gap is wiring this same established pattern into MediaList.jsx, which several other components already do correctly.

Known dead files/vars, not to be reconciled against this work

  • utils/api.js — stale, contains an undefined-variable bug (API_MONO_URL), duplicate method definitions, large commented-out blocks. Not imported by any component. Safe to ignore or remove independently of media-serving work.
  • FORWARDED_HOST — dead env var, safe cleanup item.
  • media-assets path references in comments (Dockerfile, CoreAPI route comments) — cosmetic/stale documentation only; actual route is /assets/*. No functional dependency found anywhere in either codebase.