Install
Docker

Docker Compose

Run Relic, PostgreSQL and SeaweedFS on one machine for development and evaluation.

deploy/docker-compose.yml runs the server, the worker, PostgreSQL and a small SeaweedFS cluster, for development and evaluation only. Its credentials are public: do not expose it.

Start

From a checkout of the repository, build and start the stack (the first build takes a few minutes):

docker compose -f deploy/docker-compose.yml up --build

Copy the certificate authority the server generates (TLS) out of the relic-tls volume:

docker compose -f deploy/docker-compose.yml cp relic-server:/etc/relic/tls/ca.crt .

Trust ca.crt, open https://localhost:8090 and sign in as admin with the password password.

Sign in with the relic CLI:

echo password | relic auth login https://localhost:8090 --user admin --password-stdin --context relic-dev --ca-file ca.crt

Check the sign-in:

relic auth status

Services

ServiceNotes
relic-serverThe server, HTTPS on 127.0.0.1:8090. Its certificate also holds the name relic-server.
relic-workerThe worker. Grype's database is in the vulnerability-database volume.
postgresqlPostgreSQL 18, on 127.0.0.1:5432.
seaweedfs-master, seaweedfs-volume-1, seaweedfs-volume-2, seaweedfs-filerSeaweedFS, replication 001 (one extra copy).
seaweedfs-s3The S3 gateway, on 127.0.0.1:8333. Identities are in deploy/seaweedfs/s3.json.
seaweedfs-create-bucketsRuns once: creates the artifacts and temporary buckets, with a one-day TTL on temporary.

All ports bind to 127.0.0.1. See Compose settings and Another object store.

Single node

deploy/docker-compose.single-node.yml runs one container on SQLite and a volume, without PostgreSQL or SeaweedFS:

docker compose -f deploy/docker-compose.yml -f deploy/docker-compose.single-node.yml up --build relic-server

Stop and reset

Stop the stack and keep the data volumes:

docker compose -f deploy/docker-compose.yml down

Stop the stack and delete all data:

docker compose -f deploy/docker-compose.yml down -v