配置系统
配置系统
相关源文件
本章引用的主要源码文件:
backend/ee/onyx/background/celery/apps/primary.pybackend/ee/onyx/background/celery/tasks/beat_schedule.pybackend/onyx/background/celery/apps/app_base.pybackend/onyx/background/celery/apps/beat.pybackend/onyx/background/celery/apps/heavy.pybackend/onyx/background/celery/apps/light.pybackend/onyx/background/celery/apps/monitoring.pybackend/onyx/background/celery/apps/primary.pybackend/onyx/background/celery/tasks/beat_schedule.pybackend/onyx/background/celery/tasks/shared/tasks.pybackend/onyx/background/celery/tasks/vespa/tasks.pybackend/onyx/configs/app_configs.pybackend/onyx/configs/constants.pybackend/onyx/document_index/factory.pybackend/onyx/redis/redis_pool.pybackend/scripts/dev_run_background_jobs.pybackend/supervisord.confbackend/tests/external_dependency_unit/redis/test_tenant_redis.py
Onyx 中的配置系统提供了对 200 多个配置参数的集中管理,这些参数控制着所有子系统的应用行为。该系统在启动时读取环境变量,并将其作为 Python 常量暴露给整个代码库,从而在 API 服务器、后台工作进程和模型服务器之间实现一致的配置。
有关部署特定的配置处理,请参阅环境配置。有关多租户模式配置,请参阅多租户架构。
概述
配置系统主要在 backend/onyx/configs/app_configs.py 中实现,该文件定义了应用配置参数。该模块在整个代码库中被导入,并作为运行时配置的唯一真实来源。系统处理以下内容:
- 环境变量解析,包含类型转换和校验
backend/onyx/configs/app_configs.py:48-71 - 可选配置的默认值管理
backend/onyx/configs/app_configs.py:118-120 - 根据其他设置计算得出的派生配置
backend/onyx/configs/app_configs.py:159-163 - 多租户与单租户的行为切换
backend/onyx/background/celery/apps/beat.py:88-112 - 企业版功能的条件配置
backend/onyx/background/celery/tasks/beat_schedule.py:183-185
来源: backend/onyx/configs/app_configs.py:1-174, backend/onyx/background/celery/apps/beat.py:88-112
配置架构
配置系统遵循从环境源通过集中配置模块到消费系统的单向数据流。所有配置值在导入时被实例化。
标题:配置系统架构
来源: backend/onyx/configs/app_configs.py:22-166, backend/onyx/configs/constants.py:7-125
主要配置类别
应用与 Web 配置
| 配置项 | 类型 | 默认值 | 用途 |
|---|---|---|---|
APP_HOST | 字符串 | "0.0.0.0" | API 服务器绑定地址 backend/onyx/configs/app_configs.py:22 |
APP_PORT | 整数 | 8080 | API 服务器端口 backend/onyx/configs/app_configs.py:23 |
APP_API_PREFIX | 字符串 | "" | 所有 API 路由的基础路径前缀 backend/onyx/configs/app_configs.py:27 |
WEB_DOMAIN | 字符串 | "http://localhost:3000" | OAuth 重定向的前端域名 backend/onyx/configs/app_configs.py:118 |
SEND_USER_METADATA_TO_LLM_PROVIDER | 布尔值 | false | 是否向大语言模型(LLM)提供商发送用户 ID backend/onyx/configs/app_configs.py:39-41 |
来源: backend/onyx/configs/app_configs.py:22-118
认证配置
认证系统通过一套全面的配置支持多种后端和身份提供商。
标题:认证配置层级
关键认证配置项:
| 配置项 | 类型 | 默认值 | 用途 |
|---|---|---|---|
AUTH_TYPE | AuthType | BASIC | 主要认证方法 backend/onyx/configs/app_configs.py:126-130 |
AUTH_BACKEND | AuthBackend | REDIS | 会话存储后端 backend/onyx/configs/app_configs.py:157 |
SESSION_EXPIRE_TIME_SECONDS | 整数 | 604800 | 会话生命周期 backend/onyx/configs/app_configs.py:159-163 |
PASSWORD_MIN_LENGTH | 整数 | 8 | 最小密码长度 backend/onyx/configs/app_configs.py:132 |
VALID_EMAIL_DOMAINS | 字符串列表 | [] | 允许注册的邮箱域名 backend/onyx/configs/app_configs.py:168-174 |
来源: backend/onyx/configs/app_configs.py:126-174, backend/onyx/configs/constants.py:34-47
数据库与搜索配置
系统管理 PostgreSQL、Redis、Vespa 和 OpenSearch 的配置。
| 配置项 | 类型 | 默认值 | 用途 |
|---|---|---|---|
CACHE_BACKEND | CacheBackendType | redis | 缓存和锁的后端 backend/onyx/configs/app_configs.py:85-87 |
DISABLE_VECTOR_DB | 布尔值 | false | 完全禁用向量数据库 backend/onyx/configs/app_configs.py:81 |
ENABLE_OPENSEARCH_INDEXING_FOR_ONYX | 布尔值 | false | 启用 OpenSearch 作为索引后端 backend/onyx/background/celery/tasks/beat_schedule.py:11 |
MULTI_TENANT | 布尔值 | false | 启用基于模式的隔离 backend/onyx/background/celery/tasks/beat_schedule.py:20 |
来源: backend/onyx/configs/app_configs.py:81-87, backend/onyx/background/celery/tasks/beat_schedule.py:11-20
任务协调与围栏
配置系统与 Redis 集成,使用"围栏"来防止任务重叠执行,从而实现任务协调。TenantRedis 类会自动为键添加 tenant_id 前缀,以确保多租户环境中的隔离性 backend/onyx/redis/redis_pool.py:65-91。
标题:任务协调配置映射
关键协调常量:
CELERY_VESPA_SYNC_BEAT_LOCK_TIMEOUT:120 秒backend/onyx/configs/constants.py:130CELERY_PRIMARY_WORKER_LOCK_TIMEOUT:120 秒backend/onyx/configs/constants.py:133ACTIVE_FENCES:活动任务锁的注册表backend/onyx/configs/constants.py:163,backend/onyx/background/celery/tasks/vespa/tasks.py:163
来源: backend/onyx/configs/constants.py:130-163, backend/onyx/background/celery/tasks/vespa/tasks.py:92-102, backend/onyx/redis/redis_pool.py:65-91
动态配置存储
虽然 app_configs.py 处理环境变量,但键值存储中的各种键允许进行运行时调整。
KV_SETTINGS_KEY:存储通用 Onyx 设置backend/onyx/configs/constants.py:119KV_REINDEX_KEY:指示索引需要重新索引backend/onyx/configs/constants.py:107KV_ENTERPRISE_SETTINGS_KEY:存储企业版特定配置backend/onyx/configs/constants.py:122KV_KG_CONFIG_KEY:存储知识图谱配置backend/onyx/configs/constants.py:124
来源: backend/onyx/configs/constants.py:106-124
配置加载模式
环境变量读取
配置系统使用一致的模式来读取环境变量:
# backend/onyx/configs/app_configs.py
# 模式:小写字符串转布尔值
SEND_USER_METADATA_TO_LLM_PROVIDER = (
os.environ.get("SEND_USER_METADATA_TO_LLM_PROVIDER", "")
).lower() == "true"
# 模式:带校验和回退的整数
_raw_max_upload_size_mb = int(os.environ.get("MAX_ALLOWED_UPLOAD_SIZE_MB", "250"))
if _raw_max_upload_size_mb < 0:
_raw_max_upload_size_mb = 250
MAX_ALLOWED_UPLOAD_SIZE_MB = _raw_max_upload_size_mb
来源: backend/onyx/configs/app_configs.py:39-57
多租户与单租户
配置通常根据 MULTI_TENANT 标志进行分支。在多租户模式下,使用 DynamicTenantScheduler 动态生成所有活动租户的调度计划 backend/onyx/background/celery/apps/beat.py:27-183。
# backend/onyx/background/celery/apps/primary.py
if MULTI_TENANT:
return # 在多租户模式下跳过单例清理
CLOUD_BEAT_MULTIPLIER_DEFAULT(默认值为 8.0)用于调整任务生成速率,以防止多租户环境中数据库负载激增 backend/onyx/background/celery/tasks/beat_schedule.py:33。
来源: backend/onyx/background/celery/apps/primary.py:132-133, backend/onyx/background/celery/tasks/beat_schedule.py:33, backend/onyx/background/celery/apps/beat.py:27-47