Deploy self-hosted¶
Status: Current | Last reviewed: 2026-05-28
On-prem or air-gapped deploy. Every infra dependency runs in cluster; nothing is cloud-managed.
Cluster¶
| Aspect | Value |
|---|---|
| Namespace | trueserve |
| Helm release | trueserve |
| Values file | values.yaml (the base) plus a small site overlay |
One-time setup¶
- Provision a Kubernetes 1.28+ cluster on bare metal or VMs. Two node pools:
defaultfor application services.mediafor telephony pods. Bare metal is preferred for media nodes so you can run rtpengine's kernel module. See media-pool-tuning.md.- Install MetalLB or equivalent for LoadBalancer services.
- Install nginx-ingress.
- Install cert-manager with your corporate CA issuer.
- Create the
trueserve-master-keysecret. - Stand up persistent storage with a CSI driver (Ceph, Longhorn, or local-path-provisioner for single-node).
Deploy¶
helm upgrade --install trueserve charts/trueserve-stack \
-f charts/trueserve-stack/values.yaml \
-f site-overlay.yaml \
--namespace trueserve --create-namespace
site-overlay.yaml is your small per-deployment file that pins:
- Ingress hostnames.
- Storage class names.
- The MASTER_ENCRYPTION_KEY secret reference.
- Image registry mirror (for air-gapped).
Air-gapped considerations¶
- Mirror images to your private registry. Use the chart's
global.image.registryto redirect. - Mirror npm/pypi for catalog-builder + code-executor builds.
- Disable telemetry exporters or point them at internal collectors.
Capacity floor¶
A working self-hosted single-tenant install needs:
- 8 vCPU + 16Gi RAM for the default node pool to run application services with single replicas.
- 4 vCPU + 8Gi RAM for the media pool, with kernel rtpengine.
- 100Gi disk for Postgres + MinIO data.
See also¶
- Helm chart anatomy
- Cloud-managed swap (for the in-cluster column)
- Media pool tuning