Prerequisites
- Docker 24+ and Docker Compose v2
- Ports 3000, 5433, 6380, and 8081 free on your machine
Step 1 — Clone and configure
.env and set two required values:
Step 2 — Start the stack
| Service | Port | Role |
|---|---|---|
postgres | 5433 (host) | Audit database |
redis | 6380 (host) | Replay protection store |
server | 3000 | Governance runtime |
dashboard | 8081 | Audit dashboard |
The server waits for Postgres to be healthy before starting. On first run, allow 15–20 seconds for all services to be ready.
Step 3 — Verify the runtime is up
audit_db is false, Postgres has not connected yet. Wait a few seconds and retry.
If verification is not "ok", the signing key is not configured. Check PARMANA_SIGNING_PROVIDER and the corresponding key variables in .env.
Step 4 — Perform your first authority verification
Step 5 — Verify the attestation
Pass the completeattestation object from the previous response to /verify:
Step 6 — Open the dashboard
Navigate to http://localhost:8081. You should see the decision you just executed in the Decisions view.Stop the stack
Troubleshooting
curl returns connection refused on port 3000
The server container may still be starting. Check logs:
Server listening on http://0.0.0.0:3000. If you see [SYS-REPLAY-001] REDIS_URL is required, Redis did not connect:
"audit_db": false
Postgres health check is still in progress. Wait 10 seconds and retry. If it persists:
POSTGRES_PASSWORD in .env matches the value in the compose file.
POST /execute returns 401
The Authorization: Bearer header must match the PARMANA_API_KEY value in .env. The header is required on all routes when PARMANA_API_KEY is set.
POST /execute returns 422 with “Policy not found”
The policy bundle claims-approval/1.0.0 must exist in the policies/ directory at the repository root. Verify:
POST /execute returns 503
The signer or replay store is not configured. Check GET /health:
verification !== "ok"— signing key is not loaded. CheckPARMANA_SIGNING_PROVIDERand key path/value in.env.audit_db: false— Postgres not connected. Non-fatal for execution, but check Postgres logs.