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.
Prefer to watch?
Section titled “Prefer to watch?”Watch Getting Started with the Brutor Free Trial walks through everything on this page: downloading the trial, running the setup script and its questions, and logging into the Admin Console and the User Portal.
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. The download unpacks to a
brutor-ai-trialfolder.Terminal window cd brutor-ai-trial -
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.shTerminal window .\docker-start.ps1The script checks Docker and your license key, mints any missing secrets into
.env, and then asks a few questions. Each one switches an optional part of the trial on or off. The default (just press Enter) is always the lightweight choice, and everything you need to follow this documentation works with the defaults. You can re-run the script later and answer differently.- Install Ollama and run a LOCAL embeddings model?
- Default N: embeddings use OpenAI
text-embedding-3-smallonce you set an OpenAI key (Admin Console → AI Models →text-embedding-3-small→ Edit → API Key). Until then only the knowledge base and the semantic cache wait; chat, MCP and all governance work. - Answer y for a fully self-hosted stack with no external key. It downloads a ~4 GB Ollama image and a ~274 MB model on first run (10+ minutes on slow broadband) and needs ~4 GB of free RAM.
- Default N: embeddings use OpenAI
- Enable enterprise KMS / BYOK demo?
- Default N: the
ENCRYPTION_KEYin.envis the master key, with no extra containers. - Answer y to see envelope encryption with a key that never leaves a KMS. It starts LocalStack (an AWS KMS emulator) and a HashiCorp Vault dev server, then asks Which KMS backend? [A/v]: A for AWS KMS (the default) or V for Vault Transit.
- Default N: the
- Enable Microsoft Presidio?
- Default N: the built-in regex PII detector (cards, SSNs, IBANs, API keys and more) still runs.
- Answer y for machine-learning PII detection (people, places, organisations) on
top of the regex set. It adds ~500 MB RAM. After boot, add a Presidio provider in
the Admin Console with endpoint
http://presidio-analyzer:3000.
- Enable the Anthropic Enterprise mock?
- Default N.
- Answer y to try Traffic Data Import without a real Claude Enterprise contract. The mock simulates Claude usage and grows it every few minutes.
- Enable the MCP Registry?
- Default N: the gateway proxies MCP servers without it.
- Answer y for the standalone MCP Registry on port 5001, to publish and discover MCP servers.
When every service reports ready, the script prints the access points: Admin Console
http://localhost:3002, User Portalhttp://localhost:3001, Corehttp://localhost:8100and Control Planehttp://localhost:5050. - Install Ollama and run a LOCAL embeddings model?
-
Verify the gateway is healthy.
Terminal window curl http://localhost:8100/health{"status": "healthy","service": "brutor-gateway-core","components": {"database": "up","redis": "up"},"stats": {"background_writes": {"scheduled": 0, "completed": 0, "failed": 0, "dropped": 0,"audit_spooled": 0, "audit_lost": 0, "usage_spooled": 0, "usage_dead_lettered": 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

