Omgevingsvariabelen
Deze pagina vermeldt operatorgerichte variabelen voor backend, frontend en onderhoud. Interne testcanaries zijn weggelaten.
Backendserver
| Variabele | Standaard | Doel |
|---|---|---|
NODE_ENV | development | Runtime |
PORT | 3001 dev, 8080 productie | HTTP-poort |
TRUST_PROXY | niet ingesteld (0 Helm) | Exact vertrouwd proxyaantal |
CORS_ORIGIN | lokale oorsprongen | Toegestane browserorigins |
SERVE_FRONTEND | niet ingesteld | Frontend serveren met true |
DOCKER_ENV | niet ingesteld | Dockergedrag met true |
DATA_DIR | backend/data; CLI ~/.libre-webui | Permanente data |
PLATFORM_PREFLIGHT_TMP_DIR | backend/temp/preflight; gebruikerscache | Tijdelijke DB/WAL-inspectie |
PLUGIN_UPLOAD_TEMP_DIR | libre-webui-plugin-uploads in OS-temp | Uploads |
PLUGINS_DIR | $DATA_DIR/plugins | Schrijfbare plugins |
BASE_URL | http://localhost:3001 | OAuth-callbackbasis |
LOG_LEVEL | info (warn tests) | Logniveau |
LOG_FORMAT | text | json gestructureerde, geredigeerde logs |
OTEL_EXPORTER_OTLP_ENDPOINT | niet ingesteld | Opt-in OTLP; afwezig geen telemetrie |
OTEL_EXPORTER_OTLP_HEADERS | niet ingesteld | key=value-headers |
OTEL_SERVICE_NAME | libre-webui | service.name |
WEBUI_HOST | loopback; Docker 0.0.0.0 | Luisteradres |
OPEN_BROWSER | true bij frontend | false onderdrukt browser |
FULL_DOCUMENT_CONTEXT_MAX_TOKENS | 32000 | Volledige-documentlimiet |
GALLERY_RETENTION_DAYS | niet ingesteld | Oude media verwijderen |
RECOVERY_DRILL_INTERVAL_HOURS | niet ingesteld | Hersteloefening iedere N uur |
RECOVERY_DRILL_HISTORY | 60 | Geschiedenis |
Source-runs verankeren relatieve DATA_DIR, PLUGINS_DIR, PLATFORM_PREFLIGHT_TMP_DIR aan backend. DATA_DIR=./data kiest backend/data; legacy DATA_DIR=./backend/data kiest backend/backend/data. Wijzig alleen bij gestopte migratie/back-up. Zonder keuze en beide met toestand faalt opstarten, zonder raden/kopiëren/samenvoegen.
npx, globaal npm en Homebrew bewaren in ~/.libre-webui. Expliciet relatief pad wordt vanaf oproeper absoluut. Pluginstandaard blijft $DATA_DIR/plugins. Cache is ~/Library/Caches/libre-webui, %LOCALAPPDATA%\libre-webui of ${XDG_CACHE_HOME:-~/.cache}/libre-webui; Homebrew gebruikt var/libre-webui/preflight. Docker/Helm gebruiken /app/backend/data en /app/backend/temp/preflight.
Platformfundament
solo: SQLite, lokale versleutelde blobs/vectoren, lokale coördinatie, ingebouwde worker. team: PostgreSQL, private S3, PGVector, Redis, externe worker. Team faalt veilig als niet alles samen is gekozen.
| Variabele | Standaard | Doel |
|---|---|---|
LIBRE_PLATFORM_MODE | solo | solo/team |
DATABASE_BACKEND | sqlite | sqlite/postgres |
DATABASE_URL | niet ingesteld | PostgreSQL URL |
DATABASE_SSL_MODE | verify-full | disable, require, verify-full |
POSTGRES_MIGRATION_MODE | apply | apply/validate |
POSTGRES_POOL_MAX | 10 | Verbindingen per proces |
POSTGRES_CONNECT_TIMEOUT_MS | 5000 | Verbindingstimeout |
POSTGRES_IDLE_TIMEOUT_MS | 30000 | Inactief |
POSTGRES_STATEMENT_TIMEOUT_MS | 30000 | Statement |
POSTGRES_MIGRATION_LOCK_TIMEOUT_MS | 60000 | Migratielock |
BLOB_STORE_BACKEND | local | local/s3 |
VECTOR_STORE_BACKEND | embedded met SQLite | embedded/pgvector |
COORDINATION_BACKEND | local solo, redis team | Coördinatie |
REDIS_URL | niet ingesteld | redis:/rediss: |
REDIS_KEY_PREFIX | libre | Namespace |
REDIS_CONNECT_TIMEOUT_MS | 5000 | Verbinding |
JOB_WORKER_MODE | embedded solo, external team | Worker |
RESOURCE_LEASE_TTL_MS | 30000 | Lease TTL |
JOB_WORKER_CONCURRENCY | 4 | Gelijktijdige jobs |
CHAT_STREAM_EVENT_RETENTION_HOURS | 24 | Chatsegmenten |
PLATFORM_EVENT_RETENTION_DAYS | 30 | Gebeurtenissen |
PLATFORM_JOB_RETENTION_DAYS | 30 | Jobs |
LIBRE_SKIP_STARTUP_INTEGRITY_SCAN | niet ingesteld | 1 slaat volgende diepgaande scan over |
STORAGE_ENCRYPTION_KEYS | niet ingesteld | JSON-map met legacy gelijk aan ENCRYPTION_KEY |
STORAGE_ENCRYPTION_ACTIVE_KEY_ID | niet ingesteld | Nieuwe schrijfsleutel |
BLOB_QUOTA_BYTES_PER_USER | 10737418240 | Blobquota |
BLOB_QUOTA_RESERVATION_TTL_MS | 3600000 | Reservering |
S3_BUCKET | niet ingesteld | Bucket |
S3_REGION | niet ingesteld | Regio |
S3_ENDPOINT | providerstandaard | HTTP(S)-endpoint |
S3_ACCESS_KEY_ID | SDK-keten | Toegang |
S3_SECRET_ACCESS_KEY | SDK-keten | Geheim |
S3_SESSION_TOKEN | niet ingesteld | Token |
S3_FORCE_PATH_STYLE | false | true voor path-style |
S3_BLOB_PREFIX | libre/blobs | Prefix |
Zonder versiekaart gebruikt opslag ENCRYPTION_KEY als legacy; anders leest ${DATA_DIR}/.encryption_key zonder te genereren. Alles moet overeenkomen. Houd legacy tot alle objecten opnieuw zijn verpakt/gecontroleerd. Conflicten, onveilige rechten, symlinks of ontbrekende sleutels falen veilig.
Redis is coördinatie, geen canonieke opslag. Alleen Redis maakt SQLite/lokale bestanden niet replicaveilig. Team gebruikt gedeelde admission voor HTTP, WebSocket, STT/TTS/audio, import en Work-terminal. Fouten geven 503 of breken af, geen lokale fallback. Zie Platformfundament.
Team Compose/Helm stuurt selectors naar app/worker. Niet-geheim onder env; materiaal in secrets.redisUrl, secrets.databaseUrl, secrets.storageEncryptionKeys. Reserveer (replicaCount + worker.replicaCount) * POSTGRES_POOL_MAX plus marge. Houd DATABASE_SSL_MODE=verify-full remote; private Compose gebruikt disable. Team Helm vereist stabiele secrets.jwtSecret. S3 krijgt opaque keys en ciphertext.
Geïntegreerde archieven bewaren pool/timeouts, Redis, blobquota, selectors en S3 in ondertekende versleutelde configuratie.
App en worker krijgen dezelfde OLLAMA_BASE_URL, OLLAMA_TIMEOUT, OLLAMA_LONG_OPERATION_TIMEOUT, OLLAMA_MAX_CONTEXT. Waarden moeten volledige positieve decimalen zijn; 300000ms, exponent/hex, buiten bereik of lang timeout korter faalt.
Helm beperkt TRUST_PROXY tot 0–16, alleen HTTP-Pods; nooit true.
PostgreSQL-schema is exact. App/worker Recreate; drain oude Pods vóór upgrade, één nieuw proces migreert onder advisory lock. Geen mixed of zero-downtime. Rollback naar schone PostgreSQL/S3.
Actieve team-app vereist worker.replicaCount >= 1; zet app/worker nul voor pauze, app nul met worker is drain.
Private back-uphelper
Variabelen voor deploy/private/libre-webui-backup, gelezen door onderhoud:
| Variabele | Standaard | Doel |
|---|---|---|
LIBRE_WEBUI_STACK_DIR | /opt/libre-webui | Compose-directory |
LIBRE_WEBUI_BACKUP_DIR | /var/backups/libre-webui | Beveiligde back-ups |
LIBRE_WEBUI_BACKUP_RETENTION_DAYS | 14 | Bewaartijd |
LIBRE_WEBUI_CONTAINER_NAME | libre-webui | Container |
LIBRE_WEBUI_BACKUP_KEY_DIR | /etc/libre-webui/backup-keys | Sleutels |
LIBRE_WEBUI_RESTORE_IMAGE | verplicht | Onveranderlijke image |
LIBRE_WEBUI_RESTORE_CONFIG_DIR | onder /etc/libre-webui/restored | Herstelconfiguratie |
systemd leest rootbestand /etc/libre-webui/backup.env modus 0600. Custom LIBRE_WEBUI_BACKUP_DIR vereist precreated exact pad in ReadWritePaths=. Zie Private remote implementatie.
Authenticatie en beveiliging
| Variabele | Standaard | Doel |
|---|---|---|
ENABLE_SIGNUP | false | Registratie |
JWT_SECRET | gegenereerd dev | JWT |
JWT_EXPIRES_IN | 7d | Levensduur |
ENCRYPTION_KEY | automatisch | 64-hex |
DEBUG_ENCRYPTION | niet ingesteld | Debug |
TURNSTILE_SITE_KEY | niet ingesteld | Sitekey |
TURNSTILE_SECRET_KEY | niet ingesteld | Geheim |
TURNSTILE_EXPECTED_HOSTNAME | host van BASE_URL | Verwachte host |
MFA_REQUIRED_MODE | niet ingesteld (optional) | optional/required |
WEBAUTHN_RP_ID | verzoekhost | Passkey-ID |
VAPID_PUBLIC_KEY | gegenereerd/cijfer | Openbaar |
VAPID_PRIVATE_KEY | gegenereerd/cijfer | Privé |
VAPID_SUBJECT | mailto:admin@localhost | Contact |
Turnstile alleen met beide. ENABLE_SIGNUP=false laat eerste beheerder toe. Bescherm remote bootstrap.
JWT is gebonden aan server-side sessie (sid), dus intrekken werkt direct overal.
| AUDIT_RETENTION_DAYS | 180 | Auditdagen |
Algemene OIDC Single Sign-On
OpenID Connect met discovery, PKCE S256, CSRF state en nonce in geverifieerd ID-token; identiteit op sub.
| Variabele | Standaard | Doel |
|---|---|---|
OIDC_ISSUER_URL | niet ingesteld | <issuer>/.well-known/openid-configuration |
OIDC_CLIENT_ID | niet ingesteld | Client ID |
OIDC_CLIENT_SECRET | niet ingesteld | Geheim |
OIDC_DISPLAY_NAME | Single Sign-On | Label |
OIDC_SCOPES | openid profile email | Scopes |
OIDC_CALLBACK_URL | BASE_URL + route | Redirect |
OIDC_ALLOWED_EMAIL_DOMAINS | niet ingesteld | Domeinen |
OIDC_GROUP_CLAIM | groups | Groepenclaim |
OIDC_ADMIN_GROUPS | niet ingesteld | Admingroepen |
OIDC_SYNC_GROUPS | false | Synchroniseren |
Vereist issuer, ID en secret. Bestaand ongebonden lokaal e-mail wordt geweigerd; maken respecteert ENABLE_SIGNUP.
| Variabele | Standaard | Doel |
|---|---|---|
CHAT_WS_MAX_PAYLOAD_BYTES | 10 MiB | Bericht |
CHAT_WS_MAX_MESSAGES_PER_MINUTE | 120 | Per verbinding |
CHAT_WS_MAX_ACTIVE_GENERATIONS_PER_USER | 4 | Generaties |
CHAT_WS_MAX_CONNECTIONS_PER_USER | 5 | Sockets |
WEBSOCKET_TICKET_TTL_MS | 30000 | Ticket |
Browser wisselt Authorization voor kort monousoticket. Met CORS_ORIGIN of BASE_URL moet Origin overeenkomen. Originloze Electron/non-browser blijft mogelijk met ticket en TLS/firewall/proxy.
OAuth
| Variabele | Doel |
|---|---|
GITHUB_CLIENT_ID | GitHub ID |
GITHUB_CLIENT_SECRET | GitHub geheim |
GITHUB_CALLBACK_URL | Callback |
HUGGINGFACE_CLIENT_ID | Hugging Face ID |
HUGGINGFACE_CLIENT_SECRET | Geheim |
HUGGINGFACE_CALLBACK_URL | Callback |
Zonder callback wordt BASE_URL gebruikt.
Ollama
| Variabele | Standaard | Doel |
|---|---|---|
OLLAMA_BASE_URL | http://localhost:11434 | Basis |
OLLAMA_TIMEOUT | 300000 | Standaard |
OLLAMA_LONG_OPERATION_TIMEOUT | 900000 | Lang, niet korter |
OLLAMA_MAX_CONTEXT | 32768 | Max context |
Webzoeken
| SEARXNG_URL | niet ingesteld | Standaardendpoint; beheerder activeert |
Libre Claw
| LIBRE_CLAW_BASE_URL | http://127.0.0.1:8766 | Daemon |
| LIBRE_CLAW_TIMEOUT_MS | 30000 | Timeout |
Work-runtime
| Variabele | Standaard | Doel |
|---|---|---|
WORK_RUNTIME_IMAGE | node:22.22-bookworm@sha256:2d178f2785b96dfbf62a416ca2e40f50e30150b4ff3320d706f0d96e90600eb3 | Sandboximage |
WORK_DOCKER_COMMAND | docker | CLI |
WORK_COMMAND_TIMEOUT_MS | 120000 | Max 600000 |
WORK_MAX_OUTPUT_CHARS | 50000 | Uitvoer |
WORK_MAX_AGENT_ROUNDS | 48 | Ronden |
WORK_STATUS_BLURB_MODEL | 1 | 0 slaat statusmodel over |
WORK_MEMORY_LIMIT | 2g | Geheugen |
WORK_CPU_LIMIT | 2 | CPU |
WORK_PIDS_LIMIT | 256 | Processen |
WORK_PREVIEW_PORT | 4173 | Preview |
WORK_PREVIEW_BIND | 127.0.0.1 | Bind; native Docker Engine met Compose vereist een bereikbare niet-publieke bridge-interface |
WORK_DOCKER_PUBLISHED_HOST | app: gelijk aan WORK_PREVIEW_BIND; Compose: host.docker.internal | Backendhost |
WORK_COMPUTER_SCREEN_PORT | 6080 | Scherm |
WORK_COMPUTER_AUDIO_PORT | 6081 | Audio |
WORK_MAX_ACTIVE_RUNTIMES_GLOBAL | 3 | Instantie |
WORK_MAX_ACTIVE_RUNTIMES_PER_USER | 2 | Gebruiker |
WORK_MAX_TASKS_GLOBAL | 500 | Taken |
WORK_MAX_TASKS_PER_USER | 100 | Per admin |
WORK_NETWORK_NAME | libre-webui-work | Bridge |
WORK_RUN_LEASE_WAIT_MS | 60000 | Lease |
WORK_RUNTIME_DNS | niet ingesteld | Resolver-IPs |
WORK_DOCKER_SOCKET | DOCKER_HOST als unix:///tcp://, anders /var/run/docker.sock | Engine |
WORK_TERMINAL_MAX_SESSIONS_PER_TASK | 2 | Terminals |
WORK_TERMINAL_IDLE_TIMEOUT_MS | 900000 | Inactief |
WORK_RUNTIME_IDLE_TIMEOUT_MS | 0 uit | Sandboxstop |
WORK_HOST_WORKSPACES_ENABLED | false | Hostmap |
WORK_HOST_WORKSPACE_ROOTS | gebruikershome | :-wortels |
WORK_RUNTIME_BACKEND | docker | docker/kubernetes |
WORK_K8S_NAMESPACE | libre-webui-work | Namespace |
WORK_K8S_STORAGE_CLASS | clusterstandaard | StorageClass |
WORK_K8S_WORKSPACE_SIZE | 5Gi | PVC |
WORK_K8S_POD_READY_TIMEOUT_MS | 900000 | Ready |
WORK_K8S_POD_GONE_TIMEOUT_MS | 60000 | Gone |
AGENT_CLI_MODELS_ENABLED | niet ingesteld | Agents |
TOOLS_ACCESS_MODE | niet ingesteld | admins/all-users |
STT_ACCESS_MODE | niet ingesteld | STT |
TTS_ACCESS_MODE | niet ingesteld | TTS |
VOICE_MODE_ACCESS_MODE | niet ingesteld | Voice |
VOICE_CLONING_ACCESS_MODE | niet ingesteld | Klonen |
TOOLS_PRIVATE_NETWORK_ALLOWLIST | niet ingesteld | Private hosts |
AGENT_CLI_TIMEOUT_MS | 600000 | Agenttimeout |
CODEX_OAUTH_MODELS_ENABLED | true | Codex |
CODEX_HOME | ~/.codex | auth.json |
Agent CLI en Codex zijn node-local, alleen solo. Team vereist AGENT_CLI_MODELS_ENABLED=false en CODEX_OAUTH_MODELS_ENABLED=false; gebruik gedeelde Ollama/plugin.
Hostmap monteert in /workspace, Kubernetes weigert. Houd WORK_HOST_WORKSPACES_ENABLED uit en WORK_HOST_WORKSPACE_ROOTS smal; symlinks worden opgelost en .ssh, .gnupg, .aws, .config geweigerd.
Agent CLI toont claude, codex aan admins en erft serverreferenties — gelijk aan shelltoegang.
Netwerktaken gebruiken WORK_NETWORK_NAME zonder inter-containercommunicatie. WORK_RUNTIME_DNS kan filteren maar geen directe IPs; firewall nodig. Kubernetes gebruikt work.networkPolicy.blockedEgressCidrs.
Terminal/diagnostiek gebruikt WORK_DOCKER_SOCKET, dan DOCKER_HOST (unix:// of tcp://, zie docker-compose.socket-proxy.yml), dan /var/run/docker.sock. ssh:// of tcp:// met DOCKER_TLS_VERIFY maakt terminal onbeschikbaar, overige Work via CLI. Kubernetes Pod exec.
Previewpoort is intern en dynamisch op loopback. Pin image. WORK_MAX_AGENT_ROUNDS geldt voor Ollama/plugins; budget max(128, WORK_MAX_AGENT_ROUNDS × 8). Uitputting vraagt finale overdracht en eindigt needs_input; nieuwe run gaat verder. Persistente uitvoer circa 20.000 tekens.
Compose-variabelen:
| DOCKER_GID | 0 | Socketgroep |
| DOCKER_SOCKET | /var/run/docker.sock | Socketpad |
DOCKER_GID is groep gezien in container. Team gebruikt docker-compose.team.work.yml met gefilterde proxy, geen mount. Containercreatie blijft hostcontrole; dedicated/rootless sterker. Helm gebruikt work.enabled=true.
solo nul/één replica; team meerdere met gedeelde state. Work-Pods apart; worker krijgt image, StorageClass, work.env.
Compose: WEBUI_BIND_ADDRESS standaard 127.0.0.1, WEBUI_PORT 8080.
Providermodelontdekking
| PLUGIN_MODEL_DISCOVERY_TTL_MS | 21600000 (6 h) | Leeftijd |
| PLUGIN_MODEL_DISCOVERY_RETRY_MS | 600000 (10 min) | Interval |
| PLUGIN_MODEL_DISCOVERY_REFRESH_DEADLINE_MS | 3000 | Deadline |
Expliciete Modellen vernieuwen negeert interval.
Providersleutels
| Variabele | Provider |
|---|---|
OPENAI_API_KEY | OpenAI/OpenAI TTS |
ANTHROPIC_API_KEY | Anthropic |
GROQ_API_KEY | Groq |
GEMINI_API_KEY | Google Gemini |
MISTRAL_API_KEY | Mistral |
OPENROUTER_API_KEY | OpenRouter |
KIMI_API_KEY | Kimi Code |
GITHUB_API_KEY | GitHub Models |
HUGGINGFACE_API_KEY | Hugging Face |
ELEVENLABS_API_KEY | ElevenLabs |
COMFYUI_API_KEY | ComfyUI |
Omgevingssleutels alleen bij ingebouwd vertrouwd manifest; customroute vereist gebruikerssleutel. Opgeslagen sleutels zijn aan definitie/route gebonden.
Relatief PLUGINS_DIR resolveert vanaf backend bij source, vanaf oproeper in pakket. Libre leest voor compatibiliteit ook backend/plugins. Verplaats legacy naar $DATA_DIR/plugins; symlinks niet gevolgd.
Frontend
| Variabele | Standaard | Doel |
|---|---|---|
VITE_API_BASE_URL | same-origin dev-proxy of productie-API | API |
VITE_WS_BASE_URL | afgeleid | ws:/wss: |
VITE_APP_VERSION | pakket | Versie |
VITE_DEMO_MODE | false | Mocks |
VITE_API_TIMEOUT | 300000 | Timeout |
VITE_BACKEND_URL | http://localhost:3001 | Auth |
VITE_DEBUG_VERBOSE | niet ingesteld | Debug |
VITE_LOG_LEVEL | niet ingesteld | Log |
ELECTRON_BUILD | niet ingesteld | Electron |
VITE_WS_BASE_URL moet absoluut ws:/wss: zijn zonder credentials/query/fragment. Electron file: gebruikt ws://localhost:3001 bij afwezigheid; browserclients leiden hun basis af van VITE_API_BASE_URL, en anders van de browserorigin. Vite proxyt de ontwikkelorigin naar de backend op poort 3001.
Onderhoud
| CHANGELOG_AI | 0 schakelt AI uit |
| CHANGELOG_AI_MODEL | Ollama-model |
| CHANGELOG_AI_TIMEOUT_MS | Timeout |
CHANGELOG_AI_MODEL=glm-5.2:cloud npm run changelog
CHANGELOG_AI=0 npm run release:minor
Productievoorbeeld
NODE_ENV=production
PORT=3001
SERVE_FRONTEND=true
DATA_DIR=/data/libre-webui
CORS_ORIGIN=https://librewebui.example
BASE_URL=https://librewebui.example
JWT_SECRET=replace-with-a-long-random-secret
ENCRYPTION_KEY=replace-with-64-hex-characters
ENABLE_SIGNUP=false
OLLAMA_BASE_URL=http://ollama:11434
OLLAMA_TIMEOUT=300000
OLLAMA_LONG_OPERATION_TIMEOUT=900000
OLLAMA_MAX_CONTEXT=32768
TURNSTILE_SITE_KEY=...
TURNSTILE_SECRET_KEY=...
TURNSTILE_EXPECTED_HOSTNAME=librewebui.example