跳到主要内容

环境变量

本页列出当前 Libre WebUI 后端、前端和维护脚本读取的、面向操作员的受支持环境变量。有意省略仅供内部测试的探针。

后端服务器

变量默认值用途
NODE_ENVdevelopment运行模式
PORT开发环境 3001,生产环境 8080后端 HTTP 端口
TRUST_PROXY未设置(Helm 中为 0用于推导客户端地址的确切可信反向代理跳数
CORS_ORIGIN本地开发源允许的浏览器源,逗号分隔
SERVE_FRONTEND未设置true 时由后端提供构建后的前端
DOCKER_ENV未设置true 时启用 Docker 专用行为
DATA_DIRbackend/data;打包 CLI 中为 ~/.libre-webui持久数据目录
PLATFORM_PREFLIGHT_TMP_DIRbackend/temp/preflight;打包 CLI 使用用户缓存私有 DB/WAL 启动检查副本的临时空间;容量应覆盖数据库和 WAL
PLUGIN_UPLOAD_TEMP_DIR操作系统临时目录下的 libre-webui-plugin-uploads正在上传插件的临时空间
PLUGINS_DIR$DATA_DIR/plugins已安装/自定义插件的可写目录
BASE_URLhttp://localhost:3001OAuth 回调默认使用的基础 URL
LOG_LEVELinfo(测试中为 warn后端日志级别
LOG_FORMATtextjson 切换为带时间戳、关联 ID 和脱敏的单行结构化日志
OTEL_EXPORTER_OTLP_ENDPOINT未设置可选 OTLP/HTTP JSON 遥测导出;未设置时遥测不离开进程
OTEL_EXPORTER_OTLP_HEADERS未设置发往 OTLP 收集器的逗号分隔 key=value 标头(例如身份验证)
OTEL_SERVICE_NAMElibre-webui导出遥测中的 service.name 资源属性
WEBUI_HOST环回;Docker 中为 0.0.0.0HTTP 监听地址
OPEN_BROWSER提供前端时为 true设为 false 禁止自动打开浏览器
FULL_DOCUMENT_CONTEXT_MAX_TOKENS32000每聊天完整文档上下文模式令牌保护(1000-2000000)
GALLERY_RETENTION_DAYS未设置(永久保留)通过调度器扫描删除早于此天数的媒体库内容
RECOVERY_DRILL_INTERVAL_HOURS未设置(演练关闭)每 N 小时自动运行已验证恢复演练(solo 配置)
RECOVERY_DRILL_HISTORY60保留的恢复演练历史记录数

源码启动会将相对 DATA_DIRPLUGINS_DIRPLATFORM_PREFLIGHT_TMP_DIR 锚定到后端目录,不受 shell 当前目录影响。未设置 DATA_DIR 或使用新源码示例 DATA_DIR=./data 时,根目录和后端工作区命令都使用 backend/data。为兼容性,已有 DATA_DIR=./backend/data 配置继续选择 backend/backend/data;只能在停止服务、主动备份和迁移时更改。未设置的源码配置在 backend/backend/data 是唯一已有持久存储时也继续使用它。若两个位置都有状态且未选择路径,启动会安全失败,而不会猜测、复制或合并。

npx、全局 npm 和交互式 Homebrew 启动器则将数据保存在 ~/.libre-webui。显式相对 DATA_DIR 从调用者工作目录解析,并在后端启动前转为绝对路径。显式相对 PLUGINS_DIR 采用同一规则;未设置时,可写插件仍在 $DATA_DIR/plugins。检查临时空间默认使用数据目录外的用户可写缓存:macOS 为 ~/Library/Caches/libre-webui,Windows 为 %LOCALAPPDATA%\libre-webui,其他系统为 ${XDG_CACHE_HOME:-~/.cache}/libre-webui。Homebrew 服务固定同一主目录数据路径,并使用 Homebrew 的 var/libre-webui/preflight。缓存无法容纳数据库和 WAL 时应显式设置 PLATFORM_PREFLIGHT_TMP_DIR。内置 Docker 和 Helm 部署使用独立挂载支持的绝对路径 /app/backend/data/app/backend/temp/preflight

平台基础

默认 solo 配置使用 SQLite、本地加密 Blob、加密嵌入向量、本地协调和内置持久 Worker。team 配置使用 PostgreSQL、私有 S3 兼容 Blob、PGVector、Redis 和外部 Worker。团队配置安全失败:必须同时选择所有共享依赖。

变量默认值用途
LIBRE_PLATFORM_MODEsolo选择一致的 soloteam 配置
DATABASE_BACKENDsqlite选择 sqlitepostgres
DATABASE_URL未设置PostgreSQL 连接 URL,使用 postgres 时必需
DATABASE_SSL_MODEverify-fullPostgreSQL TLS 策略:disablerequire 或验证主机名的 verify-full
POSTGRES_MIGRATION_MODEapply在 Leader 锁下运行兼容迁移,或使用 validate 只读检查架构
POSTGRES_POOL_MAX10每个应用或 Worker 进程的 PostgreSQL 最大连接数(1-100)
POSTGRES_CONNECT_TIMEOUT_MS5000PostgreSQL 连接超时(1-60000 ms)
POSTGRES_IDLE_TIMEOUT_MS30000PostgreSQL 空闲连接超时(1-600000 ms)
POSTGRES_STATEMENT_TIMEOUT_MS30000PostgreSQL 语句超时(1-600000 ms)
POSTGRES_MIGRATION_LOCK_TIMEOUT_MS60000等待迁移 Leader 锁的时间(1-600000 ms)
BLOB_STORE_BACKENDlocal选择加密 local 存储或私有 s3
VECTOR_STORE_BACKENDSQLite 使用 embedded选择加密 embedded 向量或 pgvector
COORDINATION_BACKENDsolo 为 local;team 为 redis选择进程本地或 Redis 协调
REDIS_URL未设置redis:rediss: URL,Redis 协调时必需
REDIS_KEY_PREFIXlibreLibre 协调键的 1–64 字符命名空间
REDIS_CONNECT_TIMEOUT_MS5000初始 Redis 连接超时,上限 60 秒
JOB_WORKER_MODEsolo 为 embedded;team 为 external在应用或独立共享 Worker 中运行处理程序
RESOURCE_LEASE_TTL_MS30000持久作业资源所有权协调租约 TTL(5000-300000;超出范围启动失败)
JOB_WORKER_CONCURRENCY4单个 Worker 可同时运行的持久作业数(1-32)
CHAT_STREAM_EVENT_RETENTION_HOURS24聊天流片段事件在每小时扫描删除前保留的小时数
PLATFORM_EVENT_RETENTION_DAYS30持久事件在每小时扫描删除前保留的天数
PLATFORM_JOB_RETENTION_DAYS30已完成非生命周期作业在每小时扫描删除前保留的天数
LIBRE_SKIP_STARTUP_INTEGRITY_SCAN未设置1 跳过下次启动的深度旧密文扫描(应急选项;通常按架构代缓存)
STORAGE_ENCRYPTION_KEYS未设置机密 JSON 密钥映射;目前必须含与 ENCRYPTION_KEY 匹配的 legacy
STORAGE_ENCRYPTION_ACTIVE_KEY_ID未设置新本地 Blob 和嵌入向量写入使用的密钥 ID
BLOB_QUOTA_BYTES_PER_USER10737418240每位所有者持久明文 Blob 字节上限(正安全整数)
BLOB_QUOTA_RESERVATION_TTL_MS3600000废弃流式配额预留的寿命(至少 60000 ms)
S3_BUCKET未设置私有 S3 兼容 Bucket,使用 s3 时必需
S3_REGION未设置S3 区域,使用 s3 时必需
S3_ENDPOINT提供商默认值MinIO 或其他兼容服务的可选绝对 HTTP(S) 端点
S3_ACCESS_KEY_IDSDK 凭据链可选显式 S3 访问密钥
S3_SECRET_ACCESS_KEYSDK 凭据链设置显式访问密钥时必需
S3_SESSION_TOKEN未设置与显式 S3 凭据一起使用的可选令牌
S3_FORCE_PATH_STYLEfalse要求路径样式寻址的服务设为 true
S3_BLOB_PREFIXlibre/blobsLibre 所有的不透明 Bucket 键前缀

没有版本化存储密钥映射时,存储适配器使用现有 ENCRYPTION_KEY,密钥 ID 为 legacy;若也不存在,则读取现有 ${DATA_DIR}/.encryption_key,不生成或修改。显式配置必须与持久文件一致。引入版本化映射且已有旧密钥时,应在所有对象和向量重写或重封并验证前,以确切 ID legacy 保留。冲突、不安全文件权限、符号链接和已配置密钥缺失都会安全失败。

Redis 用于协调,不是规范持久存储。仅选择 Redis 不会使 SQLite、本地文件或其他进程所有状态可安全跨副本。在团队模式中,HTTP 速率限制、Chat/WebSocket 连接、STT/TTS/音频提供商工作、存档导入和 Work 终端使用 Redis 支持的共享准入。容量应用于所有副本,而不是每进程一次。准入和可续许可失败会返回 503 或中止正在进行的操作;Libre 绝不回退到独立本地计数器。参阅平台基础

内置团队 Compose 配置和 Helm Chart 将以上所有团队平台选择器和调节值同时转发给应用和外部 Worker。在 Helm 中,非机密选择器位于 env 下;连接或密钥材料使用 secrets.redisUrlsecrets.databaseUrlsecrets.storageEncryptionKeys。PostgreSQL 连接池限制按进程应用:数据库至少需预留 (replicaCount + worker.replicaCount) * POSTGRES_POOL_MAX 个连接,以及运营和迁移余量。远程或托管 PostgreSQL 保持 DATABASE_SSL_MODE=verify-full。只有内置团队 Compose 配置选择 disable,因为其监听器隔离在私有项目网络。团队 Helm 还要求稳定 secrets.jwtSecret 并把同一 Secret 键挂载到所有应用和 Worker Pod;省略会导致各进程生成本地签名材料。S3 接收不透明键和密文;Bucket URL 与提供商 URL 不存入应用元数据。

集成的 solo 和 team 存档在签名加密保护配置中保留 PostgreSQL 连接池与超时、Redis 连接超时、两个 Blob 配额设置、平台选择器和 S3 寻址设置。干净恢复可发布重建对应部署所需的运营值,而无需把它们放入明文存档元数据。

内置团队 Compose 和 Helm 应用/外部 Worker 对接收相同解析后的 OLLAMA_BASE_URLOLLAMA_TIMEOUTOLLAMA_LONG_OPERATION_TIMEOUTOLLAMA_MAX_CONTEXT。文档嵌入、持久聊天和 Work 运行的提供商调用在 Worker 中执行,因此进程间不能不同。两个服务器入口点在创建本地状态或连接共享状态前,将三个数值解析为完整的十进制正整数。300000ms 等部分值、指数/十六进制表示、超范围值,或长操作超时低于标准超时都会使启动失败。

Helm 将 TRUST_PROXY 限制为 016 的确切整数跳数,并只转发到 HTTP 应用 Pod。直连流量保持默认 0。为 Ingress/负载均衡链设置确切固定数,绝不使用运行时无限制 true。错误计数会把客户端归到代理地址用于共享速率限制,或信任客户端可提供的地址。

PostgreSQL 架构兼容要求完全相同版本。Helm 应用和 Worker 使用 Recreate;团队升级前排空并终止所有旧 Pod,再由一个新进程在 advisory leader 锁下迁移。不要运行混合二进制版本,也不要宣称零停机架构发布。回滚意味着在启动匹配旧二进制前,将升级前已验证团队存档恢复到干净 PostgreSQL/S3 目标。

活跃团队应用需要 worker.replicaCount >= 1;Helm 拒绝没有持久 Worker 的实时应用,而不会等到就绪失败。完整暂停时把应用和 Worker 数量都设为零。应用为零、Worker 为正是主动的仅 Worker 排空或恢复模式,会继续处理队列作业但不提供 Web 流量。

私有备份辅助程序

这些变量配置 deploy/private/libre-webui-backup,由维护脚本读取,不由应用进程读取:

变量默认值用途
LIBRE_WEBUI_STACK_DIR/opt/libre-webui包含私有 Compose 文件的目录
LIBRE_WEBUI_BACKUP_DIR/var/backups/libre-webui备份集和锁文件的受保护目录
LIBRE_WEBUI_BACKUP_RETENTION_DAYS14完成备份集删除前保留天数
LIBRE_WEBUI_CONTAINER_NAMElibre-webui要检查的已部署应用容器
LIBRE_WEBUI_BACKUP_KEY_DIR/etc/libre-webui/backup-keys私有存档加密和签名密钥目录
LIBRE_WEBUI_RESTORE_IMAGE恢复时必需已审核的不可变 Libre 映像 ID 或摘要
LIBRE_WEBUI_RESTORE_CONFIG_DIR/etc/libre-webui/restored 下每卷路径恢复配置的新目录

systemd 单元从可选、root 所有的 /etc/libre-webui/backup.env 加载备份覆盖。设为模式 0600。堆栈目录、保留期、容器名和备份密钥目录可直接在其中设置。单元文件系统沙盒只允许在默认备份目录下写入。自定义 LIBRE_WEBUI_BACKUP_DIR 还要求在服务 ReadWritePaths= drop-in 中加入确切的预创建目录;参阅私有远程部署

身份验证与安全

变量默认值用途
ENABLE_SIGNUPfalse首位本地管理员后允许注册
JWT_SECRET开发环境生成/回退值JWT 签名密钥;生产环境显式设置
JWT_EXPIRES_IN7d会话令牌寿命
ENCRYPTION_KEY自动生成加密值使用的 64 字符十六进制密钥
DEBUG_ENCRYPTION未设置设置时记录加密调试输出
TURNSTILE_SITE_KEY未设置登录和注册的 Cloudflare Turnstile 站点密钥
TURNSTILE_SECRET_KEY未设置后端验证用 Cloudflare Turnstile 密钥
TURNSTILE_EXPECTED_HOSTNAMEBASE_URL 的主机名Cloudflare 验证响应中要求的主机名
MFA_REQUIRED_MODE未设置(管理员开关,optional将双重验证策略固定为 optionalrequired
WEBAUTHN_RP_ID请求主机名多主机名后通行密钥的固定依赖方 ID
VAPID_PUBLIC_KEY生成并加密存储固定 Web Push VAPID 公钥(Base64URL P-256 点)
VAPID_PRIVATE_KEY生成并加密存储固定 Web Push VAPID 私钥(Base64URL 标量)
VAPID_SUBJECTmailto:admin@localhost已签名 Web Push 授权中的联系声明

只有两个 Turnstile 密钥同时存在时才启用 Turnstile。

ENABLE_SIGNUP=false 仍允许在空数据库中创建首位本地管理员,之后阻止额外本地和 OAuth 账户。首次启动前,请使用外部身份边界保护远程可访问的引导路由。

每个已签发 JWT 都绑定服务器端会话(sid 声明),因此退出或从设置 → 会话撤销会立即在所有副本使令牌失效,并关闭活跃 WebSocket。安全审计保留期可配置:

变量默认值用途
AUDIT_RETENTION_DAYS180安全审计事件日志行的保留天数

通用 OIDC 单点登录

任何具有发现文档的 OpenID Connect 提供商都可用于登录。流程使用 PKCE(S256)、CSRF 状态,以及在签名已验证 ID 令牌中验证的 nonce。身份通过稳定 sub 声明关联。

变量默认值用途
OIDC_ISSUER_URL未设置发行方基础 URL;从 <issuer>/.well-known/openid-configuration 获取发现
OIDC_CLIENT_ID未设置在提供商注册的 OAuth 客户端 ID
OIDC_CLIENT_SECRET未设置OAuth 客户端密钥
OIDC_DISPLAY_NAMESingle Sign-On登录按钮显示标签
OIDC_SCOPESopenid profile email请求范围
OIDC_CALLBACK_URLBASE_URL + OIDC 回调路由在提供商注册的重定向 URI
OIDC_ALLOWED_EMAIL_DOMAINS未设置逗号列表;要求邮箱已验证且属于其中一个域
OIDC_GROUP_CLAIMgroups保存组名的 ID 令牌声明
OIDC_ADMIN_GROUPS未设置逗号列表;每次登录时管理员角色遵循声明成员身份
OIDC_SYNC_GROUPSfalsetrue 在每次登录时将 Libre 组成员与组声明协调

只有发行方 URL、客户端 ID 和客户端密钥全部存在时才启用 OIDC。已被未关联本地账户使用的邮箱会被拒绝,而不会悄然合并;账户创建仍遵守 ENABLE_SIGNUP

可以调节 Chat WebSocket 准入,而不削弱身份验证:

变量默认值用途
CHAT_WS_MAX_PAYLOAD_BYTES10 MiB接受的 WebSocket 消息最大大小
CHAT_WS_MAX_MESSAGES_PER_MINUTE120每连接每分钟消息上限
CHAT_WS_MAX_ACTIVE_GENERATIONS_PER_USER4每账户允许的提供商生成数
CHAT_WS_MAX_CONNECTIONS_PER_USER5每账户并发已验证套接字数
WEBSOCKET_TICKET_TTL_MS30000一次性 Chat/Work 票据寿命,上限 60 秒

浏览器用普通 Authorization 标头换取不透明票据,只把短期值放入 WebSocket 升级 URL。票据一次性、绑定协议和会话,只存储哈希,从而避免持久会话令牌进入反向代理请求目标日志。配置 CORS_ORIGINBASE_URL 时,带 Origin 的浏览器升级必须匹配已配置源。远程部署至少设置一个;都未设置时,为兼容本地开发而宽松。Electron 和非浏览器客户端有意支持无源升级,但仍需有效一次性票据,并接受相同账户、Work 访问和任务检查。将票据视为身份验证边界,并通过 TLS、防火墙和反向代理限制非浏览器访问。

OAuth

变量用途
GITHUB_CLIENT_IDGitHub OAuth 客户端 ID
GITHUB_CLIENT_SECRETGitHub OAuth 客户端密钥
GITHUB_CALLBACK_URLGitHub 回调 URL 覆盖
HUGGINGFACE_CLIENT_IDHugging Face OAuth 客户端 ID
HUGGINGFACE_CLIENT_SECRETHugging Face OAuth 客户端密钥
HUGGINGFACE_CALLBACK_URLHugging Face 回调 URL 覆盖

未设置回调 URL 时,Libre WebUI 从 BASE_URL 构建默认值。

Ollama

变量默认值用途
OLLAMA_BASE_URLhttp://localhost:11434Ollama API 基础 URL
OLLAMA_TIMEOUT300000标准 Ollama 请求超时(1,000-3,600,000 ms)
OLLAMA_LONG_OPERATION_TIMEOUT900000长操作超时(1,000-3,600,000 ms,且不短于 OLLAMA_TIMEOUT
OLLAMA_MAX_CONTEXT32768自动采用的最大模型上下文(128-2,097,152 个令牌)

Web 搜索

变量默认值用途
SEARXNG_URL未设置Web 搜索设置的默认 SearXNG 端点;管理员仍需在设置 > 搜索中启用

Libre Claw

变量默认值用途
LIBRE_CLAW_BASE_URLhttp://127.0.0.1:8766可选 Libre Claw 守护进程 URL
LIBRE_CLAW_TIMEOUT_MS30000Libre Claw HTTP 请求超时

Work 运行时

这些变量配置运行 Libre WebUI 后端的计算机或 Kubernetes 集群上的 Work 执行。Docker 是默认运行时;设置 work.enabled=true 时 Helm Chart 选择 Kubernetes。

变量默认值用途
WORK_RUNTIME_IMAGEnode:22.22-bookworm@sha256:2d178f2785b96dfbf62a416ca2e40f50e30150b4ff3320d706f0d96e90600eb3Work 沙盒使用的固定映像
WORK_DOCKER_COMMANDdocker进程可用的 Docker 后端 CLI 可执行文件
WORK_COMMAND_TIMEOUT_MS120000默认超时;工具可请求最多 600000 ms
WORK_MAX_OUTPUT_CHARS50000捕获 stdout/stderr 的上限,分别应用于每个流
WORK_MAX_AGENT_ROUNDS48单次运行中与提供商无关的模型/工具轮次预算
WORK_STATUS_BLURB_MODEL1设为 0 可跳过运行后为代理侧边栏状态行发出的模型请求
WORK_MEMORY_LIMIT2g每个 Work 容器的内存限制
WORK_CPU_LIMIT2每个 Work 容器的 CPU 限制
WORK_PIDS_LIMIT256每个 Work 容器的进程限制
WORK_PREVIEW_PORT4173任务容器中预览服务器必须使用的端口
WORK_PREVIEW_BIND127.0.0.1发布任务预览端口的宿主机接口;原生 Docker Engine 的 Compose 部署必须使用可访问的非公开网桥接口
WORK_DOCKER_PUBLISHED_HOST应用默认值:与 WORK_PREVIEW_BIND 相同;Compose 默认值:host.docker.internal后端访问 Docker 发布预览、屏幕和音频端口使用的主机/IP
WORK_COMPUTER_SCREEN_PORT6080启用 GUI 沙盒中 Work Computer 屏幕桥接(websockify)的容器端口
WORK_COMPUTER_AUDIO_PORT6081启用 GUI 沙盒中音频桥接(websockify → PulseAudio monitor)的容器端口
WORK_MAX_ACTIVE_RUNTIMES_GLOBAL3整个实例同时运行的运行时支持任务数
WORK_MAX_ACTIVE_RUNTIMES_PER_USER2单用户同时运行的运行时支持任务数
WORK_MAX_TASKS_GLOBAL500整个实例最大持久 Work 任务数
WORK_MAX_TASKS_PER_USER100单管理员最大持久 Work 任务数
WORK_NETWORK_NAMElibre-webui-work网络任务使用的受管沙盒桥接网络
WORK_RUN_LEASE_WAIT_MS60000运行等待任务共享运行时租约后报告副本冲突的时间(团队模式)
WORK_RUNTIME_DNS未设置强制应用于网络任务的解析器 IP,逗号分隔
WORK_DOCKER_SOCKETDOCKER_HOSTunix://tcp:// 时使用它,否则 /var/run/docker.sock终端和诊断使用的 Docker Engine 端点
WORK_TERMINAL_MAX_SESSIONS_PER_TASK2单任务同时附加的浏览器终端数
WORK_TERMINAL_IDLE_TIMEOUT_MS900000终端会话因空闲而关闭前的超时
WORK_RUNTIME_IDLE_TIMEOUT_MS0(禁用)沙盒无活动达到此时间后停止(包括预览)
WORK_HOST_WORKSPACES_ENABLEDfalse允许任务使用宿主机文件夹代替卷
WORK_HOST_WORKSPACE_ROOTS服务器用户主目录宿主机工作区必须位于其中的 : 分隔根目录
WORK_RUNTIME_BACKENDdocker沙盒后端:dockerkubernetes
WORK_K8S_NAMESPACElibre-webui-work包含 Kubernetes 沙盒 Pod 和 PVC 的命名空间
WORK_K8S_STORAGE_CLASS集群默认值工作区 PVC 使用的 StorageClass
WORK_K8S_WORKSPACE_SIZE5Gi每任务工作区 PVC 大小(真实磁盘配额)
WORK_K8S_POD_READY_TIMEOUT_MS900000等待沙盒 Pod 到达 Running(包括拉取映像)
WORK_K8S_POD_GONE_TIMEOUT_MS60000等待已删除沙盒 Pod 消失
AGENT_CLI_MODELS_ENABLED未设置(管理员开关,关闭)固定 Agents 功能开关;未设置时由用户管理中的管理员开关决定,默认关闭
TOOLS_ACCESS_MODE未设置(管理员开关,仅管理员)将聊天工具固定为 adminsall-users,并锁定用户管理开关
STT_ACCESS_MODE未设置(管理员开关,所有用户)将语音转文字固定为 adminsall-users 并锁定开关
TTS_ACCESS_MODE未设置(管理员开关,所有用户)将文字转语音固定为 adminsall-users 并锁定开关
VOICE_MODE_ACCESS_MODE未设置(管理员开关,所有用户)将免手持语音模式固定为 adminsall-users 并锁定开关
VOICE_CLONING_ACCESS_MODE未设置(管理员开关,所有用户)将声音克隆固定为 adminsall-users 并锁定开关
TOOLS_PRIVATE_NETWORK_ALLOWLIST未设置工具服务器和 Webhook 可解析到私有地址的确切主机名(逗号分隔),连接会固定
AGENT_CLI_TIMEOUT_MS600000Agent CLI 在被终止前的运行时间
CODEX_OAUTH_MODELS_ENABLEDtrue向管理员提供 Codex(ChatGPT)提供商
CODEX_HOME~/.codex读取 Codex CLI 登录文件(auth.json)的位置

Agent CLI 二进制和 Codex OAuth 凭据是节点本地的。它们只在单进程 solo 中受支持,此时发现和执行看到相同文件系统与环境。团队模式在外部 Worker 中执行持久聊天作业,因此要求 AGENT_CLI_MODELS_ENABLED=falseCODEX_OAUTH_MODELS_ENABLED=false;启动拒绝其他值,而不会公布可能只存在于一个应用副本的提供商。请使用 Ollama,或凭据和路由存储在共享 PostgreSQL 或以相同方式转发给每个应用与 Worker 的提供商插件。

在 Docker 后端中,宿主机工作区把真实目录绑定挂载到 /workspace,因此任务可直接读写文件,而不使用自身 Docker 卷。Kubernetes 拒绝宿主机文件夹工作区。这有意降低 Docker 沙盒强度:除非确实需要,否则关闭 WORK_HOST_WORKSPACES_ENABLED,并尽量缩小 WORK_HOST_WORKSPACE_ROOTS。请求路径在对照根目录检查前会解析符号链接;.ssh.gnupg.aws.config 等文件夹直接拒绝。

Agent CLI 模型把服务器上已安装的编码代理(claudecodex)作为可选聊天模型,因此订阅代理无需 API 密钥也能回答。只有管理员可见;CLI 以 Libre WebUI 服务器用户运行,并继承该用户的代理凭据——应将其视为向这些代理授予 shell 访问。

在 Docker 上,网络 Work 任务连接到受管 WORK_NETWORK_NAME 桥接网络,该网络禁用容器间通信,防止一个沙盒访问另一个沙盒或部署自身容器。WORK_RUNTIME_DNS 是受支持的 Docker 出站策略挂钩:指向过滤解析器以应用基于名称的允许/拒绝列表。非 IPv4/IPv6 条目会被拒绝并记录。DNS 过滤不限制直接 IP 出站;需要时添加宿主机防火墙规则。Kubernetes 后端改用 Chart 默认拒绝 NetworkPolicy 和 work.networkPolicy.blockedEgressCidrs

Docker 上的交互终端和系统诊断直接访问 Docker Engine API。若设置则遵循 WORK_DOCKER_SOCKET,否则遵循 DOCKER_HOST——unix:// 套接字或套接字代理等纯 HTTP tcp:// 端点(参阅 docker-compose.socket-proxy.yml)——否则使用 /var/run/docker.sock。此客户端不支持的 DOCKER_HOSTssh://,或设置 DOCKER_TLS_VERIFYtcp://)会报告终端和 Docker 诊断不可用;Work 其余部分继续通过可自行理解这些端点的 Docker CLI 运行。Kubernetes 上终端使用 Pod exec,不使用 Docker 端点。

Work 在后端启动时读取这些值。预览端口位于任务容器内部;Libre WebUI 将其发布到动态分配的环回端口,而不直接暴露在所有宿主机接口。

运行时映像应固定到已审核版本或摘要。提高并发或资源限制会增加一个或多个自主运行可消耗的容量。WORK_MAX_AGENT_ROUNDS 同等应用于 Ollama 和插件运行,没有更低的插件专属限制。工具调用安全预算为 max(128, WORK_MAX_AGENT_ROUNDS × 8)。运行耗尽轮次预算时,Work 请求模型进行最后一次无工具交接,并以终止状态 needs_input 结束,而不是返回原始轮次限制错误或声称成功。后续运行继续使用同一持久工作区。持久工具输出另有约 20,000 个源字符加截断标记的限制。

这些变量调节已可访问的 Work 运行时。仓库单实例 Compose 部署默认启用:映像包含 Docker CLI,Compose 文件挂载宿主机 Docker 套接字。两个 Compose 级变量控制连接:

变量默认值用途
DOCKER_GID0宿主机 Docker 套接字组 ID,添加到容器用户
DOCKER_SOCKET/var/run/docker.sock要挂载的宿主机 Docker 套接字路径

DOCKER_GID 必须是套接字 在容器内看到的 组;macOS 宿主机报告的值不同。团队 Compose 基础不挂载套接字,在添加 docker-compose.team.work.yml 前,基于 Docker 的 Work 不可用。该生产覆盖向应用和 Worker 提供相同内部过滤代理端点,绝不挂载套接字或套接字组。代理只允许运行时使用的 Docker API 部分,但创建容器仍是 Docker 宿主机控制凭据;更强边界请使用专用或无 root Work 守护进程。Helm Chart 绝不挂载节点运行时套接字;通过 work.enabled=true 启用原生 Pod/PVC Work 后端。

solo 配置因使用 SQLite、本地文件和进程本地协调,必须保持零或一个应用副本。Helm Chart 接受零作为主动暂停,拒绝更多 solo 副本或 solo 自动扩缩。完整 team 配置可使用多个应用副本和外部 Worker,因为 PostgreSQL、S3、PGVector 和 Redis 保存共享状态。两种配置中的 Work 沙盒 Pod 独立扩缩;团队模式外部 Worker 接收与应用 Pod 相同的 Kubernetes 运行时映像、StorageClass 和 work.env 限制。

仓库 Compose 文件还接受 WEBUI_BIND_ADDRESS(默认 127.0.0.1)和 WEBUI_PORT(默认 8080)。除非可信 LAN 或宿主机反向代理需要访问端口,否则保持环回默认值。

提供商模型发现

提供商模型目录缺失或过期时会自动重新发现,因此重新加载会反映当前提供的模型。以下变量调节周期:

变量默认值用途
PLUGIN_MODEL_DISCOVERY_TTL_MS21600000(6 h)读取插件列表时刷新存储目录的年龄
PLUGIN_MODEL_DISCOVERY_RETRY_MS600000(10 min)尝试之间的最短间隔,避免频繁探测失败提供商
PLUGIN_MODEL_DISCOVERY_REFRESH_DEADLINE_MS3000插件列表响应等待刷新的最长时间

超出截止时间的刷新仍会完成,并在下一次请求中提供。显式 刷新模型 始终联系提供商并忽略间隔。

提供商插件密钥

提供商插件可把环境密钥用作部署级默认值:

变量提供商
OPENAI_API_KEYOpenAI 和 OpenAI TTS
ANTHROPIC_API_KEYAnthropic
GROQ_API_KEYGroq
GEMINI_API_KEYGoogle Gemini
MISTRAL_API_KEYMistral
OPENROUTER_API_KEYOpenRouter
KIMI_API_KEYMoonshot AI 的 Kimi Code
GITHUB_API_KEYGitHub Models
HUGGINGFACE_API_KEY已配置的 Hugging Face API
ELEVENLABS_API_KEYElevenLabs TTS
COMFYUI_API_KEY需要 API 密钥的 ComfyUI 部署

用户也可在界面保存提供商凭据。环境密钥只用于未遮蔽内置定义的路由与身份验证投影。导入定义、复用内置 ID 的可写定义和管理员保存的自定义路由都需要该账户存储凭据。Libre WebUI 不会向这些路由附加环境密钥,也不会通过发现和可用性检查公开。信任来自每个发布清单的编译哈希,因此旧版和内置插件目录共享路径的容器布局仍受支持,但修改后的清单不会被视为内置。

用户保存的密钥绑定到有效提供商定义、源、身份验证契约和路由值。管理员更改目标后,用户必须重新保存密钥。升级前未绑定密钥只在使用内置路由的完全匹配发布定义上首次使用时接受并绑定。

源码启动时,相对 PLUGINS_DIR 从后端目录解析。打包启动器则在启动后端前把显式相对值转换为调用者绝对路径。为兼容性,Libre 也读取确定的 backend/plugins 目录和历史配置位置。请将这些定义移到 $DATA_DIR/plugins;恢复会把旧路径报告为外部状态,只要自定义定义仍在其中,就阻止仅卷快照。插件目录和 JSON 定义必须是实际普通条目;Libre 不跟随插件符号链接。

前端

变量默认值用途
VITE_API_BASE_URL同源开发代理或生产环境 API前端 API 基础 URL
VITE_WS_BASE_URL从 API URL 推断Chat 和 Work 套接字的绝对 ws:/wss: 基础
VITE_APP_VERSIONVite 配置注入的软件包版本显示的应用版本
VITE_DEMO_MODEfalsetrue 时启用演示模式模拟
VITE_API_TIMEOUT300000前端 API 超时(毫秒)
VITE_BACKEND_URLhttp://localhost:3001某些身份验证辅助组件使用
VITE_DEBUG_VERBOSE未设置开发环境启用详细前端调试日志
VITE_LOG_LEVEL未设置覆盖前端日志级别
ELECTRON_BUILD未设置true 时启用 Electron 专属 Vite 行为

VITE_WS_BASE_URL 覆盖 Chat 和 Work 终端的所有 WebSocket 回退。它可包含反向代理路径前缀,但必须是无凭据、查询或片段的绝对 ws:wss: URL。未设置时,Electron file: 客户端使用 ws://localhost:3001;浏览器客户端依次从 VITE_API_BASE_URL、再到浏览器源推导基础地址。Vite 会将开发环境源代理到 3001 端口的后端。

维护脚本

变量用途
CHANGELOG_AI设为 0 禁用 AI 辅助 Changelog 草稿
CHANGELOG_AI_MODEL生成版本/Changelog 使用的 Ollama 模型
CHANGELOG_AI_TIMEOUT_MSAI Changelog 生成超时(毫秒)

示例:

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

相关文档