Microservices
This page is a quick-reference audit of every service defined in
Quickstart/compose/ — what port(s) it exposes locally, and what env vars /
config it consumes. For how to add or wire a new service into the Makefile,
see the CoreAPI Development Guide.
Access
| Service |
Container |
Port(s) |
Env / config consumed |
authapi |
authapi |
3002:3002 |
../../.env (full shared env), ZITADEL_PAT_PATH (inline, points at mounted zitadel.pat) |
tellyid |
tellyid |
5174:80 |
../../.env, build args VITE_BACKEND_URL (← BACKEND_URL), VITE_CORE_API_URL |
Infrastructure
| Service |
Container |
Port(s) |
Env / config consumed |
postgres |
— |
5432:5432 |
../../.env (needs POSTGRES_USER at minimum, used in healthcheck) |
pgadmin |
— |
5050:80 |
inline only — PGADMIN_DEFAULT_EMAIL, PGADMIN_DEFAULT_PASSWORD, PGADMIN_CONFIG_SERVER_MODE, PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED (all hardcoded, no .env) |
redis |
— |
(none exposed) |
none |
nats |
nats |
4222:4222 (client), 8222:8222 (HTTP monitoring) |
none |
zitadel |
zitadel |
8080:8080 |
../../.env, ZITADEL_MASTERKEY (via command flag) |
login (Zitadel Login UI) |
— |
3001:3000 |
../../.env, inline ZITADEL_API_URL, ZITADEL_SERVICE_USER_TOKEN_FILE |
seaweedfs |
seaweedfs |
8333:8333 (S3), 9333:9333 (Master API), 8888:8888 (Filer UI) |
none directly (config via mounted seaweedfs_s3.json) |
seaweedfs_init |
— |
(none — one-shot) |
../../.env → MINIO_BUCKET, MINIO_TEMP_BUCKET, MINIO_ACCESS_KEY, MINIO_SECRET_KEY |
tusd |
tusd |
1080:8080 |
inline only — MINIO_BUCKET, MINIO_ACCESS_KEY, MINIO_SECRET_KEY (all with fallback defaults), hardcoded hook to coreapi:3000/hooks/tusd |
verdaccio |
playtelly-verdaccio |
4873:4873 |
none |
vernemq |
— |
1886:1884 (MQTT), 9006:8080 (WebSocket) |
../../.env |
CDN stack (infrastructure/cdn.yml)
| Service |
Container |
Port(s) |
Env / config consumed |
streamer_bkk |
cdn_streamer_bkk |
18080:18080, 18081:18081 |
none via compose — config from mounted streamer-bkk/streamer.yml |
streamer_ntb |
cdn_streamer_ntb |
19080:18080, 19081:18081 |
none via compose — config from mounted streamer-ntb/streamer.yml |
cproxy_bkk_1 |
cdn_cproxy_bkk_1 |
28080:8080, 28081:8081 |
none via compose — config from mounted cproxy-bkk-1/cproxy.yml |
elb_bkk |
cdn_elb_bkk |
38080:8090, 38081:8100 |
none via compose — config from mounted elb-bkk/elb.yml |
colorbars |
cdn_broadcast_colorbars |
9999:9999 |
inline — PORT, COLORBARS_STREAMS |
node_x |
cdn_node_x |
17080:18080, 17081:18081, 58080:8080, 58081:8081, 2222:22 |
none |
scope (Weave Scope) |
scope |
4040:4040 |
none |
Services
| Service |
Container |
Port(s) |
Env / config consumed |
coreapi |
coreapi |
3000:3000 |
../../.env (full shared env), inline MEDIA_SERVER_URL |
documentations |
— |
8001:80 |
none |
org-console |
— |
4000:80 |
build-args only (not .env): VITE_AUTH_URL, VITE_AUTH_API_URL, VITE_AUTH_TOKEN_KEY, VITE_PLAYOUT_URL, VITE_TELLYBOARD_URL, VITE_SPATIO_URL, VITE_TELLYCONNECT_URL, VITE_PLATFORM_URL, VITE_CORE_API_URL |
platform-console |
— |
4001:80 |
build-args only: VITE_AUTH_URL, VITE_AUTH_API_URL, VITE_CORE_API_URL, VITE_TELLYBOARD_URL, VITE_TELLYCONNECT_URL |
playoutadmin |
playoutadmin |
15173:80 |
../../.env + build-args (VITE_TELLYID_URL, VITE_CORE_API_URL, VITE_AUTH_URL, VITE_ASSET_BASE_URL, COREAPI_URL, TUSD_URL, NPM_AUTH) + inline runtime env (COREAPI_URL, TUSD_URL, FORWARDED_HOST) |
spatioadmin |
spatioadmin |
5160:80 |
build-arg only — VITE_API_BASE_URL (hardcoded to localhost:3000) |
tellyboardadmin |
tellyboard-frontend |
5175:80 |
../../.env + build-args (VITE_TELLYID_URL, VITE_AUTH_URL, VITE_CORE_API_URL, NPM_AUTH) + inline FORWARDED_HOST |
website-app (TicketCMS) |
jticketing.website |
13000:13000 |
inline only — VITE_API_BASE_URL (hardcoded), VITE_PAYMENT_GATEWAY_BASE_URL (hardcoded), VITE_MAINTENANCE_MODE/VITE_MAINTENANCE_PIN/VITE_TELEMETRY_URL (← TICKETING_VITE_* from shell/.env, but no env_file: present — these will only resolve if already exported in the shell) |
Notable patterns / things worth flagging
- Most backend/infra services (
authapi, postgres, zitadel, coreapi, playoutadmin, tellyboardadmin, vernemq, login) pull from the single shared ../../.env via env_file:.
- Most frontend admin consoles (
org-console, platform-console, spatioadmin) skip env_file: entirely and rely only on Docker build-args — meaning their config is baked in at image build time, not runtime-configurable via .env alone.
website-app (TicketCMS) references $TICKETING_VITE_* vars but has no env_file: block — these will silently resolve empty unless already present in the invoking shell's environment. Worth double-checking before relying on it.
- CDN stack services (
streamer_*, cproxy_*, elb_*) take no compose-level env at all — all their behavior comes from the mounted .yml config files specific to each component, which is a different configuration surface than the rest of the stack.
- Port collisions to be aware of:
TUSD_URL/COREAPI_URL are hardcoded to internal Docker network hostnames (http://tusd:8080, http://coreapi:3000) in a few services — these only resolve inside the internal Docker network, not from the host machine.