Modular Deploy

Compose profiles and Helm toggles for lean production or full demo stacks.

obleth ships as a small core plus optional components. Both the Docker Compose stack and the Helm chart let you turn pieces on and off so the same artifacts serve a one-command demo and a lean production install.

Core vs optional

Core (always on): Postgres (config source of truth + audit), Redis (hot cache + token budgets + response cache), ClickHouse (usage ledger), the obleth data plane, and the control-plane dashboard.

Optional:

ComponentRoleWhen to enable
mock-backendGPU-free OpenAI-compatible upstreamdev / demos only
HAProxy / IngressTLS termination + round-robin across obleth podswhen you don't already have an edge LB
Prometheus + Grafanametrics scrape + dashboardswhen you want in-cluster metrics
Jaeger (OTLP collector)distributed tracing backendwhen OBLETH_OTEL_ENDPOINT is set

HAProxy is a normal part of a gateway of this class. Keep it for self-contained demos; in production you'll usually replace it with a managed load balancer (Compose edge profile) or a Kubernetes Ingress (Helm ingress.enabled).

Docker Compose profiles

Profiles gate the optional services. Core services have no profile and always start.

# Lean core only (point obleth at a real upstream, see below)
docker compose -f deploy/docker/docker-compose.yml up

# Full dev/demo stack
docker compose -f deploy/docker/docker-compose.yml \
  --profile mock --profile edge --profile observability up

Or default the profiles on for dev by setting COMPOSE_PROFILES in deploy/docker/.env (copy from .env.example):

COMPOSE_PROFILES=mock,edge,observability
ProfileServices
mockmock-backend
edgehaproxy
observabilityprometheus, grafana, jaeger

Pointing at a real upstream

obleth no longer hard-depends on the mock backend. Set the upstream in .env:

OBLETH_UPSTREAM_BASE_URL=https://my-vllm-or-aibrix-endpoint/v1

Run without the mock profile and obleth routes straight to your real inference endpoint. Per-model overrides still take precedence via the model registry.

Shared settings

.env.example documents the keys that must agree across services:

  • OBLETH_ADMIN_TOKEN — shared by obleth and control-plane.
  • OBLETH_UPSTREAM_BASE_URL — default upstream for the data plane.
  • OBLETH_OTEL_ENDPOINT — OTLP/HTTP collector base URL (empty = tracing off).
  • DASHBOARD_USERNAME / DASHBOARD_PASSWORD / DASHBOARD_SESSION_SECRET — dashboard auth.

Helm

The chart bundles dependencies for a self-contained install and lets you swap any of them for an external/operator-managed endpoint.

Dependency toggles

postgres:
  enabled: false                 # use an external/operator Postgres
  external:
    url: postgres://user:pass@pg-host:5432/obleth
redis:
  enabled: false
  external:
    url: redis://redis-host:6379
clickhouse:
  enabled: false
  external:
    url: http://clickhouse-host:8123
mockBackend:
  enabled: false                 # production: no mock
obleth:
  upstreamBaseUrl: https://my-vllm-endpoint/v1

When a dependency is enabled: false, its external.url is required — the chart wires obleth at that URL instead of an in-chart service. Leaving it blank fails the render with a clear message rather than booting a misconfigured pod.

Ingress (HAProxy's k8s equivalent)

ingress:
  enabled: true
  className: nginx
  host: obleth.example.com
  servicePort: 8080
  tls:
    - secretName: obleth-tls
      hosts: [obleth.example.com]

Tracing

obleth:
  otelEndpoint: http://my-collector:4318

Dashboard auth

controlPlane:
  dashboardUsername: admin
  dashboardPassword: change-me
  dashboardSessionSecret: a-long-random-secret

Values matrix (quick reference)

ValueDefaultEffect
postgres.enabledtruebundle Postgres vs use postgres.external.url
redis.enabledtruebundle Redis vs use redis.external.url
clickhouse.enabledtruebundle ClickHouse vs use clickhouse.external.url
mockBackend.enabledtruebundle mock upstream (set false + obleth.upstreamBaseUrl in prod)
ingress.enabledfalseexpose obleth through an Ingress
hpa.enabledtrueautoscale obleth on CPU
serviceMonitor.enabledfalsecreate a Prometheus Operator ServiceMonitor
obleth.otelEndpoint""OTLP/HTTP trace export target