How do you deploy Temporal self-hosted in 2026?
Quick Answer: As of April 2026, the supported way to deploy self-hosted Temporal is via the official Helm chart on Kubernetes, paired with PostgreSQL or MySQL for persistence and either Cassandra or Elasticsearch for visibility. Single-node Docker Compose is supported for development but not production.
Deploying Temporal Self-Hosted
Self-hosted Temporal Server is free under MIT license. As of April 2026, production deployments follow a standard pattern.
Step 1 — Pick a Persistence Backend
Temporal stores history in a SQL or Cassandra database:
- PostgreSQL 12+ — Most common for small to medium installs
- MySQL 8+ — Equivalent functionality, Aurora-compatible
- Cassandra — Recommended above ~1,000 actions/second
Visibility (search/UI queries) requires either Elasticsearch 7.10+/OpenSearch 2.x, or relies on standard visibility (SQL) for smaller deployments.
Step 2 — Deploy via Helm
Use the official Helm chart in the temporalio/helm-charts repo:
helm install temporal ./temporal \
--namespace temporal --create-namespace \
--set server.replicaCount=3
The chart deploys four service roles: Frontend, History, Matching, and Worker. Each can scale independently.
Step 3 — Set Up the Web UI and Auth
The Temporal Web UI ships as a separate container. Production deployments enable mTLS between client and Frontend, and configure OIDC or SAML SSO for the UI.
Step 4 — Operate
Use tctl or temporal CLI for namespace management. Monitor with the bundled Prometheus metrics endpoint (8000/metrics) and Grafana dashboards from the temporalio/dashboards repo. Plan disaster recovery with a standby cluster and async replication.