Skip to content
Tone is open sourcestar us on GitHub to follow along

self hosting

Docker Compose

Run Tone on a single host with Docker Compose.

Docker Compose is the fastest way to get Tone running on a single host — your laptop, a staging server, or a small production deployment.

Files

The repo ships with two files:

  • docker-compose.yml — the canonical stack (api, worker, postgres, redis, clickhouse).
  • docker-compose.override.yml.example — copy to docker-compose.override.yml and edit to add secrets, mount custom configs, or change ports.

Configuration

All configuration is via environment variables. The most important ones:

# .env
TONE_PUBLIC_URL=https://tone.example.com
TONE_DATABASE_URL=postgres://tone:tone@postgres:5432/tone
TONE_REDIS_URL=redis://redis:6379
TONE_CLICKHOUSE_URL=http://clickhouse:8123
 
# Telephony
TWILIO_ACCOUNT_SID=...
TWILIO_AUTH_TOKEN=...
 
# Models
OPENAI_API_KEY=...
DEEPGRAM_API_KEY=...

A full list is in .env.example.

TLS

For production deployments, terminate TLS with a reverse proxy in front of the api service. The repo includes example configs for Caddy, nginx, and Traefik in the deploy/ folder.

Backups

Postgres and ClickHouse are stateful. The Compose file mounts named volumes by default; back them up the way you back up any other Docker volumes (docker run --rm -v tone_postgres_data:/data ...).

When to graduate to Kubernetes

Compose works fine up to ~50 concurrent calls. Beyond that, you'll want the worker autoscaling and pod-level isolation that the Helm chart provides.