Contact our team to unlock self-hosted locations on your account before starting.
Prerequisites
You also need an environment set up in the Xpander Console to get your
organizationId, environmentId, and deploymentManagerApiKey. Create one at app.xpander.ai/environments.
Architecture
The Helm chart deploys eight application services plus two data stores:
In addition, the chart enables an in-cluster Docker registry and a metrics-server by default. Disable them with
dockerRegistry.enabled=false and metricsServer.enabled=false if your cluster already provides equivalents.
When you set a domain and enable ingress, the chart creates a hostname for each application service:
agent-controller.{domain}(SDK and REST calls)ai-gateway.{domain}(LLM provider routing)mcp.{domain},chat.{domain},agent-worker.{domain},code-runner.{domain},aws-operator.{domain},api.{domain}(internal traffic; you typically only call the first two)
Networking: outbound only
Your cluster makes outbound connections to Xpander. Xpander never initiates inbound connections to your cluster. Outbound destinations (HTTPS, port 443):Install with Helm
Add the Helm repository:ingress.enabled=true and a domain:
Production install with LLM keys
For production, add your LLM provider keys and use a values file for cert-manager, storage, and resource limits:Configuration reference
Required parameters
Common optional parameters
Verify the deployment
Check pod status:redis and postgres StatefulSet pods. With default settings the in-cluster docker-registry and metrics-server pods also run.
Test the public health endpoints through port-forwarding:
Connect the SDK to your deployment
Point the SDK at your Agent Controller hostname and use the Agent Controller API key (not your Xpander cloud key):Upgrade
Pull the latest chart and upgrade in place, reusing your existing values:Troubleshoot
Pods stuck in Pending
Pods stuck in Pending
Usually a storage class or PVC issue. Check PVC status:Confirm your cluster has a default storage class, or set
redis.storage.storageClass and the PostgreSQL equivalent explicitly.Ingress not accessible
Ingress not accessible
Check the ingress is created and pointing to services:Verify your DNS records point to the ingress controller’s external IP and that the controller itself is running (it usually lives in its own namespace, e.g.
ingress-nginx).Health checks failing
Health checks failing
Check component logs:The Agent Controller needs to reach Xpander’s outbound IPs on port 443. If egress is blocked, health checks fail.
LLM calls fail with missing API key
LLM calls fail with missing API key
Verify the keys are reaching the agent-worker pod:If missing, re-run the upgrade with
--set agent-worker.env.AGENTS_OPENAI_API_KEY=... or check that your secret is correctly mounted through envFromSecretKeys.Uninstall
What’s next
Monitor Runs
Trace execution, debug failures, and review AI performance
SDK Configuration
Full SDK configuration reference for self-hosted deployments.

