.env.example as the source of truth for local development and .env.self-hosted.example as the source of truth for Docker Compose self-hosting. This page summarizes the variables operators most often need to understand.
Secrets such as provider API keys, auth tokens, signing keys, and encryption keys must be configured only in backend or deployment secret stores. Do not expose them through
VITE_ variables.Shared app URLs and secrets
For Compose self-hosting, use
DEPLOYMENT_MODE=self_hosted_standard and mirror it into VITE_DEPLOYMENT_MODE before rebuilding the web image.
Docker Compose self-hosting
These variables are defined in.env.self-hosted.example and used by docker-compose.self-hosted.yml. See the Docker Compose guide for bootstrap and go-live steps.
Convex CLI and backend container
The voice gateway always uses the internal Docker URL
http://convex-backend:3211 for Convex HTTP actions. Keep CONVEX_SITE_URL in .env.self-hosted as the public or browser-facing URL; pnpm self-hosted:convex:env syncs that value into the Convex deployment for webhooks and auth.
Host ports and ingress
Caddy hostnames
Caddy routing is defined in
docker/caddy/Caddyfile and baked into the Caddy image at build time.
Smoke verification overrides
Optional overrides forpnpm self-hosted:verify when using non-default ports:
After changing public URLs (
CONVEX_URL, CONVEX_SITE_URL, APP_BASE_URL, hostnames), rebuild the web image and rerun pnpm self-hosted:convex:env. See Docker Compose.Web dashboard build variables
Voice gateway
Optional OpenAI cost fallback variables exist in
.env.example for telemetry when automatic model pricing is unavailable.
Twilio
Google Calendar
Google Calendar token storage also requires
SESSION_ENCRYPTION_KEY.