Start Berserk Locally
Run the full Berserk stack on your machine using Docker Compose
For production use, we recommend deploying Berserk to Kubernetes with Helm. A Kubernetes deployment gives a better UI experience with richer context on logs, traces, and metrics — such as Kubernetes pod names, namespaces, and node information automatically attached to your telemetry.
This guide runs the full Berserk stack locally using Docker Compose — useful for trying out Berserk, local development, or quick demos.
In this case Berserk emits its own logs, traces and metrics into Berserk itself, so that will be the data you can explore.
Prerequisites
- Docker with Docker Compose v2.23.1+
Host DNS gotcha
The stack relies on Docker's embedded DNS (127.0.0.11) to resolve in-network
hostnames like meta, gateway, and admin-ui. If your host has a custom
resolver in /etc/resolv.conf that intercepts unqualified lookups (Netbird,
Tailscale's MagicDNS in some configurations, corporate VPN clients), the
query service can fail to reach meta with dns error: Temporary failure in name resolution. Disable the interceptor for the duration of the local run,
or override DNS on the compose services with dns: [127.0.0.11].
Berserk is pre-release (beta) software, provided AS IS with no warranty. By downloading and using it you agree to our Terms of Use.
Installation
Start the stack
Download the docker-compose.yaml
curl -o docker-compose.yaml https://raw.githubusercontent.com/berserkdb/helm-charts/refs/heads/main/docker-compose.yaml
docker compose up -dThis starts all Berserk services: PostgreSQL, MinIO (S3-compatible storage), meta, query, ingest, janitor, nursery, the web UI (data plane + admin plane), and the gateway — the auth edge that owns OIDC, sessions, and serves as the single public entry point.
Create the first admin
Gateway prints a one-time admin-setup URL to its container stderr on first boot. Grab it:
docker compose logs gateway | grep -A2 "Initial admin setup"You'll see something like:
Initial admin setup:
Open: http://localhost:9500/setup?token=…
This link expires in 1 hour and can be used once.Open the URL in a browser, fill in the form — email, given name, family name, password (12+ characters) — and submit. You'll be redirected to /login; sign in with the credentials you just set.
The setup token is a single-use admin credential. Anyone who can run docker compose logs gateway can read it until it's consumed.
Query the data via the UI
Once you're signed in, browse to http://localhost:9500 for the data-plane UI (query editor, dashboards, library) and http://localhost:9500/admin/ for the workspace admin (datasets, ingest tokens, members, invites, and the operator-config view at /admin/config).
The Berserk services emit their own telemetry into the default table, so you'll see data flowing immediately.
Query your data via the CLI
Install the Berserk CLI and authenticate against the gateway:
curl -fsSL https://go.bzrk.dev | bash
bzrk profile add local --endpoint http://localhost:9500
bzrk profile use local
bzrk login
bzrk search "default | take 10" --since "1h ago"bzrk login prints a URL — follow the on-screen instructions to sign in. See Berserk CLI → Authenticating for the full reference.
Sending your own data
The local stack exposes OTLP endpoints for ingesting telemetry from your applications:
- gRPC:
localhost:14317 - HTTP:
localhost:14318
Configure your OpenTelemetry SDK or Collector to export to these endpoints. See Ingest Configuration for details.
Cleanup
To stop all services and remove all data:
docker compose down -v