Deploy with Docker
The Busbar image is a FROM scratch container — the static binary and the provider catalog, nothing else (a few MB). It’s the fastest way to run Busbar on a single host.
1. Pull and verify
Section titled “1. Pull and verify”docker pull getbusbar/busbar:1.4.1Verify the image’s build provenance before you trust it (the attestation binds the image digest to the release workflow):
gh attestation verify oci://index.docker.io/getbusbar/busbar:1.4.1 --repo GetBusbar/busbarThe GHCR mirror (ghcr.io/getbusbar/busbar) additionally carries a cosign signature.
2. Run on a single host
Section titled “2. Run on a single host”The provider catalog ships inside the image at /etc/busbar/providers.yaml, so you only mount your config.yaml. Provider keys come from the environment:
docker run -d --name busbar \ -p 8080:8080 \ -e ANTHROPIC_KEY \ -v "$PWD/config.yaml:/etc/busbar/config.yaml:ro" \ getbusbar/busbar:1.4.1
curl -s http://localhost:8080/healthz && echo okPin an exact tag (getbusbar/busbar:1.4.1) in production rather than riding latest.
3. Docker Compose
Section titled “3. Docker Compose”Grab the reference file — curl -O https://getbusbar.com/compose.yaml — or copy it:
services: busbar: image: getbusbar/busbar:1.4.1 ports: - "8080:8080" environment: # Read from the host env or a .env file — never inline keys here. ANTHROPIC_KEY: ${ANTHROPIC_KEY} BUSBAR_CLIENT_TOKEN: ${BUSBAR_CLIENT_TOKEN} volumes: - ./config.yaml:/etc/busbar/config.yaml:ro # Governance only: a writable volume for the SQLite store. - busbar-data:/var/lib/busbar healthcheck: test: ["CMD", "/usr/local/bin/busbar", "--validate"] interval: 30s timeout: 5s retries: 3 restart: unless-stopped
volumes: busbar-data:docker compose up -d- Admin plane. The admin API runs on its own listener (
:8081), loopback by default, so it is not published by the-p 8080:8080above. To manage it, publish:8081only behind mTLS (admin_tls) — a network-exposed admin bind refuses to boot without it. See the Admin API. - Governance. If you enable governance, mount a writable volume (
busbar-dataabove) and setdb_path: /var/lib/busbar/governance.db. Without governance, Busbar is stateless and needs no volume. - Custom catalog. To add providers beyond the shipped catalog, mount your own
providers.yamlover/etc/busbar/providers.yaml. - Scaling / HA. Busbar is stateless — run several containers (Compose
deploy.replicas, or multiple hosts) behind a proxy that health-checks/healthz. Governance budgets/rate limits are per-instance, so run a single instance for strict global enforcement. See Running multiple instances (HA).