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.

Last updated: | By Rafal Fila