3.7 KiB
Operations Runbook
Start, inspect, stop
From the repository root:
docker compose up --build -d
docker compose ps
docker compose logs --follow api web
docker compose down
The expected health endpoints are:
- API:
GET http://localhost:8000/healthz - Web:
GET http://localhost:8080/healthz
A service is ready only when Compose reports healthy; container running status alone is insufficient. The API health response includes "outreach_enabled": false as an operational safety check.
Configuration and deployment
Copy .env.example for local development. Production values must be supplied by the deployment environment, never committed. Keep AUTOMATED_OUTREACH_ENABLED=false; automated outreach is explicitly disabled in this MVP and there is no supported production enablement path in this repository.
Before deployment:
- Run
docker compose configand review the rendered configuration. - Build from a reviewed commit and scan the resulting images.
- Restrict host/network exposure at the ingress/firewall.
- Verify both health checks and review logs for unexpected errors or sensitive data.
- Record the image digest and configuration revision for rollback.
Data, backups, and retention
The canonical API runtime under apps/api uses the named Docker volume prospect-platform-api-data. Inspect it with docker volume inspect prospect-platform-api-data; do not treat a local Docker volume as a backup.
For the current MVP there is no database migration or backup command. If runtime data is material, stop writes first and snapshot/copy the volume using an approved host backup process. Protect backup files with encryption and access controls, test a restore into an isolated environment, and document the result.
Recommended starting policy for a future production data store:
- daily encrypted backups, with at least 30 days of retention;
- point-in-time recovery where supported;
- one offline or separately isolated copy;
- quarterly restore drills, plus a restore test after storage/provider changes;
- retention and deletion schedules aligned with the source/contact policy and applicable law.
Do not run docker compose down -v on a data-bearing environment: it removes the named volume.
Failure handling
- Unhealthy API: inspect
docker compose logs api, verify port binding and resource availability, then restart withdocker compose restart apiif appropriate. - Unhealthy web: inspect
docker compose logs web; confirm port8080is available and the image contains/healthz. - Build failure: run
docker compose build --no-cachefrom a reviewed checkout and check Docker daemon/network status. - Unexpected outbound traffic: stop the stack, preserve logs/metadata, and investigate. The MVP has no outreach worker and must not send automated messages.
Scaling path
Adding Postgres, Redis, workers, or schedulers requires explicit readiness checks, migrations, queue durability/idempotency, secret injection, network segmentation, metrics/alerts, backup/restore procedures, and an operational owner. Do not add them as an implicit Compose dependency: this MVP is intentionally runnable without external Postgres or Redis.
Incident checklist
- Record time, affected service, image/config revision, and observed health state.
- Preserve relevant logs without exporting secrets or unnecessary contact data.
- Stop or isolate the affected service if data loss, unauthorized access, SSRF, or unexpected outreach is suspected.
- Rotate exposed credentials through the secret manager.
- Validate recovery with health checks and a targeted smoke test.
- Document root cause, corrective action, and any retention/suppression impact.