Ensemble Docs
Self-Hosting

Configuration Reference

The complete environment variable and secrets reference for the server, worker, web, and migration components.

This page is the authoritative reference for every environment variable the platform reads, split into non-secret configuration and secrets.

How configuration reaches the pods

There are two channels, and they are separate on purpose:

  • Non-secret configuration is set per component under server.config, web.config, and worker.config in your Helm values. The chart renders these directly as environment variables on the corresponding pods. The server and web pods also receive PORT automatically.
  • Secrets live in your cloud secrets manager and are synchronized into a Kubernetes Secret (see Secrets). You attach that Secret to each component with server.envFrom, worker.envFrom, and web.envFrom.

The chart does not attach the secret to pods for you. If envFrom is not set on a component, that component starts without its secrets and will fail to reach the database. Make sure the secret name in envFrom matches the secret you actually created.

Most helm_config_values (the non-secret cloud wiring: bucket names, KMS key references, region, scheduler ARNs, auth pool IDs) are emitted directly by Terraform as an output you can feed into *.config. See Terraform.

Server configuration

Required (all clouds)

VariableDescription
CLOUD_PROVIDERaws or gcp
SERVERLESS_ENVIRONMENTtrue or false (self-hosted is false)
AUTH_PROVIDERfirebase or cognito
SERVER_URLPublic URL of the API
WEB_URLPublic URL of the web app
SYSTEM_ADMIN_EMAILSComma-separated list of system administrator emails
SCHEDULER_SERVICE_URLCallback URL scheduled jobs invoke
STORAGE_USER_FILES_BUCKETUser files bucket name
STORAGE_DOCUMENTS_BUCKETDocuments bucket name
STORAGE_TENANT_MIGRATIONS_BUCKETTenant migrations bucket name
STORAGE_EXPORTS_BUCKETExports bucket name
KMS_SECRETS_KEYRING, KMS_SECRETS_KEYKMS keyring/key for secret encryption
KMS_CONNECTIONS_KEYRING, KMS_CONNECTIONS_KEYKMS keyring/key for connection credentials
KMS_ENVIRONMENT_KEYRING, KMS_ENVIRONMENT_KEYKMS keyring/key for environment data

Required on AWS

AWS_REGION, AWS_COGNITO_USER_POOL_ID, AWS_COGNITO_REGION, AWS_SCHEDULER_EVENT_SOURCE, AWS_SCHEDULER_GROUP_NAME, AWS_SCHEDULER_ROLE_ARN, AWS_SCHEDULER_TARGET_ARN.

Required on GCP

GOOGLE_CLOUD_PROJECT, GCP_REGION, GCP_SERVICE_ACCOUNT, KMS_LOCATION_ID.

Required when using Firebase auth

FIREBASE_API_KEY, FIREBASE_AUTH_DOMAIN, FIREBASE_PROJECT_ID, FIREBASE_STORAGE_BUCKET, FIREBASE_MESSAGING_SENDER_ID, FIREBASE_APP_ID, FIREBASE_MEASUREMENT_ID.

Optional

VariableDefaultDescription
SELF_HOSTINGfalseRestricts tenant deletion to a superuser; single-org mode
LOG_LEVELinfoLog verbosity: trace, debug, info, warn, error, fatal. Step-by-step tracing is logged at debug, so info keeps normal operation quiet. Raise to debug to diagnose, then lower it again — debug is very verbose on hot paths.
TEMPORAL_HOSTTemporal endpoint host:port
TEMPORAL_NAMESPACETemporal namespace
TEMPORAL_TASK_QUEUETask queue name
TEMPORAL_TLSfalseEnable TLS to Temporal
TEMPORAL_TLS_CA, TEMPORAL_TLS_CERTmTLS CA and client cert paths
REDIS_HOSTEnables the centralized cache (cross-instance AI rate limiting and env-change cache invalidation). Active only when set and SERVERLESS_ENVIRONMENT=false
REDIS_PORT6379
REDIS_TLSfalse
REDIS_USERNAMERedis 6+ ACL user. Leave unset to authenticate as the default user
DEFAULT_LLM_MODEL_FAMILYhaikuOne of haiku, sonnet, gpt, gpt-mini, gemini-pro, gemini-flash, kimi, glm
VECTOR_EMBEDDING_PROVIDERopenaiopenai, azure, or bedrock
VECTOR_EMBEDDING_MODELtext-embedding-3-small
VECTOR_EMBEDDING_API_ENDPOINTAzure endpoint
VECTOR_EMBEDDING_REGIONBedrock region (falls back to AWS_REGION)
VECTOR_EMBEDDING_DIMENSIONSFor models that support configurable dimensions

Worker configuration

The worker runs activities; it does not serve the UI or handle auth, so it needs a smaller set.

Required (all clouds)

CLOUD_PROVIDER, SERVERLESS_ENVIRONMENT, SERVER_URL, STORAGE_USER_FILES_BUCKET, STORAGE_DOCUMENTS_BUCKET, STORAGE_TENANT_MIGRATIONS_BUCKET, and the six KMS_*_KEYRING / KMS_*_KEY variables (secrets, connections, environment).

Cloud-specific

  • AWS: AWS_REGION.
  • GCP: GOOGLE_CLOUD_PROJECT, GCP_REGION, GCP_SERVICE_ACCOUNT, KMS_LOCATION_ID.

Optional

The Temporal group (TEMPORAL_HOST, TEMPORAL_NAMESPACE, TEMPORAL_TASK_QUEUE, TEMPORAL_TLS, TEMPORAL_TLS_CA, TEMPORAL_TLS_CERT), the Redis group (REDIS_HOST, REDIS_PORT, REDIS_TLS, REDIS_USERNAME), and DEFAULT_LLM_MODEL_FAMILY.

Web configuration

Required

VariableDescription
AUTH_PROVIDERfirebase or cognito
SERVER_URLPublic URL of the API
WEB_URLPublic URL of the web app
SYSTEM_ADMIN_EMAILSComma-separated administrator emails

Cloud-specific

  • AWS (Cognito): AWS_COGNITO_USER_POOL_ID, AWS_COGNITO_CLIENT_ID, AWS_COGNITO_DOMAIN.
  • Firebase: the same seven FIREBASE_* variables as the server.

Optional

VariableDefaultDescription
TEMPORAL_WORKFLOW_URLTemporal UI URL for deep links
SELF_HOSTINGfalseHides tenant/user switching and invitations
LOGIN_EMAIL_PASSWORD_ENABLEDtrueEmail/password login
LOGIN_GOOGLE_ENABLEDfalseGoogle OAuth login
LOGIN_MICROSOFT_ENABLEDfalseMicrosoft OAuth login
LOGIN_OKTA_ENABLEDfalseOkta OIDC login

Secrets

Secrets are supplied through the secret channel, not *.config. Two are required; the rest are optional and only needed for the features that use them.

Required (server and worker)

SecretDescription
PG_BASE_URLPostgreSQL connection URL, for example postgresql://user:pass@host:5432/workflows?sslmode=require
TEMPORAL_API_KEYTemporal Cloud API key (or use mTLS certs instead)

Optional (provider and integration keys)

LLM providers: OPENAI_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY, DEEPSEEK_API_KEY, CEREBRAS_API_KEY, MOONSHOTAI_API_KEY, ZHIPU_API_KEY.

Embeddings: VECTOR_EMBEDDING_API_KEY (falls back to OPENAI_API_KEY).

Tools and integrations: GOOGLE_MAPS_API_KEY, BRAVE_SEARCH_API_KEY, AIRTABLE_API_KEY, SLACK_BOT_TOKEN, SLACK_SIGNING_SECRET, TWILIO_ACCOUNT_SID, TWILIO_API_KEY_SID, TWILIO_API_KEY_SECRET, TWILIO_AUTH_TOKEN, TWILIO_PHONE_NUMBER, RESEND_API_KEY, SENDGRID_API_KEY, ELEVENLABS_API_KEY.

Provisioning (multi-tenant Neon setups): NEON_API_KEY, NEON_PROJECT, NEON_BRANCH, NEON_OWNER_NAME.

Other: SYSTEM_DB_NAME (defaults to system), REDIS_PASSWORD (only if your Redis requires auth).

The web component only reads one optional secret, ELEVENLABS_API_KEY (for the voice feature). All other secrets are consumed by the server and worker.

Migration job configuration

The migration job connects to PostgreSQL and applies schema changes. It reads a minimal set:

VariableRequiredDescription
PG_BASE_URLYesPostgreSQL URL without a database name, for example postgresql://user:pass@host:5432
SYSTEM_DB_NAMENoDatabase name, defaults to system
SEED_DATANoJSON describing tenants and accounts to seed on first run

Seeding users requires the auth provider to be reachable: on Cognito set AUTH_PROVIDER=cognito, AWS_COGNITO_USER_POOL_ID, and AWS_COGNITO_REGION; on Firebase set AUTH_PROVIDER=firebase and GOOGLE_APPLICATION_CREDENTIALS (path to a service account JSON). Seed operations are upserts, so re-running is safe.

On this page