开发环境设置(中文译文)
原始 DeepWiki 页面:https://deepwiki.com/open-webui/open-webui/17.1-development-environment-setup
翻译时间:2026-06-09T16:11:59.106Z
翻译模型:deepseek-chat
原文字符数:7426
项目:Open WebUI (open-webui)
---
开发环境搭建
相关源文件
以下文件用于生成此 Wiki 页面:
.env.exampleCHANGELOG.mdCODE_OF_CONDUCT.mdDockerfilebackend/dev.shbackend/open_webui/retrieval/web/testdata/brave.jsonbackend/start.shbackend/start_windows.batpackage-lock.jsonpackage.jsonrun-ollama-docker.shrun.shsrc/app.csssrc/lib/components/admin/Settings/Interface/Banners.sveltesrc/lib/components/admin/Settings/Models/ModelList.sveltesrc/lib/components/common/RichTextInput.sveltesrc/lib/components/common/Textarea.sveltesrc/lib/constants.tssrc/routes/+layout.jssvelte.config.js
目的与范围
本文档指导开发者搭建 Open WebUI 的本地开发环境。内容涵盖前提条件、前后端依赖管理、环境变量配置以及开发服务器的启动。Open WebUI 是一个基于 SvelteKit 和 FastAPI 的 AI 界面,支持 RAG、协作笔记和多模型聊天 package.json:2-4。
前提条件
Open WebUI 需要特定版本的 Python 和 Node.js,以确保与其庞大的 AI 和 Web 依赖库兼容。
系统要求
- Python:主要目标版本为 3.11.x
Dockerfile:46。 - Node.js:前端构建流水线使用版本 22(Alpine 3.20 或同等环境)
Dockerfile:27。支持范围为>=18.13.0 <=22.x.xpackage.json:159。 - Git:用于版本控制和构建元数据
Dockerfile:36。
推荐开发工具
- uv:快速的 Python 包安装器和解析器,用于管理复杂的依赖树
Dockerfile:142。 - Playwright:如果在 RAG 中使用
playwright引擎进行网页抓取,则需要安装backend/start.sh:7-12。 - Docker:用于容器化测试和运行辅助服务
run.sh:8-12。
后端开发环境搭建
后端是一个 FastAPI 应用程序,负责 AI 模型编排、RAG 流水线和实时通信。
架构与数据流
graph TD
subgraph "入口点"
main["open_webui.main:app"]
start["backend/start.sh"]
dev["backend/dev.sh"]
end
subgraph "请求处理"
uvicorn["uvicorn"]
fastapi["FastAPI 应用核心"]
end
subgraph "外部集成"
ollama["Ollama API"]
openai["OpenAI API"]
end
start --> uvicorn
dev --> uvicorn
uvicorn --> main
main --> fastapi
fastapi --> ollama
fastapi --> openai
来源: backend/start.sh:83-87、backend/dev.sh:1-3、src/lib/constants.ts:10-11
依赖安装
项目通过 requirements.txt 和 package.json 管理依赖。
- 初始化虚拟环境:
cd backend
python -m venv venv
source venv/bin/activate
- 使用 uv 安装:
pip install uv
uv pip install -r requirements.txt
*注意:对于 ARM64/QEMU 构建,设置 UV_LINK_MODE=copy 以防止 0 字节文件损坏* Dockerfile:139。
后端依赖分类
| 类别 | 包 | 文件引用 |
|---|---|---|
| Web 核心 | fastapi、uvicorn | backend/start.sh:83、backend/dev.sh:3 |
| 数据库 | psycopg (v3) | CHANGELOG.md:30, 49 |
| 实时通信 | python-socketio、redis | CHANGELOG.md:45 |
| AI/ML | torch、sentence-transformers、faster-whisper | Dockerfile:146-150 |
来源: Dockerfile:141-165、CHANGELOG.md:30-49
前端开发环境搭建
前端是一个 SvelteKit 应用程序,使用 Vite 进行打包和热模块替换(HMR)。
安装与构建
- 安装依赖:
npm ci --force
构建流水线中使用 --force 标志以确保干净安装 Dockerfile:39。
- 启动开发服务器:
npm run dev
该命令在获取 Pyodide 资源后执行 vite dev --host package.json:6。
关键前端实体
| 实体 | 角色 | 文件引用 |
|---|---|---|
RichTextInput.svelte | 基于 TipTap 的聊天和笔记编辑器 | src/lib/components/common/RichTextInput.svelte:130-153 |
Textarea.svelte | 自动调整大小的输入组件 | src/lib/components/common/Textarea.svelte:36-50 |
constants.ts | 前端常量和 API 路由 | src/lib/constants.ts:4-19 |
来源: package.json:5-22、src/lib/constants.ts:1-40
配置与环境
Open WebUI 使用环境变量实现灵活部署。
关键环境变量
| 变量 | 默认值 | 用途 |
|---|---|---|
PORT | 8080 | 后端端口 backend/start.sh:23 |
WEBUI_SECRET_KEY | (自动生成) | 用于 JWT 签名。存储在 .webui_secret_key 文件中 backend/start.sh:31-35 |
OLLAMA_BASE_URL | /ollama | 本地 Ollama 实例的端点 Dockerfile:76 |
WEB_LOADER_ENGINE | link_reader | 网页抓取引擎(设置为 playwright 以支持 JavaScript)backend/start.sh:7-10 |
CUSTOM_API_KEY_HEADER | null | 可配置的 API 密钥认证请求头 CHANGELOG.md:15 |
来源: backend/start.sh:17-46、Dockerfile:63-106、CHANGELOG.md:12-23
开发工作流
启动服务器
后端(带热重载):
cd backend
sh dev.sh
dev.sh 脚本为本地开发配置 CORS_ALLOW_ORIGIN,并使用 --reload 参数启动 uvicorn backend/dev.sh:1-3。
前端:
npm run dev
前后端交互
sequenceDiagram
participant Browser as "SvelteKit 前端"
participant Vite as "Vite 开发服务器 (5173)"
participant FastAPI as "Uvicorn 后端 (8080)"
Browser->>Vite: 加载资源 / HMR
Browser->>FastAPI: API 请求(通过 WEBUI_API_BASE_URL)
FastAPI-->>Browser: JSON 响应 / 流式响应
来源: src/lib/constants.ts:6-9、backend/dev.sh:1-3
测试与质量保证
代码质量工具
| 工具 | 用途 | 命令 |
|---|---|---|
eslint | 前端代码检查 | npm run lint:frontend package.json:14 |
pylint | 后端代码检查 | npm run lint:backend package.json:16 |
prettier | 代码格式化 | npm run format package.json:17 |
ruff | 后端格式化 | npm run format:backend package.json:18 |
svelte-check | 类型检查 | npm run check package.json:11 |
自动化测试
- 前端:使用
vitest进行单元测试package.json:21。 - 端到端:使用
cypress进行集成测试package.json:20。
来源: package.json:5-23、CHANGELOG.md:21-22