Skip to content

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

  1. Provision a Kubernetes 1.28+ cluster on bare metal or VMs. Two node pools:
  2. default for application services.
  3. media for telephony pods. Bare metal is preferred for media nodes so you can run rtpengine's kernel module. See media-pool-tuning.md.
  4. Install MetalLB or equivalent for LoadBalancer services.
  5. Install nginx-ingress.
  6. Install cert-manager with your corporate CA issuer.
  7. Create the trueserve-master-key secret.
  8. 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.registry to 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