Quickstart
This guide gets the complete platform — core proxy, control plane, Admin Console, User Portal, PostgreSQL, Redis, Qdrant and MinIO — running on your machine in about ten minutes, most of which is image pulls.
Prerequisites
Section titled “Prerequisites”- Docker with the Compose plugin (
docker compose versionworks). Allow at least 4 CPUs / 8 GB RAM in Docker Desktop. - The Brutor trial bundle — download it from brutor.ai. The bundle ships with a
.envthat is pre-populated with your license key (BRUTOR_LICENSE_KEY) and a unique set of secrets minted for your download. The core proxy refuses to start without a valid license key. - An OpenAI API key (recommended) — the trial seeds OpenAI models as enabled, so pasting a key into the Admin Console is the fastest way to a working chat. Alternatively the bundle can run a local embedding model via Ollama.
Start the stack
Section titled “Start the stack”-
Unpack the bundle and enter it.
Terminal window cd trial_bundle -
Check the
.env. The download already contains a working configuration — license key, uniqueJWT_SECRET,ENCRYPTION_KEYand admin passwords. You don’t need to change anything for a local trial, but it’s worth knowing where these live. See the configuration reference for every variable. -
Start everything.
Terminal window ./docker-start.shThe script checks Docker and your license key, then asks one question: whether to run a local embedding model (Ollama +
nomic-embed-text, a ~4 GB image) or use OpenAI embeddings (the default — just needs your OpenAI key later). Pick OpenAI unless you specifically want a fully offline stack.Non-interactive alternative:
Terminal window docker compose up -dTerminal window .\docker-start.ps1or non-interactively:
Terminal window docker compose up -d -
Verify the gateway is healthy.
Terminal window curl http://localhost:8100/health{"status": "healthy","service": "brutor-gateway-core","components": {"database": "up","redis": "up"},"stats": {"active_mcp_sessions": 0,"background_writes": { "scheduled": 0, "completed": 0, "failed": 0, "dropped": 0 }}}"status": "healthy"means the proxy is up and can reach the shared database. The control plane runs its Alembic migrations and seeds the default tenant on first boot, so allow a minute or two afterdocker compose upbefore everything reports healthy. -
Log into the Admin Console at http://localhost:3002 with the seeded tenant admin:
- Username:
admin - Password:
Admin123! - Tenant:
default
Then paste your OpenAI API key into the seeded OpenAI models under AI Models so the enabled models can actually reach the provider.
- Username:
-
Log into the User Portal at http://localhost:3001 with the seeded end user:
- Username:
trial - Password:
Trial123!
- Username:
Success moment: open the portal, pick a model and send a chat message — you get a streamed answer, and the request appears in the Admin Console under Mission Control with its cost and latency. Everything you just sent went through guardrails, budget checks and the usage ledger.
Stopping and cleaning up
Section titled “Stopping and cleaning up”docker compose down # stop, keep data volumes./docker-cleanup.sh # full teardown including volumes