CDN Infrastructure
PlayTelly's CDN stack runs as a set of Castis microservices orchestrated via cdn.yml
in the Quickstart compose. All services are linux/amd64 binaries running under Rosetta
on Mac M-series for local dev, and on Rocky Linux 9 x86_64 in production.
Services
| Service | Image | Purpose |
|---|---|---|
streamer_bkk |
cdn/streamer |
Castis Streamer — DASH/HLS origin, Bangkok node |
streamer_ntb |
cdn/streamer |
Castis Streamer — DASH/HLS origin, Nonthaburi node |
cproxy_bkk_1 |
cproxy:v1 |
cproxy — caching reverse proxy in front of streamers |
elb_bkk |
elb:v1 |
Castis ELB — load balancer in front of cproxy nodes |
colorbars |
cdn/colorbars |
ffmpeg UDP multicast broadcaster (live channel testing) |
Architecture
Client
└── ELB (elb_bkk :38090)
└── cproxy (cproxy_bkk_1 :28080)
├── streamer_bkk (:18080) ← /bkk/* routes
└── streamer_ntb (:19080) ← /ntb/* routes
└── SeaweedFS S3 (http-remote fallback)
CoreAPI's distribution domain manages all nodes — streamers, caches, and ELBs are
registered in the database and controlled via their respective APIs.
Networks
| Network | Purpose |
|---|---|
internal |
All services — CoreAPI, DB, SeaweedFS, CDN |
cdn_net |
CDN-only — streamers + colorbars for UDP multicast |