Local development setup
What this page is
How to bring up AuroraSOC on a single developer host: the
compose stack, the Granite model via Ollama, the FastAPI
backend, and the operator console at localhost:3000.
Why it exists this way
The build prompt's quality bar reads: a new backend engineer can read the developer docs and contribute a meaningful change within two weeks. That target is unreachable without a working local stack on day one. This page is the bring-up contract.
How it works
Prerequisites (verified with the existing CI image):
- Docker 24+ with Compose v2.
- Python 3.13 with uv installed.
- Node 20 LTS with pnpm.
- Rust toolchain via rustup (the workspace pins 1.86.0 plus the nightly date in crates/edr-linux-ebpf/rust-toolchain.toml).
- Linux kernel 5.10+ if you want the EDR sensor to attach (other components run fine on any kernel; the eBPF runtime alone has a kernel floor).
Bring-up sequence:
git clone git@github.com:ahmeddwalid/AuroraSOC.git
cd AuroraSOC
cp .env.example .env
# Edit .env: set the database passwords, the JWT secret, and the
# Redis password. The defaults are deliberately rejected by the
# settings validator so you cannot accidentally ship them.
docker compose -f infra/compose/docker-compose.yml up -d \
postgres redis nats ollama
# Pull the Granite 4 model into Ollama.
docker compose exec ollama ollama pull granite4-soc-default
cd packages/backend
uv sync
uv run alembic upgrade head
uv run python -m aurorasoc.main
The operator console:
cd apps/operator-console
pnpm install
pnpm dev
Open http://localhost:3000. The default local auth
provider creates an admin operator on first run; the password
is logged once to the backend stdout.
Verifying the agent path end to end:
# Open a second backend shell.
uv run pytest tests/backend/test_agent_fleet_smoke.py -v
The smoke test brings up the workflow runner, queues one investigation, and asserts the agent returns a non-empty result. If it passes the local stack is healthy.
What goes wrong
docker compose upfails on thepostgreshealthcheck. Most often the Postgres data volume from a previous run has a different password. Delete the volume (you will lose local data) or setPOSTGRES_PASSWORDin.envto match.Ollamapull fails with disk-space errors. The Granite 4 variants are 4–7 GB each; budget 30 GB free for the full fleet plus the small-tier defaults.- The eBPF sub-build during
cargo check -p edr-linuxfails with a missingrust-src. Runrustup component add rust-src --toolchain nightly-2026-04-18; seecrates/edr-linux/build.rsfor the toolchain it pins. - The operator console fails to log in with "no auth providers
configured". The backend is not running or did not finish
initialising. The login page only lists providers after the
/api/v1/auth/providersendpoint succeeds.