Переменные окружения
Переменные для операторов, читаемые backend, frontend и обслуживающими скриптами. Тестовые canary исключены.
Backend
| Переменная | По умолчанию | Назначение |
|---|---|---|
NODE_ENV | development | Runtime |
PORT | 3001 dev, 8080 prod | HTTP |
TRUST_PROXY | нет (0 Helm) | Число proxy |
CORS_ORIGIN | локальные | Origins |
SERVE_FRONTEND | нет | true обслуживает frontend |
DOCKER_ENV | нет | Docker при true |
DATA_DIR | backend/data; CLI ~/.libre-webui | Данные |
PLATFORM_PREFLIGHT_TMP_DIR | backend/temp/preflight; cache | DB/WAL |
PLUGIN_UPLOAD_TEMP_DIR | libre-webui-plugin-uploads | Загрузки |
PLUGINS_DIR | $DATA_DIR/plugins | Плагины |
BASE_URL | http://localhost:3001 | OAuth |
LOG_LEVEL | info | Логи |
LOG_FORMAT | text | json структурированный |
OTEL_EXPORTER_OTLP_ENDPOINT | нет | OTLP opt-in |
OTEL_EXPORTER_OTLP_HEADERS | нет | key=value |
OTEL_SERVICE_NAME | libre-webui | service.name |
WEBUI_HOST | loopback; Docker 0.0.0.0 | Listen |
OPEN_BROWSER | true | false не открывает |
FULL_DOCUMENT_CONTEXT_MAX_TOKENS | 32000 | Полный документ |
GALLERY_RETENTION_DAYS | нет | Retention медиа |
RECOVERY_DRILL_INTERVAL_HOURS | нет | Упражнение N часов |
RECOVERY_DRILL_HISTORY | 60 | История |
Source разрешает относительные DATA_DIR, PLUGINS_DIR, PLATFORM_PREFLIGHT_TMP_DIR от backend. DATA_DIR=./data → backend/data; DATA_DIR=./backend/data → backend/backend/data. Меняйте после остановки и backup. Два состояния без выбора дают безопасный отказ.
npx, global npm и Homebrew используют ~/.libre-webui; относительные пути — от вызывающего каталога. 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.
Основа платформы
Адрес Redis использует схемы redis: или rediss:.
solo: SQLite, локальные зашифрованные blobs/vectors, local coordination, embedded worker. team: PostgreSQL, S3, PGVector, Redis, external worker. Неполная конфигурация отклоняется.
| Переменная | По умолчанию | Назначение |
|---|---|---|
LIBRE_PLATFORM_MODE | solo | solo/team |
DATABASE_BACKEND | sqlite | sqlite/postgres |
DATABASE_URL | нет | PostgreSQL |
DATABASE_SSL_MODE | verify-full | TLS |
POSTGRES_MIGRATION_MODE | apply | apply/validate |
POSTGRES_POOL_MAX | 10 | Pool |
POSTGRES_CONNECT_TIMEOUT_MS | 5000 | Connect |
POSTGRES_IDLE_TIMEOUT_MS | 30000 | Idle |
POSTGRES_STATEMENT_TIMEOUT_MS | 30000 | Statement |
POSTGRES_MIGRATION_LOCK_TIMEOUT_MS | 60000 | Lock |
BLOB_STORE_BACKEND | local | local/s3 |
VECTOR_STORE_BACKEND | embedded | embedded/pgvector |
COORDINATION_BACKEND | local/redis | Coordination |
REDIS_URL | нет | Redis |
REDIS_KEY_PREFIX | libre | Namespace |
REDIS_CONNECT_TIMEOUT_MS | 5000 | Timeout |
JOB_WORKER_MODE | embedded/external | Worker |
RESOURCE_LEASE_TTL_MS | 30000 | Lease |
JOB_WORKER_CONCURRENCY | 4 | Jobs |
CHAT_STREAM_EVENT_RETENTION_HOURS | 24 | Chat |
PLATFORM_EVENT_RETENTION_DAYS | 30 | Events |
PLATFORM_JOB_RETENTION_DAYS | 30 | Jobs |
LIBRE_SKIP_STARTUP_INTEGRITY_SCAN | нет | 1 пропускает scan |
STORAGE_ENCRYPTION_KEYS | нет | Карта с legacy = ENCRYPTION_KEY |
STORAGE_ENCRYPTION_ACTIVE_KEY_ID | нет | Активный ключ |
BLOB_QUOTA_BYTES_PER_USER | 10737418240 | Quota |
BLOB_QUOTA_RESERVATION_TTL_MS | 3600000 | Reservation |
S3_BUCKET | нет | Bucket |
S3_REGION | нет | Region |
S3_ENDPOINT | provider | Endpoint |
S3_ACCESS_KEY_ID | SDK | Access |
S3_SECRET_ACCESS_KEY | SDK | Secret |
S3_SESSION_TOKEN | нет | Token |
S3_FORCE_PATH_STYLE | false | Path-style |
S3_BLOB_PREFIX | libre/blobs | Prefix |
Без карты используется ENCRYPTION_KEY как legacy, затем ${DATA_DIR}/.encryption_key без генерации. Ключи должны совпадать; конфликт, права, symlink и отсутствие дают безопасный отказ.
Redis — coordination, не канонические данные. Team использует shared admission для HTTP/WebSocket/STT/TTS/audio/import/terminal; ошибка 503 или abort, без local fallback. Основа.
Team передаёт всё app/worker. Helm: env, секреты secrets.redisUrl, secrets.databaseUrl, secrets.storageEncryptionKeys. Резервируйте (replicaCount + worker.replicaCount) * POSTGRES_POOL_MAX; remote DATABASE_SSL_MODE=verify-full, private Compose disable; общий secrets.jwtSecret. S3 получает ciphertext.
Архивы сохраняют параметры в подписанной зашифрованной конфигурации. App/worker имеют одинаковые OLLAMA_BASE_URL, OLLAMA_TIMEOUT, OLLAMA_LONG_OPERATION_TIMEOUT, OLLAMA_MAX_CONTEXT; только полные положительные десятичные значения, 300000ms и неверные формы отклоняются.
Helm TRUST_PROXY только 0–16, не true. PostgreSQL schema точная, Recreate, без mixed/zero-downtime. Активный team требует worker.replicaCount >= 1.
Приватный helper резервного копирования
deploy/private/libre-webui-backup.
| LIBRE_WEBUI_STACK_DIR | /opt/libre-webui | Compose |
| LIBRE_WEBUI_BACKUP_DIR | /var/backups/libre-webui | Backup |
| LIBRE_WEBUI_BACKUP_RETENTION_DAYS | 14 | Retention |
| LIBRE_WEBUI_CONTAINER_NAME | libre-webui | Container |
| LIBRE_WEBUI_BACKUP_KEY_DIR | /etc/libre-webui/backup-keys | Keys |
| LIBRE_WEBUI_RESTORE_IMAGE | required | Image |
| LIBRE_WEBUI_RESTORE_CONFIG_DIR | /etc/libre-webui/restored | Config |
Файл /etc/libre-webui/backup.env, root, 0600; custom directory требует ReadWritePaths=. Приватное развёртывание.
Аутентификация
Необязательные режимы обозначаются как optional и optional.
Контакт Web Push по умолчанию — mailto:admin@localhost.
VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY и VAPID_SUBJECT настраивают Web Push.
TURNSTILE_SITE_KEY, TURNSTILE_SECRET_KEY и TURNSTILE_EXPECTED_HOSTNAME настраивают Turnstile.
ENABLE_SIGNUP false, JWT_SECRET, JWT_EXPIRES_IN 7d, ENCRYPTION_KEY, DEBUG_ENCRYPTION, ключи Turnstile, MFA_REQUIRED_MODE, WEBAUTHN_RP_ID, VAPID. ENABLE_SIGNUP=false допускает первого admin. JWT связан с sid. AUDIT_RETENTION_DAYS 180. TLS mode может быть require; тестовый log level — warn.
Общий OIDC SSO
Стабильный идентификатор пользователя находится в claim sub.
Групповая claim по умолчанию — groups.
OIDC_GROUP_CLAIM и OIDC_SYNC_GROUPS управляют синхронизацией групп.
OIDC_CALLBACK_URL, OIDC_ALLOWED_EMAIL_DOMAINS и OIDC_ADMIN_GROUPS настраивают callback, домены и административные группы.
OIDC_ISSUER_URL с <issuer>/.well-known/openid-configuration, OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_DISPLAY_NAME Single Sign-On, OIDC_SCOPES openid profile email, callback, domains, groups. Требует issuer/ID/secret. Header Origin должен совпадать.
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. Одноразовый ticket и Origin.
OAuth
GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET, GITHUB_CALLBACK_URL, HUGGINGFACE_CLIENT_ID, HUGGINGFACE_CLIENT_SECRET, HUGGINGFACE_CALLBACK_URL; fallback BASE_URL.
Ollama
OLLAMA_BASE_URL http://localhost:11434, OLLAMA_TIMEOUT 300000, OLLAMA_LONG_OPERATION_TIMEOUT 900000, OLLAMA_MAX_CONTEXT 32768.
Веб-поиск
SEARXNG_URL задаёт endpoint; admin включает отдельно.
Libre Claw
LIBRE_CLAW_BASE_URL http://127.0.0.1:8766, LIBRE_CLAW_TIMEOUT_MS 30000.
Runtime Work
Домашний каталог Codex по умолчанию — ~/.codex.
Образ по умолчанию — node:22.22-bookworm@sha256:2d178f2785b96dfbf62a416ca2e40f50e30150b4ff3320d706f0d96e90600eb3, а сеть и namespace — libre-webui-work и libre-webui-work.
По умолчанию команда и backend имеют значения docker и docker.
В team обязательны AGENT_CLI_MODELS_ENABLED=false и CODEX_OAUTH_MODELS_ENABLED=false.
Тайм-аут команды по умолчанию равен 120000; несколько лимитов по умолчанию имеют значения 2, 2 и 2, а верхняя граница пула — 100. Остальные стандартные значения включают 256, 2g, 3, 4173, 48, 500, 50000, 5Gi, 6080 и 6081. В нативном Docker Engine развёртывания Compose обязаны задать WORK_PREVIEW_BIND на достижимый непубличный интерфейс моста; у WORK_DOCKER_PUBLISHED_HOST значение по умолчанию в приложении совпадает с WORK_PREVIEW_BIND, а в Compose это host.docker.internal.
Все переменные Work из исходной таблицы сохранены: 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.
Host roots разделены :; режимы могут быть admins, admins, admins, all-users, all-users, all-users, all-users, all-users. Backend может быть kubernetes, Codex читает auth.json. Agent CLI/Codex только solo; team требует false. Папки в /workspace, блокируются .ssh, .gnupg, .aws, .config. claude, codex admin-only.
Сеть WORK_NETWORK_NAME, DNS WORK_RUNTIME_DNS, Kubernetes work.networkPolicy.blockedEgressCidrs. Terminal: WORK_DOCKER_SOCKET, DOCKER_HOST (unix://, tcp://, docker-compose.socket-proxy.yml), /var/run/docker.sock; ssh:// и DOCKER_TLS_VERIFY блокируют terminal. Helm передаёт work.env. Tool budget max(128, WORK_MAX_AGENT_ROUNDS × 8), финал needs_input, output около 20 000.
Compose: DOCKER_GID 0, DOCKER_SOCKET /var/run/docker.sock, team docker-compose.team.work.yml, Helm work.enabled=true; WEBUI_BIND_ADDRESS 127.0.0.1, WEBUI_PORT 8080.
Обнаружение моделей поставщиков
PLUGIN_MODEL_DISCOVERY_TTL_MS 21600000, PLUGIN_MODEL_DISCOVERY_RETRY_MS 600000, PLUGIN_MODEL_DISCOVERY_REFRESH_DEADLINE_MS 3000.
Ключи поставщиков
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.
Environment keys только trusted manifest; custom требует user key. PLUGINS_DIR относительный от backend/source или caller/package; также читается backend/plugins, переносите в $DATA_DIR/plugins, без symlink.
Frontend
VITE_API_BASE_URL, 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 абсолютный ws:/wss: без credentials/query/fragment; Electron file: fallback ws://localhost:3001.
Обслуживающие скрипты
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
Производственный пример
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