Miljövariabler
Den här sidan listar de operatörsinriktade miljövariabler som läses av aktuell Libre WebUI-backend, frontend och underhållsskript. Interna kanarievärden endast för test utelämnas avsiktligt.
Backendserver
| Variabel | Standard | Syfte |
|---|---|---|
NODE_ENV | development | Runtime-läge |
PORT | 3001 i utveckling, 8080 i produktion | Backendens HTTP-port |
TRUST_PROXY | inte angiven (0 i Helm) | Exakt antal betrodda reverse proxy-hopp för klientadressen |
CORS_ORIGIN | lokala utvecklingsorigin | Kommaseparerade tillåtna webbläsarorigin |
SERVE_FRONTEND | inte angiven | Servera byggd frontend från backend när true |
DOCKER_ENV | inte angiven | Aktivera Docker-inriktat beteende när true |
DATA_DIR | backend/data; ~/.libre-webui i paketerad CLI | Beständig datakatalog |
PLATFORM_PREFLIGHT_TMP_DIR | backend/temp/preflight; användarcache i paketerad CLI | Arbetsutrymme för privat DB-/WAL-inspektionskopia; dimensionera för databas plus WAL |
PLUGIN_UPLOAD_TEMP_DIR | libre-webui-plugin-uploads i operativsystemets temp | Arbetsutrymme för pågående pluginuppladdningar |
PLUGINS_DIR | $DATA_DIR/plugins | Skrivbar katalog för installerade/anpassade plugin |
BASE_URL | http://localhost:3001 | Bas-URL för OAuth-callbackstandard |
LOG_LEVEL | info (warn i test) | Backendens loggnivå |
LOG_FORMAT | text | json ger strukturerade enradsloggar med tid, korrelations-ID och maskering |
OTEL_EXPORTER_OTLP_ENDPOINT | inte angiven | Valfri OTLP/HTTP JSON-telemetriexport; utan värde lämnar ingen telemetri processen |
OTEL_EXPORTER_OTLP_HEADERS | inte angiven | Kommaseparerade key=value-huvuden till OTLP-insamlaren |
OTEL_SERVICE_NAME | libre-webui | Resursattributet service.name på exporterad telemetri |
WEBUI_HOST | loopback; 0.0.0.0 i Docker | HTTP-lyssningsadress |
OPEN_BROWSER | true när frontend serveras | Ange false för att hindra automatisk webbläsarstart |
FULL_DOCUMENT_CONTEXT_MAX_TOKENS | 32000 | Tokenskydd för fulldokumentkontext per chatt (1000-2000000) |
GALLERY_RETENTION_DAYS | inte angiven (behåll för alltid) | Ta bort galleriemedia äldre än detta antal dagar genom schemaläggarens svep |
RECOVERY_DRILL_INTERVAL_HOURS | inte angiven (övningar av) | Kör verifierad återställningsövning automatiskt var N:e timme (solo) |
RECOVERY_DRILL_HISTORY | 60 | Behållna historikposter för återställningsövningar |
Källkörningar förankrar relativa DATA_DIR, PLUGINS_DIR och PLATFORM_PREFLIGHT_TMP_DIR i backendkatalogen oberoende av skalets arbetskatalog. Utan DATA_DIR eller med DATA_DIR=./data använder rot- och backendkommandon därför backend/data. För kompatibilitet fortsätter DATA_DIR=./backend/data välja backend/backend/data; ändra endast under en avsiktlig, stoppad säkerhetskopiering och migrering. En oangiven källprofil använder också backend/backend/data när det är det enda beständiga lagret. Om båda platserna innehåller tillstånd och ingen sökväg valts avvisas starten säkert i stället för att gissa, kopiera eller sammanfoga.
Startprogrammen npx, global npm och interaktiv Homebrew bevarar data under ~/.libre-webui. En uttrycklig relativ DATA_DIR löses från anroparens arbetskatalog och görs absolut före backendstart. Relativ PLUGINS_DIR följer samma regel; utan värde finns skrivbara plugin under $DATA_DIR/plugins. Inspektionsutrymmet är en skrivbar cache utanför datakatalogen: ~/Library/Caches/libre-webui på macOS, %LOCALAPPDATA%\libre-webui på Windows eller ${XDG_CACHE_HOME:-~/.cache}/libre-webui på andra system. Homebrew-tjänsten fäster samma hemkatalog och använder var/libre-webui/preflight. Ange PLATFORM_PREFLIGHT_TMP_DIR när cachen inte rymmer databas och WAL. Docker- och Helm-driftsättningar använder absoluta /app/backend/data och /app/backend/temp/preflight med separata monteringar.
Plattformsgrund
Standardprofilen solo använder SQLite, lokala krypterade blobbar, krypterade inbäddade vektorer, lokal samordning och en inbäddad beständig worker. team använder PostgreSQL, privata S3-kompatibla blobbar, PGVector, Redis och extern worker. Teamkonfiguration avvisas säkert om inte alla delade beroenden väljs tillsammans.
| Variabel | Standard | Syfte |
|---|---|---|
LIBRE_PLATFORM_MODE | solo | Välj sammanhängande solo- eller team-profil |
DATABASE_BACKEND | sqlite | Välj sqlite eller postgres |
DATABASE_URL | inte angiven | PostgreSQL-anslutnings-URL, krävs med postgres |
DATABASE_SSL_MODE | verify-full | PostgreSQL TLS-policy: disable, require eller värdnamnsverifierande verify-full |
POSTGRES_MIGRATION_MODE | apply | Kör kompatibla migreringar under ledarlåset eller validate för skrivskyddad schemakontroll |
POSTGRES_POOL_MAX | 10 | Högsta PostgreSQL-anslutningar per program- eller workerprocess (1-100) |
POSTGRES_CONNECT_TIMEOUT_MS | 5000 | Tidsgräns för PostgreSQL-anslutning (1-60000 ms) |
POSTGRES_IDLE_TIMEOUT_MS | 30000 | Tidsgräns för inaktiv PostgreSQL-anslutning (1-600000 ms) |
POSTGRES_STATEMENT_TIMEOUT_MS | 30000 | Tidsgräns för PostgreSQL-sats (1-600000 ms) |
POSTGRES_MIGRATION_LOCK_TIMEOUT_MS | 60000 | Väntetid för migreringsledarlås (1-600000 ms) |
BLOB_STORE_BACKEND | local | Välj krypterad local lagring eller privat s3 |
VECTOR_STORE_BACKEND | embedded med SQLite | Välj krypterade embedded-vektorer eller pgvector |
COORDINATION_BACKEND | local i solo; redis i team | Välj processlokal eller Redis-samordning |
REDIS_URL | inte angiven | redis:- eller rediss:-URL, krävs med Redis-samordning |
REDIS_KEY_PREFIX | libre | Namespace med 1-64 tecken för Libres samordningsnycklar |
REDIS_CONNECT_TIMEOUT_MS | 5000 | Inledande anslutningstidsgräns för Redis, högst 60 sekunder |
JOB_WORKER_MODE | embedded i solo; external i team | Kör hanterare i programmet eller fristående delad worker |
RESOURCE_LEASE_TTL_MS | 30000 | Samordningslease-TTL för beständiga jobbresurser (5000-300000) |
JOB_WORKER_CONCURRENCY | 4 | Beständiga jobb en worker kan köra samtidigt (1-32) |
CHAT_STREAM_EVENT_RETENTION_HOURS | 24 | Timmar som chattströmshändelser behålls före timrensningen |
PLATFORM_EVENT_RETENTION_DAYS | 30 | Dagar en beständig händelse behålls före timrensningen |
PLATFORM_JOB_RETENTION_DAYS | 30 | Dagar avslutade icke-livscykeljobb behålls |
LIBRE_SKIP_STARTUP_INTEGRITY_SCAN | inte angiven | 1 hoppar över djup äldre chiffertextsökning vid nästa start |
STORAGE_ENCRYPTION_KEYS | inte angiven | Hemlig JSON-nyckelkarta; måste innehålla legacy som matchar ENCRYPTION_KEY |
STORAGE_ENCRYPTION_ACTIVE_KEY_ID | inte angiven | Nyckel-ID för nya lokala blobbar och inbäddade vektorer |
BLOB_QUOTA_BYTES_PER_USER | 10737418240 | Beständigt största klartextblobbyte per ägare |
BLOB_QUOTA_RESERVATION_TTL_MS | 3600000 | Livslängd för övergiven strömmande kvotreservation (minst 60000 ms) |
S3_BUCKET | inte angiven | Privat S3-kompatibel bucket, krävs med s3 |
S3_REGION | inte angiven | S3-region, krävs med s3 |
S3_ENDPOINT | leverantörsstandard | Valfri absolut HTTP(S)-endpoint för MinIO eller kompatibel tjänst |
S3_ACCESS_KEY_ID | SDK-autentiseringskedja | Valfri uttrycklig S3-åtkomstnyckel |
S3_SECRET_ACCESS_KEY | SDK-autentiseringskedja | Krävs när uttrycklig åtkomstnyckel anges |
S3_SESSION_TOKEN | inte angiven | Valfri token med uttryckliga S3-uppgifter |
S3_FORCE_PATH_STYLE | false | Ange true för tjänster som kräver sökvägsbaserad adressering |
S3_BLOB_PREFIX | libre/blobs | Ogenomskinligt bucketnyckelprefix som ägs av Libre |
Utan en versionshanterad lagringsnyckelkarta använder lagringsadaptrar befintlig ENCRYPTION_KEY som ID legacy; om även den saknas läser de ${DATA_DIR}/.encryption_key utan att skapa eller ändra. Uttrycklig konfiguration och beständig fil måste överensstämma. Om kartan införs medan en äldre nyckel finns behålls den under exakt ID legacy tills alla objekt och vektorer har skrivits eller slagits in på nytt och verifierats. Konflikter, osäkra filbehörigheter, symlänkar och saknade nycklar avvisas säkert.
Redis är samordning, inte kanonisk beständighet. Enbart Redis gör inte SQLite, lokala filer eller processägt tillstånd säkert över repliker. I teamläge använder HTTP-gränser, chatt-/WebSocket-anslutningar, STT/TTS/ljudarbete, arkivimporter och Work-terminaler Redis-baserat gemensamt tillträde. Kapaciteter gäller över alla repliker. Fel returnerar 503 eller avbryter pågående operation; Libre återgår aldrig till oberoende lokal räknare.
Se Plattformsgrund.
Medföljande team-Compose och Helm vidarebefordrar alla väljare och justeringsvärden till program och extern worker. I Helm finns icke-hemliga väljare under env; använd secrets.redisUrl, secrets.databaseUrl och secrets.storageEncryptionKeys för anslutningar och nycklar. PostgreSQL-poolgränser är per process: budgetera minst (replicaCount + worker.replicaCount) * POSTGRES_POOL_MAX anslutningar plus marginal. Behåll DATABASE_SSL_MODE=verify-full för hanterad/fjärr-PostgreSQL. Endast medföljande Compose väljer disable eftersom lyssnaren är isolerad. Team-Helm kräver stabil secrets.jwtSecret delad av alla poddar; annars skulle processlokalt signeringsmaterial skapas. S3 tar emot ogenomskinliga nycklar och chiffertext; bucket- och leverantörs-URL:er lagras inte i metadata.
Integrerade solo- och teamarkiv bevarar PostgreSQL-pooler och tidsgränser, Redis-tidsgräns, båda blobkvoter, plattformsväljare och S3-adressering i signerad och krypterad skyddad konfiguration. En ren återställning kan därför publicera driftvärden utan klartext i arkivmetadata.
Team-Compose- och Helm-par får samma lösta OLLAMA_BASE_URL, OLLAMA_TIMEOUT, OLLAMA_LONG_OPERATION_TIMEOUT och OLLAMA_MAX_CONTEXT. Leverantörsanrop för inbäddningar, beständiga chattar och Work körs i workern, så värdena får inte avvika. Serveringångarna tolkar numeriska värden som fullständiga positiva bas-10-heltal före tillstånd. Delvärden som 300000ms, exponent/hex, värden utanför intervall och lång tidsgräns under standarden stoppar starten.
Helm begränsar TRUST_PROXY till exakt heltal 0–16 och skickar det endast till HTTP-poddar. Behåll 0 för direkt trafik. Ange exakt fast antal för ingress-/lastbalanserarkedjan; använd aldrig obegränsat true. Fel antal grupperar klienter under proxyadressen eller litar på en klientangiven adress.
PostgreSQL-schemakompatibilitet kräver exakt version. Helm-program och worker använder Recreate; dränera och avsluta alla gamla poddar före teamuppgradering och låt en ny process migrera under rådgivande ledarlås. Kör inte blandade binärversioner eller påstå nollavbrott. Rollback återställer verifierat arkiv till rena PostgreSQL-/S3-mål före matchande äldre binär.
Ett aktivt teamprogram kräver worker.replicaCount >= 1; Helm nekar ett levande program utan beständig worker. Sätt program och worker till noll för full paus. Program noll med positiv worker är avsiktligt dränerings-/återställningsläge som fortsätter köbearbetning utan webbtrafik.
Privat säkerhetskopieringshjälp
Variablerna konfigurerar deploy/private/libre-webui-backup och läses av underhållsskriptet, inte programprocessen:
| Variabel | Standard | Syfte |
|---|---|---|
LIBRE_WEBUI_STACK_DIR | /opt/libre-webui | Katalog med privat Compose-fil |
LIBRE_WEBUI_BACKUP_DIR | /var/backups/libre-webui | Skyddad katalog för säkerhetskopior och låsfil |
LIBRE_WEBUI_BACKUP_RETENTION_DAYS | 14 | Ålder då slutförda säkerhetskopior tas bort |
LIBRE_WEBUI_CONTAINER_NAME | libre-webui | Driftsatt programcontainer som inspekteras |
LIBRE_WEBUI_BACKUP_KEY_DIR | /etc/libre-webui/backup-keys | Privat katalog för arkivkryptering och signeringsnycklar |
LIBRE_WEBUI_RESTORE_IMAGE | krävs för återställning | Granskat oföränderligt Libre-image-ID eller digest |
LIBRE_WEBUI_RESTORE_CONFIG_DIR | sökväg per volym under /etc/libre-webui/restored | Ny katalog för återställd konfiguration |
systemd-enheten läser åsidosättningar från den valfria rootägda /etc/libre-webui/backup.env. Ange läge 0600. Stackkatalog, lagringstid, containernamn och nyckelkatalog kan anges där. Filsystemsandlådan tillåter endast skrivning under standardkatalogen. Anpassad LIBRE_WEBUI_BACKUP_DIR kräver dessutom exakt förskapad katalog i en ReadWritePaths=-drop-in; se
Privat fjärrdriftsättning.
Autentisering och säkerhet
| Variabel | Standard | Syfte |
|---|---|---|
ENABLE_SIGNUP | false | Tillåt registrering efter första lokala administratören |
JWT_SECRET | genererad/reserv i utveckling | JWT-signeringshemlighet; ange uttryckligen i produktion |
JWT_EXPIRES_IN | 7d | Sessionstokens livslängd |
ENCRYPTION_KEY | automatiskt genererad | Hexnyckel med 64 tecken för krypterade värden |
DEBUG_ENCRYPTION | inte angiven | Logga krypteringsfelsökning när angiven |
TURNSTILE_SITE_KEY | inte angiven | Cloudflare Turnstile-webbplatsnyckel för inloggning |
TURNSTILE_SECRET_KEY | inte angiven | Turnstile-hemlighet för backendverifiering |
TURNSTILE_EXPECTED_HOSTNAME | värdnamn från BASE_URL | Obligatoriskt värdnamn i Cloudflares verifieringssvar |
MFA_REQUIRED_MODE | inte angiven (optional) | Fäst tvåfaktorspolicyn till optional eller required |
WEBAUTHN_RP_ID | begärans värdnamn | Fast relying-party-ID för passkeys bakom flera värdnamn |
VAPID_PUBLIC_KEY | genererad och krypterat lagrad | Fäst offentlig Web Push VAPID-nyckel |
VAPID_PRIVATE_KEY | genererad och krypterat lagrad | Fäst privat Web Push VAPID-nyckel |
VAPID_SUBJECT | mailto:admin@localhost | Kontaktanspråk i signerade Web Push-auktoriseringar |
Turnstile aktiveras endast när båda nycklarna finns.
ENABLE_SIGNUP=false tillåter fortfarande den första lokala administratören i en tom databas och blockerar därefter ytterligare konton. Skydda en fjärrnåbar startrutt med en yttre identitetsgräns före första start.
Varje JWT binds till en serversession (sid), så utloggning eller återkallning från Inställningar → Sessioner ogiltigförklarar token på alla repliker och stänger aktiva WebSocket-anslutningar. Lagringstid för säkerhetsrevision kan konfigureras:
| Variabel | Standard | Syfte |
|---|---|---|
AUDIT_RETENTION_DAYS | 180 | Dagar som rader behålls i säkerhetsrevisionsloggen |
Generisk OIDC-baserad enkel inloggning
Alla OpenID Connect-leverantörer med identifieringsdokument kan användas. Flödet använder PKCE (S256), CSRF-tillstånd och nonce som verifieras i signaturkontrollerad ID-token. Identiteter länkas på det stabila anspråket sub.
| Variabel | Standard | Syfte |
|---|---|---|
OIDC_ISSUER_URL | inte angiven | Utfärdarens bas-URL; identifiering hämtas från <issuer>/.well-known/openid-configuration |
OIDC_CLIENT_ID | inte angiven | OAuth-klient-ID registrerat hos leverantören |
OIDC_CLIENT_SECRET | inte angiven | OAuth-klienthemlighet |
OIDC_DISPLAY_NAME | Single Sign-On | Etikett på inloggningsknappen |
OIDC_SCOPES | openid profile email | Begärda omfång |
OIDC_CALLBACK_URL | BASE_URL + OIDC-callbackrutt | Omdirigerings-URI registrerad hos leverantören |
OIDC_ALLOWED_EMAIL_DOMAINS | inte angiven | Kommaseparerad lista; verifierad e-post i en domän krävs |
OIDC_GROUP_CLAIM | groups | ID-tokenanspråk med gruppnamn |
OIDC_ADMIN_GROUPS | inte angiven | Kommaseparerad lista; adminrollen följer medlemskapet vid inloggning |
OIDC_SYNC_GROUPS | false | true synkroniserar Libre-grupper med gruppanspråket vid inloggning |
OIDC aktiveras endast när utfärdar-URL, klient-ID och klienthemlighet finns. E-post som redan används av ett olänkat lokalt konto avvisas i stället för att sammanfogas tyst, och kontoskapande följer ENABLE_SIGNUP.
WebSocket-tillträde för Chatt kan justeras utan svagare autentisering:
| Variabel | Standard | Syfte |
|---|---|---|
CHAT_WS_MAX_PAYLOAD_BYTES | 10 MiB | Största accepterade WebSocket-meddelande |
CHAT_WS_MAX_MESSAGES_PER_MINUTE | 120 | Meddelandetak per WebSocket-anslutning |
CHAT_WS_MAX_ACTIVE_GENERATIONS_PER_USER | 4 | Leverantörsgenereringar per konto |
CHAT_WS_MAX_CONNECTIONS_PER_USER | 5 | Samtidiga autentiserade socketar per konto |
WEBSOCKET_TICKET_TTL_MS | 30000 | Livslängd för engångsbiljett Chatt/Work, högst 60 sekunder |
Webbläsaren byter Authorization-huvudet mot en ogenomskinlig biljett och placerar endast det kortlivade värdet i WebSocket-URL:en. Biljetter används en gång, binds till protokoll och session och lagras som hash. Beständiga sessionstoken hålls därmed borta från reverse proxy-loggar. När CORS_ORIGIN eller BASE_URL anges måste Origin matcha. Ange minst ett värde på fjärrnåbar driftsättning; utan båda tillåter filtret lokal utveckling. Originlösa uppgraderingar stöds avsiktligt för Electron och andra klienter men kräver en giltig engångsbiljett och samma konto-, Work- och uppgiftskontroller. Behandla biljetten som autentiseringsgräns och begränsa övrig åtkomst med TLS, brandvägg och reverse proxy.
OAuth
| Variabel | Syfte |
|---|---|
GITHUB_CLIENT_ID | GitHub OAuth-klient-ID |
GITHUB_CLIENT_SECRET | GitHub OAuth-klienthemlighet |
GITHUB_CALLBACK_URL | Åsidosättning av GitHub-callback-URL |
HUGGINGFACE_CLIENT_ID | Hugging Face OAuth-klient-ID |
HUGGINGFACE_CLIENT_SECRET | Hugging Face OAuth-klienthemlighet |
HUGGINGFACE_CALLBACK_URL | Åsidosättning av Hugging Face-callback-URL |
Om callback-URL:er inte anges bygger Libre WebUI standardvärden från BASE_URL.
Ollama
| Variabel | Standard | Syfte |
|---|---|---|
OLLAMA_BASE_URL | http://localhost:11434 | Bas-URL för Ollama-API |
OLLAMA_TIMEOUT | 300000 | Standardtidsgräns för Ollama-begäran (1 000-3 600 000 ms) |
OLLAMA_LONG_OPERATION_TIMEOUT | 900000 | Tidsgräns för lång operation, inte kortare än OLLAMA_TIMEOUT |
OLLAMA_MAX_CONTEXT | 32768 | Största modellkontext som antas automatiskt (128-2 097 152 token) |
Webbsökning
| Variabel | Standard | Syfte |
|---|---|---|
SEARXNG_URL | inte angiven | Standardendpoint för SearXNG; administratören aktiverar fortfarande under Inställningar > Sök |
Libre Claw
| Variabel | Standard | Syfte |
|---|---|---|
LIBRE_CLAW_BASE_URL | http://127.0.0.1:8766 | Valfri Libre Claw-daemon-URL |
LIBRE_CLAW_TIMEOUT_MS | 30000 | Tidsgräns för Libre Claw HTTP-begäran |
Work-runtime
Variablerna konfigurerar Work-körning på datorn eller Kubernetes-klustret som kör backend. Docker är standardruntime; Helm väljer Kubernetes när work.enabled=true.
| Variabel | Standard | Syfte |
|---|---|---|
WORK_RUNTIME_IMAGE | node:22.22-bookworm@sha256:2d178f2785b96dfbf62a416ca2e40f50e30150b4ff3320d706f0d96e90600eb3 | Fäst image för Work-sandlådor |
WORK_DOCKER_COMMAND | docker | Docker-backendens CLI-program |
WORK_COMMAND_TIMEOUT_MS | 120000 | Standardtidsgräns; verktyg kan begära högst 600000 ms |
WORK_MAX_OUTPUT_CHARS | 50000 | Gräns för fångad stdout/stderr per ström |
WORK_MAX_AGENT_ROUNDS | 48 | Leverantörsoberoende varvbudget per körning |
WORK_STATUS_BLURB_MODEL | 1 | Ange 0 för att hoppa över modellanropet som skriver agentstatus |
WORK_MEMORY_LIMIT | 2g | Minnesgräns per Work-container |
WORK_CPU_LIMIT | 2 | CPU-gräns per Work-container |
WORK_PIDS_LIMIT | 256 | Processgräns per Work-container |
WORK_PREVIEW_PORT | 4173 | Port för förhandsvisningsserver i uppgiftscontainern |
WORK_PREVIEW_BIND | 127.0.0.1 | Värdgränssnitt där förhandsvisningsporten publiceras; Compose-driftsättningar på inbyggd Docker Engine måste använda ett nåbart icke-publikt bryggränssnitt |
WORK_DOCKER_PUBLISHED_HOST | appstandard: samma som WORK_PREVIEW_BIND; Compose-standard: host.docker.internal | Backendvärd/IP för Docker-publicerade förhandsvisnings-, skärm- och ljudportar |
WORK_COMPUTER_SCREEN_PORT | 6080 | Containerport för Work Computer-skärmbrygga |
WORK_COMPUTER_AUDIO_PORT | 6081 | Containerport för Work Computer-ljudbrygga |
WORK_MAX_ACTIVE_RUNTIMES_GLOBAL | 3 | Samtidiga runtimebaserade uppgifter för instansen |
WORK_MAX_ACTIVE_RUNTIMES_PER_USER | 2 | Samtidiga runtimebaserade uppgifter per användare |
WORK_MAX_TASKS_GLOBAL | 500 | Största antal beständiga Work-uppgifter för instansen |
WORK_MAX_TASKS_PER_USER | 100 | Största antal beständiga Work-uppgifter per administratör |
WORK_NETWORK_NAME | libre-webui-work | Hanterat sandlådebryggnätverk |
WORK_RUN_LEASE_WAIT_MS | 60000 | Väntetid på uppgiftens delade runtimelease före replikakonflikt |
WORK_RUNTIME_DNS | inte angiven | Kommaseparerade resolver-IP för nätverksuppgifter |
WORK_DOCKER_SOCKET | DOCKER_HOST vid unix:// eller tcp://, annars /var/run/docker.sock | Docker Engine-endpoint för terminal och diagnostik |
WORK_TERMINAL_MAX_SESSIONS_PER_TASK | 2 | Samtidiga webbläsarterminaler per uppgift |
WORK_TERMINAL_IDLE_TIMEOUT_MS | 900000 | Inaktivitetstid före terminalstängning |
WORK_RUNTIME_IDLE_TIMEOUT_MS | 0 (inaktiverad) | Stoppa sandlåda efter denna inaktivitet |
WORK_HOST_WORKSPACES_ENABLED | false | Tillåt värdmapp i stället för volym |
WORK_HOST_WORKSPACE_ROOTS | serveranvändarens hemkatalog | :-separerade rötter som värdarbetsytan måste ligga inom |
WORK_RUNTIME_BACKEND | docker | Sandlådebackend: docker eller kubernetes |
WORK_K8S_NAMESPACE | libre-webui-work | Namespace för Kubernetes-sandlådepoddar och PVC |
WORK_K8S_STORAGE_CLASS | klusterstandard | StorageClass för arbetsyte-PVC |
WORK_K8S_WORKSPACE_SIZE | 5Gi | PVC-storlek per uppgift (verklig diskkvot) |
WORK_K8S_POD_READY_TIMEOUT_MS | 900000 | Vänta på att en sandlåde-Pod blir Running |
WORK_K8S_POD_GONE_TIMEOUT_MS | 60000 | Vänta på att borttagen Pod försvinner |
AGENT_CLI_MODELS_ENABLED | inte angiven (adminreglage, av) | Fäst Agent-funktionen eller lämna åt administratörsreglaget |
TOOLS_ACCESS_MODE | inte angiven (endast admin) | Fäst chattverktyg till admins eller all-users |
STT_ACCESS_MODE | inte angiven (alla användare) | Fäst tal-till-text till admins eller all-users |
TTS_ACCESS_MODE | inte angiven (alla användare) | Fäst text-till-tal till admins eller all-users |
VOICE_MODE_ACCESS_MODE | inte angiven (alla användare) | Fäst handsfree-röstläge till admins eller all-users |
VOICE_CLONING_ACCESS_MODE | inte angiven (alla användare) | Fäst röstkloning till admins eller all-users |
TOOLS_PRIVATE_NETWORK_ALLOWLIST | inte angiven | Exakta värdnamn för privata adresser, kommaseparerade |
AGENT_CLI_TIMEOUT_MS | 600000 | Tid innan agent-CLI avslutas |
CODEX_OAUTH_MODELS_ENABLED | true | Erbjud Codex (ChatGPT) till administratörer |
CODEX_HOME | ~/.codex | Plats för Codex CLI-inloggning (auth.json) |
Agent-CLI-binärer och Codex OAuth-uppgifter är nodlokala. De stöds endast i en solo-process där identifiering och körning ser samma filsystem och miljö. Teamläge kör beständiga chattjobb i extern worker och kräver därför AGENT_CLI_MODELS_ENABLED=false och CODEX_OAUTH_MODELS_ENABLED=false; starten nekar övriga värden i stället för att annonsera en leverantör som bara finns på en programreplik. Använd Ollama eller ett leverantörsplugin vars uppgifter och dirigering lagras i delad PostgreSQL eller vidarebefordras identiskt.
På Docker-backend bind-monterar en värdarbetsyta en verklig katalog vid /workspace, så uppgiften läser och skriver direkt i stället för i egen volym. Kubernetes nekar värdmappar. Det minskar avsiktligt Docker-sandlådan: håll WORK_HOST_WORKSPACES_ENABLED av och WORK_HOST_WORKSPACE_ROOTS så snäv som möjligt. Sökvägar löses genom symlänkar före rotkontroll och .ssh, .gnupg, .aws, .config nekas helt.
Agent-CLI-modeller exponerar installerade kodagenter (claude, codex) som valbara chattmodeller, så en prenumerationsagent kan svara utan API-nyckel. Endast administratörer ser dem; CLI kör som serveranvändaren och ärver agentuppgifter. Behandla det som shellåtkomst för agenterna.
På Docker ansluter nätverksuppgifter till den hanterade bryggan WORK_NETWORK_NAME, skapad med intercontainerkommunikation avstängd så sandlådor inte når varandra eller driftsättningscontainrar. WORK_RUNTIME_DNS är Docker-egresspolicyns krok: peka på en filtrerande resolver för namnlistor. Icke-IP-adresser nekas och loggas. DNS-filter begränsar inte direkt IP-egress; använd värdbrandvägg vid behov. Kubernetes använder diagrammets standardnekande NetworkPolicy och work.networkPolicy.blockedEgressCidrs.
På Docker talar terminal och diagnostik direkt med Docker Engine-API. De följer WORK_DOCKER_SOCKET, annars DOCKER_HOST—unix:// eller vanlig HTTP tcp:// som en socketproxy (se docker-compose.socket-proxy.yml)—annars /var/run/docker.sock. En DOCKER_HOST som klienten inte kan använda (ssh:// eller tcp:// med DOCKER_TLS_VERIFY) rapporterar terminal och diagnostik otillgängliga; Work fortsätter genom Docker-CLI. På Kubernetes används Pod exec utan Docker-endpoint.
Work läser värdena vid backendstart. Förhandsvisningsporten är intern i uppgiftscontainern; Libre WebUI publicerar den på dynamiskt tilldelad loopbackport i stället för alla värdgränssnitt.
Fäst runtime-imagen vid granskad version eller digest. Höjd samtidighet och resursgränser ökar kapaciteten autonoma körningar kan använda. WORK_MAX_AGENT_ROUNDS gäller lika för Ollama och plugin. Säkerhetsbudgeten är max(128, WORK_MAX_AGENT_ROUNDS × 8). När budgeten tar slut begär Work en slutlig överlämning utan verktyg och slutar i needs_input i stället för ett rått gränsfel. En följdkörning fortsätter i samma beständiga arbetsyta. Sparad verktygsutdata begränsas separat till cirka 20 000 källtecken plus avkortningsmarkör.
Variablerna justerar en redan nåbar Work-runtime. Repositoryts Compose-driftsättning för en instans aktiverar den som standard: imagen innehåller Docker-CLI och filerna monterar värdsocketen. Två Compose-variabler styr anslutningen:
| Variabel | Standard | Syfte |
|---|---|---|
DOCKER_GID | 0 | Grupp-ID för värdens Docker-socket, tillagt till containeranvändaren |
DOCKER_SOCKET | /var/run/docker.sock | Värdsökväg för Docker-socketen som monteras |
DOCKER_GID måste vara socketens grupp sedd inifrån containern; macOS rapporterar annat. Team-Compose monterar ingen socket och Docker-Work förblir otillgängligt tills docker-compose.team.work.yml läggs till. Produktionsöverlägget ger program och worker samma filtrerade interna proxyendpoint, aldrig socketmontering eller grupp. Proxyn tillåter endast använda API-delar men containerskapande är fortfarande en värdkontrolluppgift; använd särskild eller rootless Work-daemon för starkare gräns. Helm monterar aldrig nodsocket. Aktivera Pod-/PVC-backend med work.enabled=true.
Profilen solo måste ha noll eller en programreplik eftersom den använder SQLite, lokala filer och processlokal samordning. Helm accepterar noll för paus och nekar större antal eller autoskalning. Fullständig team kan använda flera repliker och extern worker eftersom PostgreSQL, S3, PGVector och Redis äger delat tillstånd. Work-sandlådepoddar skalar oberoende; extern worker får samma Kubernetes-image, StorageClass och work.env-gränser som programmet.
Compose-filer accepterar även WEBUI_BIND_ADDRESS (standard 127.0.0.1) och WEBUI_PORT (8080). Behåll loopback om inte betrott LAN eller värdproxy måste nå porten.
Modellidentifiering hos leverantörer
En leverantörs modellkatalog identifieras på nytt när den saknas eller är inaktuell, så omläsning återspeglar aktuella modeller. Variablerna justerar cykeln:
| Variabel | Standard | Syfte |
|---|---|---|
PLUGIN_MODEL_DISCOVERY_TTL_MS | 21600000 (6 h) | Ålder då lagrad katalog uppdateras vid nästa pluginlisteläsning |
PLUGIN_MODEL_DISCOVERY_RETRY_MS | 600000 (10 min) | Minsta intervall mellan försök |
PLUGIN_MODEL_DISCOVERY_REFRESH_DEADLINE_MS | 3000 | Hur länge ett pluginlistesvar väntar på uppdatering |
En uppdatering som överskrider tidsgränsen slutförs ändå och visas vid nästa begäran. Uppdatera modeller kontaktar alltid leverantören och ignorerar intervallet.
Nycklar för leverantörsplugin
Leverantörsplugin kan använda miljönycklar som driftsättningsomfattande standard:
| Variabel | Leverantör |
|---|---|
OPENAI_API_KEY | OpenAI och 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 från Moonshot AI |
GITHUB_API_KEY | GitHub Models |
HUGGINGFACE_API_KEY | Hugging Face-API:er där konfigurerat |
ELEVENLABS_API_KEY | ElevenLabs TTS |
COMFYUI_API_KEY | ComfyUI-driftsättningar som kräver API-nyckel |
Användare kan lagra leverantörsuppgifter i UI:t. Miljönycklar används endast med dirigering och autentisering från en oskuggad medföljande definition. Importerade definitioner, skrivbara definitioner som återanvänder ID och administratörsrutter kräver uppgifter från samma konto. Libre WebUI kopplar inte miljönycklar till dessa rutter eller exponerar dem genom identifiering. Tillit kommer från kompilerad hash av varje levererat manifest, så containerlayouter med gemensam äldre/medföljande sökväg stöds utan att ändrat manifest behandlas som medföljande.
Användarsparade nycklar binds till effektiv definition, källa, autentiseringskontrakt och dirigering. Nyckeln måste sparas igen efter destinationsändring. Äldre obundna nycklar accepteras och binds första gången endast för exakt levererad definition på medföljande rutt.
Vid källstart löses relativ PLUGINS_DIR från backendkatalogen. Paketerad start gör uttryckligt relativt värde absolut från anroparen. Libre läser även backend/plugins och historiska platser. Flytta definitionerna till $DATA_DIR/plugins; återställning rapporterar äldre sökvägar som externt tillstånd och blockerar endast-volym-ögonblicksbild medan anpassningar finns kvar. Kataloger och JSON-definitioner måste vara fysiska normala poster; Libre följer inte symlänkar.
Frontend
| Variabel | Standard | Syfte |
|---|---|---|
VITE_API_BASE_URL | dev-proxy på samma ursprung eller produktions-API | Frontend-API:ts bas-URL |
VITE_WS_BASE_URL | härledd från API-URL | Absolut ws:/wss:-bas för Chatt- och Work-socketar |
VITE_APP_VERSION | paketversion från Vite-konfiguration | Visad programversion |
VITE_DEMO_MODE | false | Aktivera demolägessimulering när true |
VITE_API_TIMEOUT | 300000 | Frontend-API-tidsgräns i millisekunder |
VITE_BACKEND_URL | http://localhost:3001 | Används av vissa autentiseringshjälpare |
VITE_DEBUG_VERBOSE | inte angiven | Aktivera utförliga frontend-felsökningsloggar |
VITE_LOG_LEVEL | inte angiven | Åsidosätt frontendens loggnivå |
ELECTRON_BUILD | inte angiven | Aktivera Electron-specifikt Vite-beteende |
VITE_WS_BASE_URL åsidosätter alla WebSocket-reserver för Chatt och Work-terminal. Den kan innehålla reverse proxy-sökvägsprefix men måste vara absolut ws:/wss: utan uppgifter, fråga eller fragment. Utan värde använder Electron file: ws://localhost:3001; webbläsare härleder basen från VITE_API_BASE_URL, sedan webbläsarens ursprung. Vite proxyar utvecklingsursprunget till backend-en på port 3001.
Underhållsskript
| Variabel | Syfte |
|---|---|
CHANGELOG_AI | Ange 0 för att inaktivera AI-stödda ändringsloggutkast |
CHANGELOG_AI_MODEL | Ollama-modell för utgåve-/ändringsloggsgenerering |
CHANGELOG_AI_TIMEOUT_MS | Tidsgräns för AI-ändringslogg i millisekunder |
Exempel:
CHANGELOG_AI_MODEL=glm-5.2:cloud npm run changelog
CHANGELOG_AI=0 npm run release:minor
Produktionsexempel
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