第二章. 本地快速部署
第二章. 本地快速部署
Prorise第二章. 本地快速部署
在上一章中,我们了解了 Open WebUI 是什么。现在让我们动手实践,在本地环境中把它跑起来。本章将专注于本地部署,帮助你在最短时间内体验到 Open WebUI 的强大功能。
在开始之前,让我们明确一个目标:本章结束时,你将拥有一个运行在本地的 Open WebUI 实例,可以通过浏览器访问,并能够与 AI 模型进行对话。
2.1. 环境准备
在部署 Open WebUI 之前,我们需要先准备好基础环境。根据你选择的部署方式不同,需要准备的环境也不同。
Docker 环境准备
Docker 是我们强烈推荐的部署方式。如果你还没有安装 Docker,请按照以下步骤操作。
步骤 1:下载 Docker Desktop
访问 Docker 官网下载页面:https://www.docker.com/products/docker-desktop/
点击 “Download for Windows” 按钮,下载安装包(约 500 MB)。
步骤 2:安装 Docker Desktop
双击下载的安装包,按照安装向导操作:
- 勾选 “Use WSL 2 instead of Hyper-V”(推荐)
- 勾选 “Add shortcut to desktop”
- 点击 “Ok” 开始安装
安装完成后,系统会提示重启电脑。重启后,Docker Desktop 会自动启动。
步骤 3:验证安装
打开 PowerShell 或命令提示符,输入以下命令:
1 | docker --version |
如果看到类似 Docker version 24.0.7, build afdd53b 的输出,说明安装成功。
步骤 4:配置 WSL 2(如果需要)
如果安装过程中提示需要 WSL 2,请按照以下步骤操作:
打开 PowerShell(管理员模式),执行:
1 | wsl --install |
等待安装完成后,重启电脑。
步骤 1:下载 Docker Desktop
访问 Docker 官网下载页面:https://www.docker.com/products/docker-desktop/
根据你的 Mac 芯片类型选择:
- Apple Silicon(M1/M2/M3):下载 “Mac with Apple chip”
- Intel 芯片:下载 “Mac with Intel chip”
步骤 2:安装 Docker Desktop
双击下载的 .dmg 文件,将 Docker 图标拖动到 Applications 文件夹。
打开 Applications 文件夹,双击 Docker 图标启动。
首次启动时,系统会要求输入密码以授权 Docker 安装网络组件。
步骤 3:验证安装
打开终端(Terminal),输入以下命令:
1 | docker --version |
如果看到版本信息输出,说明安装成功。
步骤 4:配置资源限制(可选)
打开 Docker Desktop,点击右上角的设置图标,进入 “Resources” 选项卡:
- CPU:建议分配至少 4 核
- Memory:建议分配至少 8 GB
- Disk:建议分配至少 50 GB
步骤 1:更新系统包
1 | sudo apt update |
步骤 2:安装 Docker
对于 Ubuntu/Debian 系统,执行以下命令:
1 | # 安装必要的依赖 |
步骤 3:配置用户权限
将当前用户添加到 docker 组,避免每次都需要 sudo:
1 | sudo usermod -aG docker $USER |
注销并重新登录,或执行以下命令使权限生效:
1 | newgrp docker |
步骤 4:验证安装
1 | docker --version |
如果两个命令都能正常输出版本信息,说明安装成功。
步骤 5:启动 Docker 服务
1 | sudo systemctl start docker |
Python 环境准备(非 Docker 部署)
如果你选择使用 Python 直接安装 Open WebUI,需要准备 Python 环境。
步骤 1:下载 Python
访问 Python 官网:https://www.python.org/downloads/
下载 Python 3.11 版本(推荐)。
步骤 2:安装 Python
双击安装包,务必勾选 “Add Python to PATH” 选项,然后点击 “Install Now”。
步骤 3:验证安装
打开命令提示符,输入:
1 | python --version |
如果看到版本信息,说明安装成功。
步骤 4:安装 uv(推荐)
1 | powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" |
步骤 1:安装 Homebrew(如果还没有)
1 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" |
步骤 2:安装 Python
1 | brew install python@3.11 |
步骤 3:验证安装
1 | python3 --version |
步骤 4:安装 uv(推荐)
1 | curl -LsSf https://astral.sh/uv/install.sh | sh |
步骤 1:安装 Python
1 | sudo apt update |
步骤 2:验证安装
1 | python3 --version |
步骤 3:安装 uv(推荐)
1 | curl -LsSf https://astral.sh/uv/install.sh | sh |
2.2. 使用 Docker Compose 部署
现在环境已经准备好了,让我们开始部署 Open WebUI。
我们直接使用 Docker Compose 进行部署——这是官方推荐的方式,也是最规范、最易维护的方案。所有配置集中在一个 YAML 文件中,启动、停止、更新都只需要一条命令。
💡 为什么不用
docker run? 虽然一条docker run命令也能启动,但参数又长又容易出错,修改配置需要删除容器重建,多服务管理更是噩梦。Docker Compose 从一开始就解决了这些问题,没有理由绕弯路。
步骤 1:克隆官方仓库
1 | git clone https://github.com/open-webui/open-webui.git |
仓库中已经包含了官方的 docker-compose.yaml,默认配置了 Open WebUI + Ollama 两个服务。
如果你的网络无法访问 GitHub,可以手动下载仓库的 ZIP 包,或者只创建一个目录并手动编写配置文件(见下方配置示例)。
步骤 2:根据场景选择配置
官方的 docker-compose.yaml 默认包含 Ollama 服务。但实际使用中,你可能不需要 Ollama(比如你只用 OpenAI API),或者你的 Ollama 已经安装在宿主机上。
我们推荐使用 docker-compose.override.yaml 或独立的配置文件来覆盖默认配置,这样官方文件保持不动,git pull 更新时不会产生冲突。
适用场景:不需要本地模型,只使用 OpenAI、Claude 等外部 API。
创建 docker-compose.local.yaml 文件:
1 | services: |
启动命令:
1 | docker compose -f docker-compose.local.yaml up -d |
适用场景:想要运行开源模型(如 Qwen、Llama),完全离线使用。
直接使用官方的 docker-compose.yaml 即可,无需额外配置:
1 | docker compose up -d |
官方配置会同时启动 Ollama 和 Open WebUI,并自动建立连接。
启动后,你需要下载一个模型才能开始对话:
1 | # 在 Ollama 容器内下载模型 |
适用场景:Ollama 已经安装在宿主机上,不想在 Docker 中再跑一个。
创建 docker-compose.local.yaml 文件:
1 | services: |
启动命令:
1 | docker compose -f docker-compose.local.yaml up -d |
host.docker.internal是 Docker 提供的特殊域名,指向宿主机。通过extra_hosts配置后,容器内可以用这个域名访问宿主机上运行的 Ollama。
适用场景:有 NVIDIA GPU,想要加速本地模型推理。
创建 docker-compose.local.yaml 文件:
1 | services: |
前置要求:需要安装 NVIDIA 驱动和 NVIDIA Container Toolkit。
安装 NVIDIA Container Toolkit(Ubuntu/Debian):
1 | distribution=$(. /etc/os-release;echo $ID$VERSION_ID) |
启动命令:
1 | docker compose -f docker-compose.local.yaml up -d |
步骤 3:使用 .env 管理变量(可选)
如果你不想把 API Key 等敏感信息写在 YAML 文件中,可以创建一个 .env 文件:
1 | # .env 文件(与 docker-compose 文件同目录) |
然后在 docker-compose.local.yaml 中用 ${OPENAI_API_KEY} 引用即可。.env 文件通常已被 .gitignore 忽略,不会被提交到版本库。
步骤 4:启动并验证
1 | # 启动(根据你选择的方案) |
你应该看到类似以下输出:
1 | NAME IMAGE COMMAND STATUS PORTS |
状态为 Up ... (healthy) 表示服务已正常运行。
Docker Compose 常用命令速查
以下命令均以 -f docker-compose.local.yaml 为例,如果你使用官方默认的 docker-compose.yaml,去掉 -f 参数即可。
| 命令 | 作用 |
|---|---|
docker compose -f docker-compose.local.yaml up -d | 启动所有服务 |
docker compose -f docker-compose.local.yaml down | 停止并删除容器 |
docker compose -f docker-compose.local.yaml restart | 重启服务 |
docker compose -f docker-compose.local.yaml ps | 查看状态 |
docker compose -f docker-compose.local.yaml logs -f | 实时查看日志 |
docker compose -f docker-compose.local.yaml pull | 拉取最新镜像 |
docker compose -f docker-compose.local.yaml exec open-webui bash | 进入容器 |
关于 Python 直接安装
如果你的环境无法使用 Docker(如某些受限的开发机),Open WebUI 也支持通过 Python 直接安装:
1 | # 使用 uv(推荐) |
Python 安装后访问 http://localhost:8080 。但这种方式环境依赖复杂、升级维护不便,仅建议用于临时体验或开发调试,不推荐用于长期使用。
2.3. 首次启动与验证
部署完成后,我们需要系统地验证各项功能是否正常工作。
第一步:确认容器状态
1 | docker compose -f docker-compose.local.yaml ps |
关键信息解读:
| 字段 | 正常值 | 异常情况 |
|---|---|---|
| STATUS | Up ... (healthy) | Restarting = 启动失败在反复重启;unhealthy = 健康检查未通过 |
| PORTS | 0.0.0.0:3000->8080/tcp | 为空 = 端口映射失败 |
如果状态不正常,查看日志定位问题:
1 | docker compose -f docker-compose.local.yaml logs --tail 50 |
第二步:访问 Web 界面
打开浏览器,访问 http://localhost:3000 。
你会看到 Open WebUI 的欢迎页面。
如果无法访问,按以下顺序排查:
- 确认容器正在运行:
docker compose -f docker-compose.local.yaml ps - 确认端口未被占用:
lsof -i :3000(macOS/Linux)或netstat -ano | findstr :3000(Windows) - 检查防火墙:确认没有阻止 3000 端口
第三步:创建管理员账号
首次访问时,你会看到注册页面。第一个注册的用户自动成为管理员,拥有系统最高权限。
| 字段 | 说明 | 建议 |
|---|---|---|
| 姓名 | 显示名称 | 填写你的名字或 “Admin” |
| 邮箱 | 登录账号 | 使用常用邮箱,这是你的登录凭证 |
| 密码 | 登录密码 | 至少 8 位,包含字母、数字和特殊字符 |
⚠️ 重要:请务必牢记管理员的邮箱和密码。忘记密码需要手动操作数据库才能重置。
注册完成后,系统自动登录并进入主界面。
第四步:连接 AI 模型
根据你的部署方案,模型连接方式不同:
如果你使用了 Ollama:
模型选择器中应该已经显示了你下载的模型。如果没有,进入 管理员面板 → 设置 → 连接,确认 Ollama API URL 配置正确,点击刷新。
如果你只部署了 Open WebUI(方案一):
你需要在配置文件中填写正确的 API 地址和密钥(已在 2.2 节的配置中完成),或者在 管理员面板 → 设置 → 连接 中手动配置:
- 在 OpenAI API 区域填入 API Base URL 和 API Key
- 点击保存,然后点击刷新按钮
- 连接成功后,模型选择器中会出现可用模型
第六步:发送测试消息
选择一个模型,在输入框中输入:
1 | 你好,请用一句话介绍你自己 |
如果 AI 正常回复,恭喜你,Open WebUI 已经部署成功!🎉
常见启动问题排查
查看启动日志:
1 | docker compose -f docker-compose.local.yaml logs --tail 100 |
问题 1:HuggingFace 连接失败(SSL 重连错误)
1 | requests.exceptions.SSLError: HTTPSConnectionPool(host='huggingface.co', port=443): |
原因:Open WebUI 启动时会从 HuggingFace 下载 RAG 嵌入模型(sentence-transformers/all-MiniLM-L6-v2),网络无法访问 huggingface.co 时会反复重试。
影响:仅影响 RAG 文档问答功能,不影响 正常对话。服务最终会跳过下载并正常启动。
解决方案:
| 方案 | 操作 |
|---|---|
| 使用镜像站 | 添加环境变量 HF_ENDPOINT=https://hf-mirror.com |
| 配置代理 | 添加 HTTP_PROXY 和 HTTPS_PROXY 环境变量 |
| 使用 OpenAI 嵌入 | 添加 RAG_EMBEDDING_ENGINE=openai |
问题 2:端口被占用
1 | Error: Bind for 0.0.0.0:3000 failed: port is already allocated |
解决方案:修改配置文件中的端口映射,或在 .env 中设置 OPEN_WEBUI_PORT=3001。
问题 3:Ollama 连接失败
1 | WARNING: Ollama connection failed: Connection refused |
解决方案:
- 不需要 Ollama:添加环境变量
ENABLE_OLLAMA_API=False - Ollama 在宿主机:确认 Ollama 服务已启动,且配置了
extra_hosts和正确的OLLAMA_BASE_URL
快速排查清单
| 检查项 | 命令/操作 | 期望结果 |
|---|---|---|
| 容器是否运行 | docker compose ps | 状态为 Up (healthy) |
| 端口是否监听 | curl -s http://localhost:3000 | 返回 HTML 内容 |
| 日志是否有错误 | docker compose logs --tail 50 | 无 ERROR 级别日志 |
| 数据卷是否创建 | docker volume ls | 能看到对应的卷名 |
| API 连接是否正常 | 管理员面板 → 设置 → 连接 | 刷新后显示模型列表 |
| 对话是否正常 | 发送测试消息 | AI 正常回复 |
2.4. 数据持久化与备份
数据持久化是部署中非常重要的一环。如果配置不当,容器重启后所有数据都会丢失。
Docker 卷的工作原理
在前面的部署命令中,我们使用了 -v open-webui:/app/backend/data 参数。这个参数创建了一个名为 open-webui 的 Docker 卷,并将其挂载到容器内的 /app/backend/data 目录。
Open WebUI 的所有数据都存储在这个目录中,包括:
| 数据类型 | 存储位置 | 说明 |
|---|---|---|
| SQLite 数据库 | /app/backend/data/webui.db | 用户账号、对话记录、系统配置等核心数据 |
| 上传文件 | /app/backend/data/uploads/ | 用户上传的文档、图片等文件 |
| RAG 向量数据 | /app/backend/data/vector_db/ | 文档问答功能的向量索引 |
| 缓存数据 | /app/backend/data/cache/ | 模型缓存、临时文件等 |
| 密钥文件 | /app/backend/data/.webui_secret_key | 自动生成的会话加密密钥 |
查看 Docker 卷
你可以通过以下命令查看已创建的 Docker 卷:
1 | # 列出所有卷 |
备份数据
定期备份数据是一个好习惯。以下是几种备份方式:
方法 1:直接复制卷数据
1 | # 创建备份目录 |
方法 2:使用绑定挂载代替命名卷
如果你希望数据直接存储在宿主机的指定目录(方便备份和管理),可以在 Docker Compose 中使用绑定挂载:
1 | services: |
这样你可以直接对 ./data 目录进行备份,无需通过 Docker 命令。
方法 3:导出数据库
Open WebUI 使用 SQLite 数据库,你可以直接复制数据库文件:
1 | # 从容器中复制数据库文件 |
恢复数据
从备份恢复:
1 | # 停止容器 |
数据迁移
如果你需要将 Open WebUI 迁移到另一台服务器:
- 在旧服务器上备份数据(使用上述备份方法)
- 将备份文件传输到新服务器
- 在新服务器上创建 Docker 卷并恢复数据
- 使用相同的 Docker Compose 配置启动服务
2.5. 本章小结
在本章中,我们完成了 Open WebUI 的本地部署,从环境准备到首次验证,走通了完整流程。
| 核心要点 | 关键内容 |
|---|---|
| 环境准备 | Docker(推荐)或 Python 3.11+,根据操作系统选择安装方式 |
| 部署方式 | Docker Compose 部署(推荐),根据场景选择配置方案 |
| 数据持久化 | 通过 Docker 卷或绑定挂载保存数据,定期备份 webui.db |
| 首次验证 | 检查容器状态 → 访问页面 → 创建管理员 → 连接模型 → 测试对话 |
| 常见问题 | HuggingFace 网络问题、端口占用、Ollama 连接失败 |
现在你已经拥有了一个运行在本地的 Open WebUI 实例。在下一章中,我们将深入配置,包括连接多个 AI 模型、自定义界面、管理用户权限等进阶操作。



