Skip to content

Deploying SignalDB on Dokku

SignalDB can be deployed on Dokku using the monolithic Docker image from GHCR, or by building from source via git push. (Every SignalDB image ships the same signaldb binary; the monolithic image runs it with no subcommand, the per-service images with signaldb <service> — see Binary Runtime Characteristics.)

From GHCR image

# Create app
dokku apps:create signaldb

# Persistent storage
sudo mkdir -p /var/lib/dokku/data/storage/signaldb-{wal,data,db}
sudo chown -R 1000:1000 /var/lib/dokku/data/storage/signaldb-*
dokku storage:mount signaldb /var/lib/dokku/data/storage/signaldb-wal:/data/wal
dokku storage:mount signaldb /var/lib/dokku/data/storage/signaldb-data:/data/storage
dokku storage:mount signaldb /var/lib/dokku/data/storage/signaldb-db:/data/db

# Configuration
dokku config:set signaldb \
  SIGNALDB_DATABASE_DSN="sqlite:///data/db/signaldb.db" \
  SIGNALDB_DISCOVERY_DSN="sqlite:///data/db/signaldb.db" \
  SIGNALDB_STORAGE_DSN="file:///data/storage" \
  SIGNALDB_SCHEMA_CATALOG_URI="sqlite:///data/db/catalog.db" \
  ACCEPTOR_WAL_DIR="/data/wal/acceptor" \
  WRITER_WAL_DIR="/data/wal/writer" \
  RUST_LOG=info

# Ports
dokku ports:set signaldb http:4318:4318 grpc:4317:4317 grpc:50051:50051 grpc:50053:50053 http:3000:3000

# Deploy
dokku git:from-image signaldb ghcr.io/cedricziel/signaldb:<version>

From source (git push)

Dokku will build using the production Dockerfile with the monolithic target. The Dockerfile's default BUILDER=source and UI_BUILDER=source paths compile the services and the Explore UI inside the container (the prebuilt variants of both are only used by CI, which supplies pre-compiled musl binaries and a pre-built UI dist), so no extra build arguments are needed (the source build also needs vendor/otel-semconv/ and otel/registry/, which are in the repo — common's build script embeds the bundled schema registries from them). Stick to the monolithic target: the monolithic-glibc-profiling stage has no build-from-source path — it only assembles a binary that CI stages in dist-glibc/ — so a git-push build of it will fail. If you need heap profiles, consume that variant as an image instead (ghcr.io/cedricziel/signaldb:main-glibc-profiling, amd64 only); see Binary runtime characteristics.

dokku apps:create signaldb
dokku docker-options:add signaldb build "--target monolithic"
# Apply the same storage, config, and port settings as above

git remote add dokku dokku@your-server:signaldb
git push dokku main

Ports

Port Protocol Service
4317 gRPC OTLP gRPC ingestion
4318 HTTP OTLP HTTP ingestion
50051 gRPC Writer Flight
50053 gRPC Router Flight
3000 HTTP Tempo-compatible HTTP API and explore UI (/ui)

Health checks

curl http://signaldb.your-domain:4318/health  # Acceptor
curl http://signaldb.your-domain:3000/health   # Router HTTP API