Przejdź do głównej zawartości

Zmienne środowiskowe

Zmienne operatora czytane przez backend, frontend i skrypty utrzymaniowe. Testowe canary pominięte.

Backend

Poziom logowania testów może mieć wartość warn.

ZmiennaDomyślnieCel
NODE_ENVdevelopmentRuntime
PORT3001 dev, 8080 prodHTTP
TRUST_PROXYbrak (0 Helm)Dokładna liczba proxy
CORS_ORIGINlokalneDozwolone origins
SERVE_FRONTENDbraktrue serwuje frontend
DOCKER_ENVbrakDocker z true
DATA_DIRbackend/data; CLI ~/.libre-webuiDane
PLATFORM_PREFLIGHT_TMP_DIRbackend/temp/preflight; cacheKopia DB/WAL
PLUGIN_UPLOAD_TEMP_DIRlibre-webui-plugin-uploadsUpload
PLUGINS_DIR$DATA_DIR/pluginsPluginy
BASE_URLhttp://localhost:3001OAuth
LOG_LEVELinfoLog
LOG_FORMATtextjson strukturalny
OTEL_EXPORTER_OTLP_ENDPOINTbrakOpt-in OTLP
OTEL_EXPORTER_OTLP_HEADERSbrakkey=value
OTEL_SERVICE_NAMElibre-webuiservice.name
WEBUI_HOSTloopback; Docker 0.0.0.0Listen
OPEN_BROWSERtruefalse nie otwiera
FULL_DOCUMENT_CONTEXT_MAX_TOKENS32000Pełny dokument
GALLERY_RETENTION_DAYSbrakRetencja mediów
RECOVERY_DRILL_INTERVAL_HOURSbrakĆwiczenie co N h
RECOVERY_DRILL_HISTORY60Historia

Source rozwiązuje względne DATA_DIR, PLUGINS_DIR, PLATFORM_PREFLIGHT_TMP_DIR od backendu. DATA_DIR=./databackend/data; DATA_DIR=./backend/databackend/backend/data. Zmieniaj tylko po zatrzymaniu i backupie. Dwa stany bez wyboru powodują bezpieczną porażkę.

npx, npm globalny i Homebrew używają ~/.libre-webui; względne ścieżki od katalogu wywołania. Cache: ~/Library/Caches/libre-webui, %LOCALAPPDATA%\libre-webui, ${XDG_CACHE_HOME:-~/.cache}/libre-webui; Homebrew var/libre-webui/preflight; Docker/Helm /app/backend/data, /app/backend/temp/preflight.

Fundament platformy

Tryb TLS może mieć wartość require.

solo: SQLite, lokalne zaszyfrowane bloby/wektory, lokalna koordynacja, worker wbudowany. team: PostgreSQL, S3, PGVector, Redis, zewnętrzny worker. Niepełna konfiguracja odrzucana.

ZmiennaDomyślnieCel
LIBRE_PLATFORM_MODEsolosolo/team
DATABASE_BACKENDsqlitesqlite/postgres
DATABASE_URLbrakPostgreSQL
DATABASE_SSL_MODEverify-fullTLS
POSTGRES_MIGRATION_MODEapplyapply/validate
POSTGRES_POOL_MAX10Pool
POSTGRES_CONNECT_TIMEOUT_MS5000Connect
POSTGRES_IDLE_TIMEOUT_MS30000Idle
POSTGRES_STATEMENT_TIMEOUT_MS30000Statement
POSTGRES_MIGRATION_LOCK_TIMEOUT_MS60000Lock
BLOB_STORE_BACKENDlocallocal/s3
VECTOR_STORE_BACKENDembeddedembedded/pgvector
COORDINATION_BACKENDlocal/redisKoordynacja
REDIS_URLbrakRedis
REDIS_KEY_PREFIXlibreNamespace
REDIS_CONNECT_TIMEOUT_MS5000Timeout
JOB_WORKER_MODEembedded/externalWorker
RESOURCE_LEASE_TTL_MS30000Lease
JOB_WORKER_CONCURRENCY4Jobs
CHAT_STREAM_EVENT_RETENTION_HOURS24Chat
PLATFORM_EVENT_RETENTION_DAYS30Events
PLATFORM_JOB_RETENTION_DAYS30Jobs
LIBRE_SKIP_STARTUP_INTEGRITY_SCANbrak1 pomija skan
STORAGE_ENCRYPTION_KEYSbrakMapa z legacy = ENCRYPTION_KEY
STORAGE_ENCRYPTION_ACTIVE_KEY_IDbrakAktywny klucz
BLOB_QUOTA_BYTES_PER_USER10737418240Quota
BLOB_QUOTA_RESERVATION_TTL_MS3600000Rezerwacja
S3_BUCKETbrakBucket
S3_REGIONbrakRegion
S3_ENDPOINTproviderEndpoint
S3_ACCESS_KEY_IDSDKAccess
S3_SECRET_ACCESS_KEYSDKSecret
S3_SESSION_TOKENbrakToken
S3_FORCE_PATH_STYLEfalsePath-style
S3_BLOB_PREFIXlibre/blobsPrefix

Bez mapy używa ENCRYPTION_KEY jako legacy, potem ${DATA_DIR}/.encryption_key bez generowania. Klucze muszą się zgadzać; konflikty, prawa, symlink i braki zawodzą bezpiecznie.

Redis to koordynacja, nie dane kanoniczne. Team używa współdzielonej admission dla HTTP/WebSocket/STT/TTS/audio/import/terminal; błąd 503 lub abort, bez lokalnego fallbacku. Fundament.

Team przekazuje wszystko app/worker. Helm: env, sekrety secrets.redisUrl, secrets.databaseUrl, secrets.storageEncryptionKeys. Rezerwuj (replicaCount + worker.replicaCount) * POSTGRES_POOL_MAX; zdalnie DATABASE_SSL_MODE=verify-full, prywatny Compose disable; wspólny secrets.jwtSecret. S3 ma ciphertext.

Archiwa zachowują parametry w szyfrowanej podpisanej konfiguracji. App/worker mają same OLLAMA_BASE_URL, OLLAMA_TIMEOUT, OLLAMA_LONG_OPERATION_TIMEOUT, OLLAMA_MAX_CONTEXT; tylko pełne liczby dziesiętne, 300000ms i inne złe wartości odrzucone.

Helm TRUST_PROXY tylko 016, nigdy true. Schema PostgreSQL dokładna, Recreate, bez mixed/zero-downtime. Aktywny team wymaga worker.replicaCount >= 1.

Prywatny helper kopii

Helper znajduje się w deploy/private/libre-webui-backup. Obraz przywracania jest oznaczony jako required.

ZmiennaDomyślnieCel
LIBRE_WEBUI_STACK_DIR/opt/libre-webuiCompose
LIBRE_WEBUI_BACKUP_DIR/var/backups/libre-webuiBackup
LIBRE_WEBUI_BACKUP_RETENTION_DAYS14Retencja
LIBRE_WEBUI_CONTAINER_NAMElibre-webuiKontener
LIBRE_WEBUI_BACKUP_KEY_DIR/etc/libre-webui/backup-keysKlucze
LIBRE_WEBUI_RESTORE_IMAGEwymaganeImage
LIBRE_WEBUI_RESTORE_CONFIG_DIR/etc/libre-webui/restoredKonfiguracja

/etc/libre-webui/backup.env, root, 0600. Własny LIBRE_WEBUI_BACKUP_DIR wymaga ReadWritePaths=. Wdrożenie prywatne.

Uwierzytelnianie

Koordynacja Redis przyjmuje adresy redis: lub rediss:.

| ENABLE_SIGNUP | false | Rejestracja | | JWT_SECRET | dev fallback | JWT | | JWT_EXPIRES_IN | 7d | Sesja | | ENCRYPTION_KEY | auto | 64 hex | | DEBUG_ENCRYPTION | brak | Debug | | TURNSTILE_SITE_KEY | brak | Turnstile | | TURNSTILE_SECRET_KEY | brak | Secret | | TURNSTILE_EXPECTED_HOSTNAME | BASE_URL | Host | | MFA_REQUIRED_MODE | optional | MFA | | WEBAUTHN_RP_ID | host | Passkey | | VAPID_PUBLIC_KEY | auto szyfrowany | Push | | VAPID_PRIVATE_KEY | auto szyfrowany | Push | | VAPID_SUBJECT | mailto:admin@localhost | Kontakt |

Oba Turnstile wymagane. ENABLE_SIGNUP=false pozwala pierwszy admin. JWT związany z sid. AUDIT_RETENTION_DAYS domyślnie 180.

Ogólny OIDC SSO

Nagłówek Origin musi być zgodny z konfiguracją.

PKCE S256, state, nonce, identyfikacja sub.

| OIDC_ISSUER_URL | brak | <issuer>/.well-known/openid-configuration | | OIDC_CLIENT_ID | brak | ID | | OIDC_CLIENT_SECRET | brak | Secret | | OIDC_DISPLAY_NAME | Single Sign-On | Nazwa | | OIDC_SCOPES | openid profile email | Scopes | | OIDC_CALLBACK_URL | BASE_URL + route | Callback | | OIDC_ALLOWED_EMAIL_DOMAINS | brak | Domeny | | OIDC_GROUP_CLAIM | groups | Grupy | | OIDC_ADMIN_GROUPS | brak | Admin | | OIDC_SYNC_GROUPS | false | Sync |

Wymaga issuer/ID/secret. E-mail lokalny nie jest automatycznie scalany. WebSocket: CHAT_WS_MAX_PAYLOAD_BYTES 10 MiB, CHAT_WS_MAX_MESSAGES_PER_MINUTE 120, CHAT_WS_MAX_ACTIVE_GENERATIONS_PER_USER 4, CHAT_WS_MAX_CONNECTIONS_PER_USER 5, WEBSOCKET_TICKET_TTL_MS 30000. Bilet jednorazowy, Origin zgodny z CORS_ORIGIN/BASE_URL.

OAuth

GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET, GITHUB_CALLBACK_URL, HUGGINGFACE_CLIENT_ID, HUGGINGFACE_CLIENT_SECRET, HUGGINGFACE_CALLBACK_URL. Brak callbacku używa BASE_URL.

Ollama

OLLAMA_BASE_URL http://localhost:11434; OLLAMA_TIMEOUT 300000; OLLAMA_LONG_OPERATION_TIMEOUT 900000 nie krótszy; OLLAMA_MAX_CONTEXT 32768.

Wyszukiwanie web

SEARXNG_URL ustawia domyślny endpoint; admin nadal aktywuje.

Libre Claw

LIBRE_CLAW_BASE_URL http://127.0.0.1:8766, LIBRE_CLAW_TIMEOUT_MS 30000.

Runtime Work

Backend może mieć wartość kubernetes, a logowanie Codex jest odczytywane z auth.json. Endpoint ssh:// nie jest obsługiwany przez klienta terminala; Helm przekazuje limity przez work.env.

Korzenie folderów hosta są rozdzielane znakiem :. Tryby dostępu mogą przyjmować admins, admins, admins, all-users, all-users, all-users, all-users i all-users.

Wszystkie zmienne:

WORK_RUNTIME_IMAGE, WORK_DOCKER_COMMAND, WORK_COMMAND_TIMEOUT_MS, WORK_MAX_OUTPUT_CHARS, WORK_MAX_AGENT_ROUNDS, WORK_STATUS_BLURB_MODEL, WORK_MEMORY_LIMIT, WORK_CPU_LIMIT, WORK_PIDS_LIMIT, WORK_PREVIEW_PORT, WORK_PREVIEW_BIND, WORK_DOCKER_PUBLISHED_HOST, WORK_COMPUTER_SCREEN_PORT, WORK_COMPUTER_AUDIO_PORT, WORK_MAX_ACTIVE_RUNTIMES_GLOBAL, WORK_MAX_ACTIVE_RUNTIMES_PER_USER, WORK_MAX_TASKS_GLOBAL, WORK_MAX_TASKS_PER_USER, WORK_NETWORK_NAME, WORK_RUN_LEASE_WAIT_MS, WORK_RUNTIME_DNS, WORK_DOCKER_SOCKET, WORK_TERMINAL_MAX_SESSIONS_PER_TASK, WORK_TERMINAL_IDLE_TIMEOUT_MS, WORK_RUNTIME_IDLE_TIMEOUT_MS, WORK_HOST_WORKSPACES_ENABLED, WORK_HOST_WORKSPACE_ROOTS, WORK_RUNTIME_BACKEND, WORK_K8S_NAMESPACE, WORK_K8S_STORAGE_CLASS, WORK_K8S_WORKSPACE_SIZE, WORK_K8S_POD_READY_TIMEOUT_MS, WORK_K8S_POD_GONE_TIMEOUT_MS, AGENT_CLI_MODELS_ENABLED, TOOLS_ACCESS_MODE, STT_ACCESS_MODE, TTS_ACCESS_MODE, VOICE_MODE_ACCESS_MODE, VOICE_CLONING_ACCESS_MODE, TOOLS_PRIVATE_NETWORK_ALLOWLIST, AGENT_CLI_TIMEOUT_MS, CODEX_OAUTH_MODELS_ENABLED, CODEX_HOME.

Domyślne wartości są jak w tabeli źródłowej: image node:22.22-bookworm@sha256:2d178f2785b96dfbf62a416ca2e40f50e30150b4ff3320d706f0d96e90600eb3, timeout 120000, output 50000, rundy 48, status 1, pamięć 2g, CPU 2, PIDs 256, preview 4173, bind 127.0.0.1, screen 6080, audio 6081, limity 3/2, zadania 500/100, sieć libre-webui-work, lease 60000, terminal 2/900000, idle 0, backend docker, namespace libre-webui-work, PVC 5Gi, Pod 900000/60000, CLI timeout 600000, Codex true, home ~/.codex. W natywnym Docker Engine wdrożenia Compose muszą ustawić WORK_PREVIEW_BIND na osiągalny, niepubliczny interfejs mostka; WORK_DOCKER_PUBLISHED_HOST domyślnie odpowiada w aplikacji wartości WORK_PREVIEW_BIND, a w Compose to host.docker.internal.

Agent CLI/Codex tylko solo; team wymaga AGENT_CLI_MODELS_ENABLED=false, CODEX_OAUTH_MODELS_ENABLED=false. Folder hosta montuje /workspace, odrzuca .ssh, .gnupg, .aws, .config. Modele claude, codex są admin-only.

Sieć używa WORK_NETWORK_NAME, DNS WORK_RUNTIME_DNS; bez ochrony direct IP. Kubernetes work.networkPolicy.blockedEgressCidrs. Terminal używa WORK_DOCKER_SOCKET, potem DOCKER_HOST (unix:///tcp://, docker-compose.socket-proxy.yml), potem /var/run/docker.sock. DOCKER_TLS_VERIFY przy tcp:// blokuje terminal. Narzędzia budżet max(128, WORK_MAX_AGENT_ROUNDS × 8), stan needs_input, output ok. 20 000 znaków.

Compose: DOCKER_GID 0, DOCKER_SOCKET /var/run/docker.sock; team docker-compose.team.work.yml; Helm work.enabled=true. Solo max jedna replika, team wiele. WEBUI_BIND_ADDRESS 127.0.0.1, WEBUI_PORT 8080.

Wykrywanie modeli dostawców

PLUGIN_MODEL_DISCOVERY_TTL_MS 21600000, PLUGIN_MODEL_DISCOVERY_RETRY_MS 600000, PLUGIN_MODEL_DISCOVERY_REFRESH_DEADLINE_MS 3000. Jawne odświeżenie ignoruje interwał.

Klucze providerów

OPENAI_API_KEY, ANTHROPIC_API_KEY, GROQ_API_KEY, GEMINI_API_KEY, MISTRAL_API_KEY, OPENROUTER_API_KEY, KIMI_API_KEY, GITHUB_API_KEY, HUGGINGFACE_API_KEY, ELEVENLABS_API_KEY, COMFYUI_API_KEY.

Klucze środowiskowe tylko dla wbudowanej zaufanej definicji; custom wymaga użytkownika. Klucze wiążą się z trasą. PLUGINS_DIR względny od backendu/source lub wywołującego/pakietu; czyta też backend/plugins; przenieś do $DATA_DIR/plugins, bez symlinków.

Frontend

VITE_API_BASE_URL (domyślnie: proxy deweloperski tego samego pochodzenia lub produkcyjne API), VITE_WS_BASE_URL, VITE_APP_VERSION, VITE_DEMO_MODE, VITE_API_TIMEOUT, VITE_BACKEND_URL, VITE_DEBUG_VERBOSE, VITE_LOG_LEVEL, ELECTRON_BUILD. VITE_WS_BASE_URL absolutne ws:/wss:, bez poświadczeń/query/fragment; Electron file: fallback ws://localhost:3001, przeglądarka wyprowadza bazę z VITE_API_BASE_URL, a potem z pochodzenia przeglądarki — Vite przekierowuje pochodzenie deweloperskie do backendu na porcie 3001.

Skrypty utrzymania

CHANGELOG_AI, CHANGELOG_AI_MODEL, CHANGELOG_AI_TIMEOUT_MS.

CHANGELOG_AI_MODEL=glm-5.2:cloud npm run changelog
CHANGELOG_AI=0 npm run release:minor

Przykład produkcyjny

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

Powiązane