配置系统(中文译文)
原始 DeepWiki 页面:https://deepwiki.com/onyx-dot-app/onyx/8.4-configuration-system
翻译时间:2026-05-27T08:44:52.385Z
翻译模型:deepseek-chat
原文字符数:12835
项目:Onyx (onyx)
---
配置系统
相关源文件
以下文件被用作生成此 Wiki 页面的上下文:
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
配置架构
配置系统遵循从环境源通过集中配置模块到消费系统的单向数据流。所有配置值在导入时被实例化。
标题:配置系统架构
graph TB
subgraph "配置模块"
AppConfigs["app_configs.py<br/>主要配置"]
Constants["constants.py<br/>枚举与常量定义"]
end
subgraph "环境源"
EnvVars["环境变量<br/>操作系统环境"]
DockerEnv[".env 文件<br/>Docker Compose"]
K8sSecrets["Kubernetes Secrets<br/>ConfigMaps"]
end
subgraph "配置类别"
AppCfg["APP_HOST, APP_PORT<br/>APP_API_PREFIX"]
AuthCfg["AUTH_TYPE, OAUTH_*<br/>PASSWORD_*, JWT_*"]
DBCfg["POSTGRES_*, REDIS_*<br/>VESPA_*, CELERY_*"]
ConnectorCfg["SHOW_EXTRA_CONNECTORS<br/>REQUEST_TIMEOUT_SECONDS"]
IndexCfg["DISABLE_VECTOR_DB<br/>QUERY_EMBEDDING_CACHE_TTL_S"]
EECfg["ENTERPRISE_EDITION_ENABLED<br/>ENCRYPTION_KEY_SECRET"]
end
subgraph "消费系统"
APIServer["FastAPI 应用<br/>main.py"]
Workers["Celery 工作进程<br/>后台任务"]
ModelServer["模型服务器<br/>嵌入向量"]
Auth["认证逻辑"]
end
EnvVars --> AppConfigs
DockerEnv --> AppConfigs
K8sSecrets --> AppConfigs
AppConfigs --> AppCfg
AppConfigs --> AuthCfg
AppConfigs --> DBCfg
AppConfigs --> ConnectorCfg
AppConfigs --> IndexCfg
AppConfigs --> EECfg
AppCfg --> APIServer
AuthCfg --> Auth
DBCfg --> Workers
DBCfg --> APIServer
ConnectorCfg --> Workers
IndexCfg --> ModelServer
EECfg --> Auth
Constants --> AppConfigs
来源: 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
认证配置
认证系统通过一套全面的配置支持多种后端和身份提供商。
标题:认证配置层级
graph LR
subgraph "认证类型选择"
AUTH_TYPE["AUTH_TYPE<br/>AuthType 枚举"]
DISABLED["AuthType.DISABLED"]
BASIC["AuthType.BASIC"]
GOOGLE["AuthType.GOOGLE_OAUTH"]
OIDC["AuthType.OIDC"]
SAML["AuthType.SAML"]
end
subgraph "认证后端"
AUTH_BACKEND["AUTH_BACKEND<br/>AuthBackend 枚举"]
REDIS["AuthBackend.REDIS"]
POSTGRES["AuthBackend.POSTGRES"]
end
subgraph "OAuth/OIDC"
OAUTH_CLIENT_ID["OAUTH_CLIENT_ID"]
OAUTH_CLIENT_SECRET["OAUTH_CLIENT_SECRET"]
end
subgraph "会话管理"
SESSION_EXPIRE["SESSION_EXPIRE_TIME_SECONDS<br/>默认值:7 天"]
end
subgraph "密码策略"
MIN_LENGTH["PASSWORD_MIN_LENGTH"]
MAX_LENGTH["PASSWORD_MAX_LENGTH"]
REQUIRE_UPPER["PASSWORD_REQUIRE_UPPERCASE"]
end
AUTH_TYPE --> DISABLED
AUTH_TYPE --> BASIC
AUTH_TYPE --> GOOGLE
AUTH_TYPE --> OIDC
AUTH_TYPE --> SAML
AUTH_BACKEND --> REDIS
AUTH_BACKEND --> POSTGRES
GOOGLE --> OAUTH_CLIENT_ID
OIDC --> OAUTH_CLIENT_ID
关键认证配置项:
| 配置项 | 类型 | 默认值 | 用途 |
|---|---|---|---|
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。
标题:任务协调配置映射
graph TD
subgraph "代码实体空间"
Task["OnyxCeleryTask"]
Lock["RedisLock"]
Fence["ACTIVE_FENCES"]
TenantRedis["TenantRedis"]
end
subgraph "自然语言空间"
Sync["Vespa 同步进程"]
Primary["主工作进程生命周期"]
Prefixing["租户键隔离"]
end
Sync -- "使用" --> Task["OnyxCeleryTask.CHECK_FOR_VESPA_SYNC_TASK"]
Task -- "获取" --> Lock["OnyxRedisLocks.CHECK_VESPA_SYNC_BEAT_LOCK"]
Primary -- "重置" --> Fence["OnyxRedisConstants.ACTIVE_FENCES"]
Prefixing -- "由...实现" --> TenantRedis
关键协调常量:
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