The full OTT service
Catalogue, search, recommendations, entitlements, billing, pay-per-view, live channels and the native apps for web, phone and television.
Application, origin, encoding and delivery, all inside your own perimeter. No metered egress, no per-minute transcoding, no vendor holding the keys to your catalogue. Declared in Terraform from the first commit, so the estate is reproducible before it is live.
You already have rack space, your traffic is regional, and metered egress is the line item you want to delete entirely.
Streaming has an unusual cost shape: the expensive parts are the predictable ones. Egress, transcoding and storage grow smoothly with your audience, which is exactly the profile that suits owned capacity and exactly the profile that public-cloud pricing punishes. Elasticity is worth paying for when load is spiky and cheap when it is steady — and steady is what a catalogue is.
This pattern puts every tier on your own hardware, virtualised with Proxmox, with live and video-on-demand served from separate edge machines. That split matters more than it sounds: a live surge and a long-tail catalogue want opposite cache behaviour, and sharing one machine means the surge evicts everything the catalogue needs.
The estate as delivered — every tier named, every boundary drawn.
Untrusted — the public internet
TLS terminates here and nowhere else
Reachable only through the edge, or through the bastion for operators
A match-night surge cannot evict the back catalogue
State lives inside the perimeter
Declared entirely in code — the estate rebuilds from the repository
Not a licence and a wiki page. A running system, in your estate, with the people who own it trained on it.
Catalogue, search, recommendations, entitlements, billing, pay-per-view, live channels and the native apps for web, phone and television.
A Proxmox platform with isolated guests per service, GPU passthrough for encoding, S3-compatible object storage and a full observability stack.
Range-aware caching so a mid-film seek is served from disk, geographic awareness, HTTP/3, and a token check on every single segment.
The whole estate in Terraform and a GitOps pipeline. There is no manual console step anywhere in the delivery path, by design.
Encrypted streams, expiring signed tokens re-checked at the edge, and secrets in a vault rather than in a config file or a wiki.
Runbooks written against your estate, a walkthrough of every failure mode we designed for, and a support line that stays open afterwards.
| Tier | Runs on | Scales by | Fails over to |
|---|---|---|---|
| Application | Isolated guests on Proxmox | Adding guests, then nodes | Restart on a peer node |
| Live edge | Dedicated host | Adding edge hosts behind DNS | VOD edge, degraded |
| VOD edge | Dedicated host | Adding edge hosts behind DNS | Origin direct, degraded |
| Origin | MinIO on local disk | Adding drives, then nodes | Erasure-coded set |
| Encoder | GPU passthrough guest | Queue depth, then GPUs | Queued, not dropped |
| Control plane | Terraform + Git | Not applicable | State is in Git |
Every architecture buys something and pays for something. Here is the bill for this one.
No egress meter, no per-minute transcode bill, no per-session analytics licence. The marginal cost of one more viewer approaches the cost of the bandwidth itself.
Hardware, power, and a peering or transit relationship. This pattern rewards predictable regional traffic and punishes unpredictable global traffic.
Serving a distant continent from one region is a physics problem, not a software one. At that point the answer is the hybrid pattern, not a bigger box.
Less than most people expect. The reference estate runs eighteen isolated guests on a single 2U node, with delivery on separate machines. The right starting size depends on your concurrency and bitrate ladder, which is the first thing a discovery call establishes.
You add a node. Every service is containerised behind its own address and the estate is declared in Terraform, so capacity is a variable rather than a redesign. Object storage is already S3-compatible for exactly this reason.
Your team, if you want that — that is what the runbooks and the training are for. Or we keep operating it under a managed agreement. Both are supported and the technical delivery is identical either way.
Yes, and this is a common path. Because the whole estate is Terraform, moving the application tier to AWS is a change of provider target for that tier, not a rewrite of the platform.
Send the hardware you already have and the traffic you already serve. The first thing you get back is an architecture and an honest answer about whether this pattern fits.