Docker Deployment
Deploy the full Tetrapus stack with a single command. All images are pulled from registry.tetrapus.com — no GitHub required.
Services
| Service | Image | Ports | Purpose |
|---|---|---|---|
| tetrapus-server | registry.tetrapus.com/tetrapus-server | 4433/udp, 9800, 9801 | Headless ingest & API server |
| nerve-bridge | registry.tetrapus.com/nerve-bridge | — | WAL → ClickHouse batch writer |
| scene-server | registry.tetrapus.com/scene-server | 3000 | Octree tile rendering |
| tile-deriver | registry.tetrapus.com/tile-deriver | 3010 | Derived tile server |
| clickhouse | clickhouse/clickhouse-server:24.3 | 8123, 9000 | Column store for telemetry |
| prometheus | prom/prometheus:latest | 9090 | Metrics scraping |
| grafana | grafana/grafana:latest | 3030 | Dashboards & alerting UI |
| watchtower | containrrr/watchtower:latest | — | Auto-update on new images |
Start the Stack
Bash
# Download the production compose file
curl -O https://tetrapus.com/deploy/docker-compose.yml
curl -O https://tetrapus.com/deploy/.env.template
# Configure
cp .env.template .env
# Edit .env — set CLICKHOUSE_PASSWORD and other values
# Launch
docker compose up -d Environment Variables
| Variable | Default | Description |
|---|---|---|
| REGISTRY | registry.tetrapus.com | Container image registry |
| TAG | stable | Image tag (stable, latest, or version) |
| CLICKHOUSE_PASSWORD | — | ClickHouse password (required) |
| BIND_ADDR | 0.0.0.0:4433 | QUIC ingest listen address |
| WS_ADDR | 0.0.0.0:9800 | WebSocket API address |
| HEALTH_ADDR | 0.0.0.0:9801 | REST API address |
| BATCH_SIZE | 10000 | ClickHouse insert batch size |
| FLUSH_INTERVAL_MS | 1000 | ClickHouse flush interval |
| RUST_LOG | info | Log level (trace, debug, info, warn, error) |
Verify
Bash
# Health check
curl http://localhost:9801/api/v1/health
# Grafana dashboard
open http://localhost:3030 # admin / admin
# Watch logs
docker compose logs -f tetrapus-server Auto-Updates
Watchtower monitors registry.tetrapus.com for new image tags and automatically rolls out updates with zero downtime. The default poll interval is 5 minutes.
Questions?
Reach out for help with integration, deployment, or custom domain codecs.