Use this guide to run the full stack in Docker, validate core health, execute one end-to-end flow, and run the Locust load test.
- Docker Engine/Desktop with Compose plugin
makecurlpython3(used by the E2E helper script)
cp .env.example .env
make up-allOptional quick container check:
docker compose -f docker-compose.infra.yml -f docker-compose.observability.yml -f docker-compose.yml psmake seed-docker
make start-pipeline-dockerThis performs:
- schema migrations for all services
- seed commands for all services
- Kafka topic creation
- background consumers + scheduled snapshot writer + simulation startup
Health checks:
curl http://localhost:8001/health # PulseFeed
curl http://localhost:8002/health # BetCore
curl http://localhost:8003/health # PromoGuard
curl http://localhost:8004/health # RankForge
curl http://localhost:8005/health # OpsArenaDashboard URLs:
- Grafana: http://localhost:3000 (
admin/admin) - Prometheus: http://localhost:9090
- Kafka UI: http://localhost:8080
- Loki: http://localhost:3100
- Tempo: http://localhost:3200
Run the reusable script from repository root. It:
- discovers a fixture/market/odds from PulseFeed,
- places a valid idempotent bet in BetCore,
- waits for settlement,
- verifies RankForge, PromoGuard, and OpsArena read paths.
make e2e-flow-dockerEquivalent direct invocation:
python3 tools/scripts/run_e2e_api_flow.pyStrict mode (fail if settlement is not observed within timeout):
python3 tools/scripts/run_e2e_api_flow.py --require-settlement --settlement-retries 120make loadtest-headlessFor interactive mode/UI:
make loadtestThen open http://localhost:8089.
make chaos-docker
make game-day-docker
make phase-gate-docker
make live-drill-dockermake down-allFor full volume reset:
docker compose -f docker-compose.infra.yml -f docker-compose.observability.yml -f docker-compose.yml down -v