开发设置
开发环境搭建
相关源文件
本章引用的主要源码文件:
.devcontainer/Dockerfile.devcontainer/README.md.devcontainer/devcontainer.json.devcontainer/dnsmasq.conf.devcontainer/init-dev-user.sh.devcontainer/init-firewall.sh.devcontainer/zshrc.github/CODEOWNERS.kanban.toml.vscode/launch.json.vscode/tasks.jsonAGENTS.mdCLAUDE.mdbackend/ee/onyx/server/billing/api.pybackend/ee/onyx/server/billing/models.pybackend/ee/onyx/server/billing/service.pybackend/ee/onyx/server/license/api.pybackend/ee/onyx/server/middleware/tenant_tracking.pybackend/ee/onyx/server/settings/__init__.pybackend/ee/onyx/server/tenants/api.pybackend/ee/onyx/server/tenants/billing.pybackend/ee/onyx/server/tenants/billing_api.pybackend/ee/onyx/server/tenants/models.pybackend/ee/onyx/server/tenants/product_gating.pybackend/ee/onyx/server/tenants/proxy.pybackend/onyx/error_handling/__init__.pybackend/onyx/error_handling/error_codes.pybackend/onyx/error_handling/exceptions.pybackend/onyx/hooks/executor.pybackend/tests/unit/ee/onyx/server/billing/test_billing_api.pybackend/tests/unit/ee/onyx/server/billing/test_billing_service.pybackend/tests/unit/ee/onyx/server/license/test_api.pybackend/tests/unit/ee/onyx/server/tenants/test_billing_api.pybackend/tests/unit/ee/onyx/server/tenants/test_product_gating.pybackend/tests/unit/ee/onyx/server/tenants/test_proxy.pybackend/tests/unit/onyx/connectors/confluence/test_rate_limit_handler.pybackend/tests/unit/onyx/error_handling/test_exceptions.pycli/Dockerfiledocker-bake.hcltools/ods/cmd/dev.gotools/ods/cmd/dev_exec.gotools/ods/cmd/dev_into.gotools/ods/cmd/dev_tunnel.gotools/ods/cmd/dev_up.go
本文档介绍如何搭建 Onyx 平台的本地开发环境,包括前置条件、仓库设置、环境配置以及运行开发栈(所有端口均暴露以便调试)。
前置条件
必需工具
在搭建开发环境之前,请确保已安装以下工具:
| 工具 | 最低版本 | 用途 |
|---|---|---|
| Docker | 20.10+ | 所有服务的容器运行时 |
| Docker Compose | 2.0+ | 多容器编排 |
| Python | 3.11 | 后端运行时 |
| uv | 最新版 | 高性能 Python 依赖管理 |
| Node.js | 22 | 前端运行时 |
| Git | 2.0+ | 版本控制 |
系统资源
开发环境需要充足的系统资源才能运行完整栈(Vespa、OpenSearch、模型服务器等):
| 资源 | 最低要求 | 推荐配置 |
|---|---|---|
| 内存 | 10 GB | 16 GB 以上 |
| 磁盘空间 | 32 GB | 50 GB 以上 |
| CPU 核心数 | 4 | 8 核以上 |
仓库结构
顶层组织
onyx/
├── backend/ # Python FastAPI 应用
│ ├── onyx/ # 主应用代码
│ ├── model_server/ # 机器学习模型服务
│ ├── alembic/ # 数据库迁移
│ └── Dockerfile # 后端容器
├── web/ # Next.js 前端
│ └── Dockerfile # 前端容器
├── deployment/
│ └── docker_compose/ # Docker Compose 配置
├── pyproject.toml # Python 依赖(唯一数据源)
└── uv.lock # 统一依赖锁定文件
来源: AGENTS.md:148-166
开发栈架构
Docker Compose 服务架构
开发栈将所有内部服务暴露给宿主机,方便开发者直接使用本地工具(如 psql、redis-cli 或 Vespa 配置工具)。
来源: .devcontainer/devcontainer.json:23-29、.vscode/launch.json:72-121
VS 代码调试配置
.vscode/launch.json 文件提供了预配置的调试目标,可用于调试单个微服务或同时调试整个栈。
| 配置名称 | 类型 | 入口点 |
|---|---|---|
Web Server | Node.js | web/(npm run dev).vscode/launch.json:72-84 |
API Server | Python | onyx.main:app(端口 8080).vscode/launch.json:104-121 |
Model Server | Python | model_server.main:app(端口 9000).vscode/launch.json:86-102 |
Celery primary | Python | onyx.background.celery.versioned_apps.primary .vscode/launch.json:187-214 |
MCP Server | Python | onyx.mcp_server.api:mcp_app(端口 8090).vscode/launch.json:159-185 |
初始设置工作流
1. 后端:Python 依赖
Onyx 使用 uv 进行高性能依赖管理。pyproject.toml 是所有后端依赖的唯一数据源。
# 创建虚拟环境并同步依赖
uv venv .venv --python 3.11
source .venv/bin/activate
uv sync --all-extras
# 安装 Playwright(用于网页抓取/测试)
uv run playwright install
来源: AGENTS.md:7-8、AGENTS.md:126-130
2. 前端:Node 依赖
确保使用 Node.js v22(在 package.json 中指定)。
cd web
npm install
3. 环境配置
配置通过环境变量管理。本地开发时,在根目录创建 .env 文件。
| 变量 | 推荐开发值 | 说明 |
|---|---|---|
AUTH_TYPE | basic | 开发环境最简单的认证模式 |
GEN_AI_API_KEY | sk-... | 大语言模型(LLM)提供商的密钥(OpenAI/Anthropic) |
POSTGRES_HOST | localhost | 关系型数据库主机 |
VESPA_HOST | localhost | 向量索引主机 |
LOG_LEVEL | DEBUG | 详细日志输出,便于故障排查 |
来源: AGENTS.md:9-11、.devcontainer/devcontainer.json:20-30
开发环境
方案一:VS 代码 DevContainer(强烈推荐)
仓库中包含一套完整的 DevContainer 配置,提供了一个"沙箱"环境,其中预装了所有系统依赖(如 build-essential、ripgrep、jq 和 uv)。
- 镜像:
onyxdotapp/onyx-devcontainer.devcontainer/devcontainer.json:3 - 特性:
- 隔离网络
onyx_default.devcontainer/devcontainer.json:7 - 通过
init-firewall.sh自动配置防火墙.devcontainer/init-firewall.sh:1-137 - 通过
init-dev-user.sh自动映射 UID/GID 以支持绑定挂载.devcontainer/init-dev-user.sh:1-120 - 预装
Claude Code,支持 AI 辅助开发.devcontainer/Dockerfile:56-58
- 隔离网络
方案二:本地微服务
如果更倾向于在 Docker 之外运行服务以便于调试,可以使用 VS Code 中的"Run All Onyx Services"复合启动配置。该配置会启动 Web 服务器、API 服务器、模型服务器以及所有必要的 Celery 工作进程(轻量、重量、文档抓取等).vscode/launch.json:16-34。
企业版(EE)开发
要开发或测试企业版功能,请确保设置以下环境变量:
ENABLE_PAID_ENTERPRISE_EDITION_FEATURES=trueMULTI_TENANT=true(如果测试云特定功能)
许可与计费
对于自托管的企业版开发,通过 /license 端点管理席位使用和许可状态 backend/ee/onyx/server/license/api.py:1-11。 对于云/多租户开发,通过统一的 /admin/billing API 管理计费,该 API 会将请求路由到 Onyx 控制平面 backend/ee/onyx/server/billing/api.py:1-22。
来源: backend/ee/onyx/server/license/api.py:1-11、backend/ee/onyx/server/billing/api.py:1-22
常见开发任务
数据库迁移
修改 SQLAlchemy 模型后,使用 Alembic 生成并应用迁移:
# 应用迁移至最新状态
alembic upgrade head
# 针对多租户模式
alembic -n schema_private upgrade head
来源: AGENTS.md:174-180
运行测试
# 运行后端单元测试
pytest backend/tests/unit
# 运行前端测试
cd web && npm test
来源: AGENTS.md:126-130