How to install obleth with Docker Compose (development) or Helm (production Kubernetes).
obleth ships as a Docker image and a Helm chart. The Docker Compose stack is the fastest way to get a complete working environment; the Helm chart is for production Kubernetes.
| Method | Requirements |
|---|---|
| Docker Compose | Docker Desktop 4+ (or Docker Engine 24+ with Compose v2) |
| Helm | kubectl configured, Helm 3.10+, a running Kubernetes cluster |
| From source | Rust 1.80+, a running Postgres + Redis + ClickHouse |
The Compose stack in deploy/docker/ starts the full obleth environment:
git clone https://github.com/thediymaker/obleth-gateway.git
cd obleth-gateway
docker compose -f deploy/docker/docker-compose.yml \
--profile mock --profile edge \
up --build -d
The mock profile starts the GPU-free mock vLLM backend. The edge profile starts HAProxy. For a minimal core-only start (no mock upstream, no HAProxy), omit both profiles.
| Service | Host port | URL |
|---|---|---|
| HAProxy (client entry) | 80 | http://localhost |
| obleth data plane (direct) | 8088 | http://localhost:8088 |
| Management API | 9090 | http://localhost:9090 |
| Prometheus metrics | 9091 | http://localhost:9091/metrics |
| Control plane dashboard | 3002 | http://localhost:3002 |
| Mock vLLM backend | 8081 | (internal only) |
Verify the stack is healthy:
curl -s http://localhost/health # ok
curl -s http://localhost:9090/api/v1/health # ok
Copy .env.example to .env in deploy/docker/ and edit:
# Change the admin token before exposing the Management API
OBLETH_ADMIN_TOKEN=change-me-in-production
# Point at a real upstream instead of the mock
OBLETH_UPSTREAM_BASE_URL=http://my-aibrix-or-vllm:8080/v1
# OTLP tracing (optional)
OBLETH_OTEL_ENDPOINT=http://jaeger:4318
For the full list of variables see Environment Variables.
For Prometheus, Grafana, and Jaeger (OTLP):
docker compose -f deploy/docker/docker-compose.yml \
--profile mock --profile edge --profile observability \
up --build -d
Additional services:
| Service | Host port |
|---|---|
| Prometheus | 9095 |
| Grafana (admin/admin) | 3001 |
| Jaeger UI | 16686 |
helm install obleth deploy/k8s/obleth
This starts a self-contained demo: obleth (3 replicas), mock backend, control-plane dashboard, Postgres, Redis, ClickHouse, and an HPA.
For production, disable the bundled dependencies and point at your managed services:
# values-prod.yaml
postgres:
enabled: false
external:
url: postgres://user:pass@my-pg-cluster:5432/obleth
redis:
enabled: false
external:
url: redis://my-redis:6379
clickhouse:
enabled: false
external:
url: http://my-clickhouse:8123
mockBackend:
enabled: false
obleth:
upstreamBaseUrl: https://my-aibrix-gateway/v1
adminToken: change-me # use a Secret instead
replicas: 3
globalMaxInFlight: 256
ingress:
enabled: true
className: nginx
host: obleth.example.com
servicePort: 8080
tls:
- secretName: obleth-tls
hosts: [obleth.example.com]
helm install obleth deploy/k8s/obleth -f values-prod.yaml
For a full reference of chart values, see Helm Values.
Don't put the admin token in values.yaml in plaintext for production. Override it via a Kubernetes Secret:
kubectl create secret generic obleth-admin \
--from-literal=adminToken=my-secret-token
Then reference it in your Helm values using an existingSecret pattern or patch the Deployment's environment after install.
git clone https://github.com/thediymaker/obleth-gateway.git
cd obleth-gateway/obleth
cargo build --release
The binary is at target/release/obleth-proxy. Configure via environment variables:
export OBLETH_DATABASE_URL=postgres://obleth:obleth@localhost:5432/obleth
export OBLETH_REDIS_URL=redis://localhost:6379
export OBLETH_CLICKHOUSE_URL=http://localhost:8123
export OBLETH_UPSTREAM_BASE_URL=http://localhost:8081
export OBLETH_ADMIN_TOKEN=dev-admin-token
./target/release/obleth-proxy
The binary applies the embedded schema on first boot — no manual migration step needed.