Skip to Content

Services

The docker-compose.yml runs seven services:

ServiceImagePortPurpose
postgrespostgres:16-alpine5432Relational data (orgs, users, teams, integrations)
clickhouseclickhouse/clickhouse-server:24-alpine8123Telemetry analytics (traces, metrics, logs)
redisredis:7-alpine6379Caching
otel-collectorotel/opentelemetry-collector-contrib4317/4318Telemetry ingestion and routing
backendBuilt from Dockerfile3001NestJS API server
frontendBuilt from Dockerfile3000Next.js dashboard
openmemorymem0/openmemory-mcp8765MCP memory server (persistent AI memory per developer)

Production Mode

cd ~/.tandemu # or wherever you cloned the repo docker compose up --build -d

This builds the backend and frontend into optimized Docker images and runs everything.

Development Mode

For hot-reload during development:

docker compose -f docker-compose.yml -f docker-compose.dev.yml up

This:

  • Starts infrastructure services (Postgres, ClickHouse, Redis, OTel Collector) normally
  • Runs the backend with tsc --watch + node --watch — restarts on TypeScript changes
  • Runs the frontend with next dev — instant hot module replacement
  • Mounts source code as volumes so edits are picked up immediately

Persistent Data

Three named volumes store persistent data:

VolumePath in ContainerData
postgres_data/var/lib/postgresql/dataOrganizations, users, teams, integrations
clickhouse_data/var/lib/clickhouseAll telemetry data
redis_data/dataCache (ephemeral, safe to lose)
openmemory_data/app/dataDeveloper memories (personality, coding preferences)

To reset all data:

docker compose down -v

This removes all volumes. Next up starts fresh.

Updating

cd ~/.tandemu git pull docker compose up --build -d

Database migrations are applied automatically by the install script, or manually:

for f in packages/database/src/migrations/*.sql; do docker exec -i tandemu-postgres-1 psql -U tandemu -d tandemu < "$f" done

Health Checks

Postgres, ClickHouse, and Redis have built-in health checks. The backend and frontend wait for Postgres and Redis to be healthy before starting.

Check status:

docker compose ps

All services should show Up or Up (healthy).

Last updated on