DCPod (DC Pod) is a distributed content pod: geographic DNS steering, an L7 TLS balancer, a replicated CDN content plane, live streaming and an image pipeline — one Docker host per node, driven by a single deploy script.
Six cooperating services, all built from source by the deploy script. Every admin surface is unified behind a single console login; every data plane port is tuned for edge duty.
Authoritative DNS that answers A-records by client geolocation, using a MaxMind GeoLite2 City database and radius-based edge groups. Clients land on the closest healthy edge, automatically.
Also hosts the edge registration API (TLS, bearer-token) and the CDN content store that distributes site files to every edge.
:53 udp/tcp · :8443 · :9090 CMSA reverse proxy with vhost routing, TLS termination and cache-tiering. It fronts all public traffic for the pod and issues certificates automatically via ACME — zero manual cert handling.
Define domains and backends from the console or CLI; the balancer reloads live.
:443 + :80 · ACME · disk cacheEdge nodes register with the master, heartbeat every 15 s, and serve HTTPS for their assigned domains — synchronized CDN content included. Edges only answer for domains they actually serve; health is monitored end-to-end.
Type 1 registers a public IP; type 2 joins over a WireGuard tunnel behind NAT.
:443 HTTPS · 15 s heartbeatThe content plane: live streaming server (ingest RTMP / SRT / RTSP / WebRTC, playback WebRTC + low-latency HLS), an image pipeline with on-the-fly resize and format conversion, and a cache tier with token authentication and signed URLs so private content stays private.
:8444 stream · :8445 image · :8446 cacheA 3-node, geo-replicated SQL cluster persists domains, edge registry state and service metadata. The master writes; edges read through a dedicated read-only SQL user — loss of any one node does not lose the state of the pod.
:26257 SQL · replication ×3One web console is the single front door to every admin API in the pod,
and dcpodctl drives the same APIs from the shell for automation.
CMS panels stay localhost-bound per service; you manage everything through the console, over an SSH tunnel if you like.
:8080 console · dcpodctl CLIDNS does the steering close to the client; the chosen edge serves cached content straight from disk. This very page is being served to you by that pipeline.
Only what must be public is public. Everything else binds to loopback on the node — including every admin CMS.
| Port | Service | Public | Purpose |
|---|---|---|---|
| 443 + 80 | balancer | yes | all web traffic, ACME challenges |
| 53 udp/tcp | geodns-master | yes* | authoritative GeoDNS (*when NS is delegated) |
| 8443 | geodns-master | yes | edge registration API (TLS) |
| 8080 | console | tunnel | unified admin UI — bind to 127.0.0.1 |
| 9090 / 9091 / 9092 | CMS panels | no | per-service admin APIs, loopback only |
| 26257 | cockroachdb | no | internal SQL (in-pod network) |
One Linux host, Docker, one script. The same bundle deploys a central control host and can join remote edge nodes with a second command.
# central control host (master + balancer + console + DB cluster) git clone https://github.com/andhysn/releases dcpod && cd dcpod/dcpod sudo ./deploy.sh # interactively, or --non-interactive # join a remote edge node (type 2, NAT-safe WireGuard) sudo ./deploy-edge.sh --non-interactive \ --master-url https://<control-host>:8443 --token <GEODNS_TOKEN> --ip <edge-ip>
Point your domain's DNS at the pod and define the vhost — certificates are issued automatically. Serve a static site on every edge at once: place it in the master's CDN store and the edges sync it and serve it.