Temporal Server can be installed and configured in multiple ways depending on your environment and requirements. This guide covers installation from pre-built binaries, building from source, and configuring various persistence backends.
# Download for Linux (replace VERSION with the latest version)curl -L https://github.com/temporalio/cli/releases/download/VERSION/temporal_cli_VERSION_linux_amd64.tar.gz | tar xz# Move to system pathsudo mv temporal /usr/local/bin/# Verify installationtemporal --version
# Build for LinuxGOOS=linux GOARCH=amd64 make bins# Build for macOS (ARM)GOOS=darwin GOARCH=arm64 make bins# Build for WindowsGOOS=windows GOARCH=amd64 make bins
Best for local development and testing. Data can be in-memory or file-based.
In-Memory
File-Based
# Using Temporal CLItemporal server start-dev# Using built binarymake start-sqlite# Or directly:./temporal-server --config-file config/development-sqlite.yaml --allow-no-auth start
In-memory SQLite does not persist data between server restarts. All workflows and history will be lost when the server stops.
# Using make targetmake start-sqlite-file# Or with custom config./temporal-server --config-file config/development-sqlite-file.yaml --allow-no-auth start
File-based SQLite persists data to disk, allowing you to restart the server without losing data.
Recommended for production deployments with moderate scale.
1
Start MySQL
# Using Dockerdocker run -d --name temporal-mysql \ -e MYSQL_ROOT_PASSWORD=root \ -p 3306:3306 \ mysql:8.0.29-oracle# Or use the provided Docker Composemake start-dependencies
2
Install Schema
make install-schema-mysql
This command:
Creates the temporal and temporal_visibility databases
Installs the required schema for both databases
Applies all schema migrations
You can customize database names using environment variables:
TEMPORAL_DB=my_temporal VISIBILITY_DB=my_visibility make install-schema-mysql
3
Start the Server
make start-mysql# Or directly:./temporal-server --env development-mysql8 --allow-no-auth start
Best for large-scale deployments requiring horizontal scalability.
1
Start Cassandra
# Using Dockerdocker run -d --name temporal-cassandra \ -e CASSANDRA_LISTEN_ADDRESS=127.0.0.1 \ -p 9042:9042 \ cassandra:3.11# Or use Docker Composemake start-dependencies
You can run individual Temporal services instead of all services:
# Run only frontend and history services./temporal-server --config-file config.yaml --service frontend --service history start# Using environment variableTEMPORAL_SERVICES=frontend,history ./temporal-server --config-file config.yaml start