Docker Compose

Deploy Tuneloop with Docker Compose for a single-node setup. This is the fastest way to get running.

Prerequisites

  • Docker Engine 24+ and Docker Compose v2
  • Docker Hub credentials provided by the Tuneloop team (username + access token)

Quick Start

Authenticate with Docker Hub using the credentials provided by Tuneloop:

docker login -u <username>
# Enter the access token when prompted

Create a directory for your Tuneloop deployment and download the Compose file and environment template:

mkdir tuneloop && cd tuneloop
curl -fsSL https://tuneloop.io/deploy/docker-compose.yml -o docker-compose.yml
curl -fsSL https://tuneloop.io/deploy/.env.example -o .env

Generate secrets and edit .env:

# Generate a Postgres password and ingest token
openssl rand -hex 32   # use output for POSTGRES_PASSWORD
openssl rand -hex 32   # use output for TUNELOOP_INGEST_TOKEN
# Required
POSTGRES_PASSWORD=<generated-password>
TUNELOOP_INGEST_TOKEN=<generated-token>

# Recommended
TUNELOOP_EMAIL_DOMAIN=yourcompany.com
TUNELOOP_LLM_PROVIDER=anthropic
TUNELOOP_LLM_MODEL=claude-haiku-4-5
TUNELOOP_LLM_API_KEY=sk-...

The ingest token authenticates transcript uploads from all machines running tuneloop-ingest. Save it — you'll distribute it to your team alongside the CLI.

Start the services:

docker compose up -d

The dashboard is available at http://localhost:4319. For remote access from other machines, replace localhost with the host's IP or DNS name — this is the same address you'll configure in tuneloop-ingest on each machine where your agents run.

Services

The Compose file runs five services:

ServiceRolePort
postgresData store5432 (internal only)
migrateApplies schema migrations, then exits
webAPI server + dashboard4319
workerBackground analysis pipeline
runnerBenchmark execution (optional, requires Docker socket)

All services pull from the private tuneloop/tuneloop Docker Hub image. The migrate service runs first and exits; web, worker, and runner start after migrations complete.

Configuration

See Configuration for the full list of environment variables, including LLM enrichment, GitHub App, and Jira connector setup.

TLS

The Compose setup serves plain HTTP on port 4319. To enable HTTPS, terminate TLS in front of the web service with a reverse proxy or load balancer and set:

TUNELOOP_COOKIE_INSECURE=0

Updating

Pull the latest image and restart:

docker compose pull
docker compose up -d

Migrations run automatically on startup.

Teardown

Stop all services and remove containers:

docker compose down

To also delete the Postgres data volume (all stored sessions and analysis):

docker compose down -v

Next Steps

Once the server is running:

  1. Configure LLM enrichment and connectors
  2. Set up integrations to start capturing sessions from your team's coding agents
  3. Connect GitHub and Jira for outcome linking