Tutorial
Run Signals locally with Docker Compose
This is the fastest way to see Elevarq Signals work end to end. Docker Compose spins up PostgreSQL and Signals together, in dev mode, against a throwaway local database — no cloud account, no real credentials. By the end you will have triggered a collection and exported a snapshot on your own machine. This stack is for evaluation and local development only; it is not a production deployment.
Prerequisites
gitanddockerwith the Compose plugin (docker compose).curlandunzipto drive the API and inspect the snapshot.- Free TCP ports
8081(Signals API) and5432(PostgreSQL) on your host.
1. Clone the repository
Everything you need ships in the repo, including the example stack:
git clone https://github.com/Elevarq/Signals.git
cd Signals2. Start the stack
Bring both services up in the background. Compose boots a postgres:16-alpine instance with pg_stat_statements preloaded, runs init.sql to create a read-only signals role, and then starts the Signals daemon in dev mode connecting to the postgres service:
docker compose -f examples/docker-compose.yml up -dThe Signals daemon waits for PostgreSQL to report healthy before it starts. The example stack configures it entirely through environment variables — connecting to host postgres as user signals against database postgres, polling every 1m, and listening on 0.0.0.0:8081 so the port mapping reaches it. The read-only role is created by init.sql:
CREATE ROLE signals WITH LOGIN PASSWORD 'monitor_pass';
GRANT pg_monitor TO signals;
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;3. Trigger a collection
Signals collects on its poll interval, but you do not have to wait. Ask it to collect immediately with signalsctlinside the container — it reuses the stack's SIGNALS_API_TOKEN, so there is no token to handle:
docker compose -f examples/docker-compose.yml exec signals \
signalsctl collect now4. Check status
Confirm the collector ran and the target is healthy. The /status endpoint returns the daemon and per-target state:
docker compose -f examples/docker-compose.yml exec signals \
signalsctl status5. Export a snapshot
Pull a portable snapshot archive to your host, then list its contents:
docker compose -f examples/docker-compose.yml exec signals \
signalsctl export --output /data/snapshot.zip
docker compose -f examples/docker-compose.yml cp \
signals:/data/snapshot.zip ./snapshot.zip
unzip -l snapshot.zipThe archive is a signals-snapshot.v1 bundle — metadata, the snapshot records, the query catalog, and the per-query runs and results. This is exactly the artifact you would hand to Elevarq Analyzer for review.
6. Tear down
When you are done, stop everything and remove the volumes so no state lingers:
docker compose -f examples/docker-compose.yml down -vSIGNALS_ENV=dev relaxes TLS (sslmode is disabled via SIGNALS_ALLOW_INSECURE_PG_TLS=true) and accepts the placeholder API token. In production (SIGNALS_ENV=prod) a weak token hard-fails startup and TLS must be verify-full. Before any real deployment, mint a strong token with openssl rand -base64 32, and store the database credential in a secret store rather than the compose file — see Authentication methods.Where next
To run Signals against a real database, follow a cloud quickstart: Amazon RDS, Azure, or Google Cloud SQL. For a from-scratch setup on your own host, see Install Signals.