Quick Start
1
Create the auth token Secret
Pre-create the Secret out-of-band (GitOps-friendly) instead of putting a token in Git.
2
Install the chart from a local checkout
Point the release at the pre-created Secret. The same chart is also installable via
praisonai deploy helm --chart gateway (see the Helm CLI Wrapper).3
Verify with a port-forward
Forward the Service and hit the health endpoint.
How It Works
Helm renders the templates into Kubernetes objects, then the gateway container starts and reads its auth token from the Secret.Configuration Options
Every key below is fromsrc/praisonai-bot/infra/helm/praisonai-gateway/values.yaml.
Default
ingress.annotations:
Security — Auth Is Fail-Fast by Default
Whenauth.enabled=true (the default), the chart refuses to render unless a token source is provided.
Without a token source, the render fails:
auth.enabled=trueonly (no ingress):auth.enabled is true but no auth.existingSecret or auth.token was provided. Set one of them, or disable auth with auth.enabled=false.auth.enabled=trueandingress.enabled=true:auth.enabled and ingress.enabled are true but no auth.existingSecret or auth.token was provided. Refusing to expose the gateway without a GATEWAY_AUTH_TOKEN.
auth.enabled=false.
The injected env var is always named GATEWAY_AUTH_TOKEN — that is the only name the gateway reads. auth.secretKey selects which data key in the Secret to read, not the env var name. Renaming auth.secretKey does not rename the env var.
Passing Other Secrets (LLM Keys) via env
Pass provider keys with the valueFrom.secretKeyRef pattern.
WebSocket Ingress — Sticky Sessions
The gateway is stateful per WebSocket connection, so multi-replica setups need sticky sessions. The default NGINX annotations set long read/send timeouts. Add a cookie affinity annotation for sticky sessions:Ingress + TLS Example
Expose the gateway on a real hostname with TLS.Autoscaling (HPA)
Enable CPU-based scaling with an HPA.Scope
This chart intentionally covers the gateway only. Other services (
serve, claw, bots) run from the same GHCR image and can be templated similarly if needed, but are out of scope for this chart.Best Practices
Prefer auth.existingSecret over auth.token
Prefer auth.existingSecret over auth.token
Inline tokens end up in Git. Pre-created Secrets don’t — create the Secret out-of-band and reference it with
auth.existingSecret.Pin image.tag to a released version in production
Pin image.tag to a released version in production
The default
image.tag falls back to Chart appVersion ("latest"), which drifts. Pin a released tag such as "4.6.157" for reproducible deployments.Keep replicaCount: 1 until sticky sessions are configured
Keep replicaCount: 1 until sticky sessions are configured
WebSocket state is per-pod. Scale beyond one replica only after enabling sticky sessions or a shared session backend.
Set resources requests/limits
Set resources requests/limits
The chart ships
resources: {} by default, so the pod has no guaranteed CPU/memory. Set requests and limits — commented-out example values are in values.yaml.Related
Gateway & Control Plane
The service this chart deploys.
Docker Deployment
Docker deployment alternative.

