Skip to main content

Local setup

Prerequisites

  • Docker Desktop
  • At least one provider API key: OpenAI, Azure OpenAI, or Anthropic

1. Configure environment

cp .env.example .env

Fill AUTH_SECRET, ZEALLM_ENCRYPTION_KEY (64 hex characters), admin emails and POSTGRES_PASSWORD. Generate secrets in PowerShell:

[Convert]::ToBase64String((1..32 | ForEach-Object { Get-Random -Max 256 })) # AUTH_SECRET
-join ((1..64) | ForEach-Object { '{0:x}' -f (Get-Random -Max 16) }) # ZEALLM_ENCRYPTION_KEY

Critical: never rotate ZEALLM_ENCRYPTION_KEY after provider credentials are stored unless you follow the rotation runbook.

The full variable list is in Environment variables.

2. Start the stack

docker compose up -d --build
ServiceURL
Portalhttp://localhost:3000
Gatewayhttp://localhost:8080 (GET /health)
Docshttp://localhost:3002
Postgreshost port 55432 (local override only)

Postgres is published on 55432 via docker-compose.override.yml, which Compose loads automatically for local docker compose up. Production must deploy with docker compose -f docker-compose.yml so that override is skipped.

Sign in

  1. Open http://localhost:3000
  2. With AUTH_DEV_BYPASS=true, enter a bootstrap admin email (listed in ZEALLM_ADMIN_EMAILS) — no password is required
  3. The first admin sign-in bootstraps an OpenAI credential if OPENAI_API_KEY is set

The platform is invite-only. Sign-in is rejected unless the email is a bootstrap admin or was invited under Users. All emails must match ZEALLM_ALLOWED_DOMAIN.