wexa-studio-helm

Wexa Studio Helm Chart

Artifact Hub License

Wexa is an enterprise-grade Agentic SaaS platform that enables organizations to build, deploy, and manage AI-powered workflows and automation at scale.

Features

Prerequisites

Required CRDs

Before installing, you must install the MongoDB Community Operator CRDs:

kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-kubernetes-operator/master/config/crd/bases/mongodbcommunity.mongodb.com_mongodbcommunity.yaml

Installation

Add the Helm Repository

helm repo add wexa https://wexahq.github.io/wexa-studio-helm
helm repo update

Install the Chart

# Create namespace
kubectl create namespace wexa

# Install with default values
helm install wexa wexa/wexa-studio -n wexa

# Or install with custom values
helm install wexa wexa/wexa-studio -n wexa -f my-values.yaml

Install from OCI Registry

helm install wexa oci://ghcr.io/wexahq/wexa-studio-helm/wexa-studio -n wexa --create-namespace

Install from Source

git clone https://github.com/wexahq/wexa-studio-helm.git
cd wexa-studio-helm/charts/wexa-studio
helm dependency update
helm install wexa . -n wexa --create-namespace

Configuration

Quick Start (Development)

# dev-values.yaml
global:
  storageClass: "standard"

mongodb:
  auth:
    rootPassword: "dev-password"

redis:
  auth:
    password: "dev-password"

vault:
  dev:
    enabled: true  # Use dev mode (no persistence)

Production Configuration

# prod-values.yaml
global:
  storageClass: "your-storage-class"
  environment: production

# Security
networkPolicies:
  enabled: true

# MongoDB - Change password!
mongodb:
  auth:
    rootPassword: "your-secure-password"
  replicaSet:
    replicas: 3
  persistence:
    size: 100Gi

# Redis - Change password!
redis:
  auth:
    password: "your-secure-password"
  persistence:
    size: 20Gi

# Vault - Production mode with persistence
vault:
  dev:
    enabled: false
  auth:
    rootToken: "your-vault-token"
  persistence:
    size: 10Gi

# MinIO - Change credentials!
minio:
  auth:
    rootUser: "admin"
    rootPassword: "your-secure-password"
  persistence:
    size: 100Gi

# Qdrant - Vector database
qdrant:
  enabled: true
  persistence:
    size: 20Gi

# PostgreSQL (for Temporal)
postgresql:
  auth:
    password: "your-secure-password"
  persistence:
    size: 50Gi

# Application secrets - Change all!
appConfig:
  webServerKey: "your-web-server-key"
  llmServiceServerKey: "your-llm-service-key"
  licenseKey: "your-license-key"

# GHCR authentication for private images
ghcrSecret:
  dockerConfigJson: "base64-encoded-docker-config"

Parameters

Global Parameters

Parameter Description Default
global.namespace Namespace for deployment wexa
global.environment Environment (production/staging/dev) production
global.storageClass Storage class for PVCs ""
global.imagePullSecrets Image pull secrets [{name: ghcr-secret}]

MongoDB Parameters

Parameter Description Default
mongodb.enabled Enable MongoDB true
mongodb.replicaSet.replicas Number of replicas 3
mongodb.auth.rootPassword Root password ""
mongodb.persistence.size PVC size 5Gi

Redis Parameters

Parameter Description Default
redis.enabled Enable Redis true
redis.auth.password Redis password ""
redis.persistence.size PVC size 5Gi

Vault Parameters

Parameter Description Default
vault.enabled Enable Vault true
vault.dev.enabled Enable dev mode false
vault.auth.rootToken Root token ""
vault.persistence.size PVC size 5Gi

MinIO Parameters

Parameter Description Default
minio.enabled Enable MinIO true
minio.auth.rootUser Root user minioadmin
minio.auth.rootPassword Root password ""
minio.persistence.size PVC size 10Gi

Qdrant Parameters

Parameter Description Default
qdrant.enabled Enable Qdrant true
qdrant.image.repository Image repository qdrant/qdrant
qdrant.image.tag Image tag v1.7.4
qdrant.auth.apiKey API key (optional) ""
qdrant.persistence.size PVC size 10Gi
qdrant.service.httpPort HTTP port 6333
qdrant.service.grpcPort gRPC port 6334

Application Parameters

Parameter Description Default
dataService.enabled Enable Data Service true
dataService.replicas Number of replicas 2
dataService.hpa.enabled Enable HPA false
worker.enabled Enable Worker true
worker.replicas Number of replicas 2
scheduleWorker.enabled Enable Schedule Worker true
identityService.enabled Enable Identity Service true
wexaWeb.enabled Enable Web Frontend true

For a complete list of parameters, see values.yaml.

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                         Wexa Platform                           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚  Wexa Web   β”‚  β”‚  Identity   β”‚  β”‚     Data Service        β”‚  β”‚
β”‚  β”‚  (Frontend) β”‚  β”‚  Service    β”‚  β”‚  (API + Migrations)     β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚         β”‚                β”‚                      β”‚               β”‚
β”‚         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β”‚
β”‚                          β”‚                                      β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚   Worker    β”‚  β”‚  Schedule   β”‚  β”‚   LLM Calls Service     β”‚  β”‚
β”‚  β”‚             β”‚  β”‚   Worker    β”‚  β”‚                         β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                      Infrastructure                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚MongoDBβ”‚ β”‚ Redis β”‚ β”‚Temporalβ”‚ β”‚ Vault β”‚ β”‚ MinIO β”‚ β”‚Qdrant β”‚  β”‚
β”‚  β”‚(3node)β”‚ β”‚       β”‚ β”‚        β”‚ β”‚       β”‚ β”‚       β”‚ β”‚       β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                           β”‚                                     β”‚
β”‚                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                             β”‚
β”‚                 β”‚   PostgreSQL    β”‚                             β”‚
β”‚                 β”‚  (for Temporal) β”‚                             β”‚
β”‚                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Upgrading

helm repo update
helm upgrade wexa wexa/wexa-studio -n wexa

Uninstalling

helm uninstall wexa -n wexa

# Optional: Delete PVCs
kubectl delete pvc -l app.kubernetes.io/instance=wexa -n wexa

# Optional: Delete namespace
kubectl delete namespace wexa

Troubleshooting

Pods not starting

Check pod events:

kubectl describe pod <pod-name> -n wexa

MongoDB connection issues

Verify replica set status:

kubectl exec -it wexa-mongodb-0 -n wexa -- mongosh -u admin -p <password> --authenticationDatabase admin --eval "rs.status()"

Temporal namespace not found

The chart automatically creates the default namespace in Temporal. Check the job:

kubectl logs job/wexa-temporal-namespace-setup -n wexa

Vault sealed

If Vault is sealed after restart:

# Get unseal key (if stored in secret)
kubectl get secret wexa-vault-keys -n wexa -o jsonpath='{.data.unseal-key}' | base64 -d

# Unseal
kubectl exec -it wexa-vault-0 -n wexa -- vault operator unseal <unseal-key>

Qdrant connection issues

Check Qdrant status:

kubectl exec -it wexa-qdrant-0 -n wexa -- curl http://localhost:6333/healthz

Contributing

We welcome contributions! Please see our Contributing Guide for details.

License

This Helm chart is licensed under the Apache License 2.0. See LICENSE for details.

Support