Getting Started
Run the whole Snitcher stack locally with Docker Compose: bring it up, log in, and take a first tour.
The stacks live under deployments/ — deployments/dev/ (local, build from source) and
deployments/prod/ (published images, hardened).
Prerequisites
- Docker with the Compose plugin.
- The Snitcher repository cloned locally. Run all commands from the repo root.
1. Secrets
The dev stack is zero-config — every secret has a dev default baked in, so you can skip straight to step 2.
For a production deployment you generate your own secrets into a git-ignored .env inside
deployments/prod/. Compose references them with ${VAR:?} placeholders, so startup fails loudly
if a required value is unset:
cd deployments/prod
cp .env.example .env
openssl rand -base64 48 # SNITCHER_JWT_KEY (min 32 chars)
openssl rand -base64 32 # SNITCHER_SECRETS_KEY and SCOUT__KEY_ENCRYPTION_KEY
openssl rand -base64 24 # SNITCHER_DB_PASSWORD
See deployments/prod/README.md
for the PBKDF2 admin-password-hash recipe.
Changing SNITCHER_SECRETS_KEY after target secrets have been stored makes those secrets
permanently undecryptable. Set it once and keep it safe.
A plaintext Auth__Password works only in the Development environment (where the default is
admin / admin). Production requires Auth__PasswordHash.
2. Bring the stack up
docker compose -f deployments/dev/compose.yaml -p snitcher-new up -d --build
This starts the Snitcher server, TimescaleDB, Mailpit, Keycloak (bundled SSO), and the bundled first Scout
from source in the Development environment — no .env needed. For a hardened production deployment
use deployments/prod/ (cd deployments/prod && docker compose up -d) after step 1, which pulls the
published images and runs as Production.
3. Log in
| Service | URL | Notes |
|---|---|---|
| Snitcher dashboard | http://localhost:8080 | admin / admin (built-in Administrators group) |
| Mailpit (alert email sink) | http://localhost:8025 | Catches alert emails |
| Keycloak (bundled SSO) | http://localhost:8081 | Admin console: admin / admin |
4. First tour
- Add a target — go to Targets → New, choose a check type (HTTP/TCP/ICMP), set the target, interval, and timeout, then assign one or more Scouts to decide where it's checked from.
- Label targets — add freeform labels to a target to group it in the UI and scope permission groups or audit-log filters to it (see Targets).
- Set up alerting — create an Alerter (email channel) and an Alert Rule tying an alert type to it (see Alerting).
- Add users — enable SSO and manage permissions via groups (see Users & Groups).
Where data lives
The Postgres/TimescaleDB database is internal-only (no host port) and persists in the snitcher-db-data
Docker volume. Configuration is authoritative on the server — restore it and Scouts reconverge.