Ollama + Open WebUI:给本地大模型套上类 ChatGPT 的图形界面

本地跑大模型,Ollama 是最省心的命令行工具之一。但每次都要打开终端敲命令、看不到历史会话、没有图形界面,对非技术用户并不友好。Open WebUI 正好补上这一块——它是一个可自托管的 AI 平台,提供了类 ChatGPT 的对话界面,能直接对接 Ollama 服务,也能接入任何 OpenAI 兼容 API。

整篇文章的目标:在同一台机器上把 Ollama 和 Open WebUI 都跑起来(用 Docker Compose 一把搞定),并在 Web 界面上完成第一次对话、模型切换、文档问答等操作。

为什么是 Ollama + Open WebUI

  • Ollama:负责拉模型、跑推理、暴露 API(默认 http://localhost:11434)。
  • Open WebUI:负责 UI、对话历史、用户与权限、RAG、模型管理、工具调用等”上层”能力。

两者职责清晰:一个管模型运行,一个管交互体验。Open WebUI 自身支持直接接 Ollama 服务(通过环境变量 OLLAMA_BASE_URL),这正是仓库官方 docker-compose.yaml 的默认组合。

环境准备

开始之前,确认以下条件:

  1. 操作系统:Linux / macOS / Windows 都可以,本文以 Linux 为例。
  2. Docker 与 Docker Compose:Open WebUI 和 Ollama 都用容器跑,宿主机必须装好 Docker Engine 和 docker compose 插件(v2 格式)。如果还没装,请先到 Docker 官方文档安装。
  3. 硬件:CPU 至少 8GB 内存,跑 7B 量级模型建议 16GB+;有 NVIDIA GPU 会显著加速。Open WebUI 本身不重,主要占用来自 Ollama 加载的模型。
  4. 磁盘:预留 20GB+ 空间给模型缓存(7B 模型约 4–5GB,13B 约 7–8GB,具体大小以官方 tag 为准)。

> 提示:如果你已经在宿主机原生装过 Ollama 并且能 ollama run 对话,也可以选择不重启它,让 Open WebUI 通过 host.docker.internal 指向宿主。但本文的 Compose 文件会用容器版 Ollama,避免端口和路径冲突,更适合首次搭建。

本地大模型部署的整体架构示意,左侧 Open WebUI 容器,右侧 Ollama 容器,二者通过内部网络通信-1

第一步:用 Docker Compose 部署 Ollama + Open WebUI

这是核心步骤。仓库根目录的 docker-compose.yaml 把 Ollama 和 Open WebUI 写在一起,启动一条命令就能把两个服务都拉起来。

新建一个工作目录并进入:

mkdir -p ~/ai-stack && cd ~/ai-stack

在该目录下创建 docker-compose.yaml,内容如下(与官方仓库 docker-compose.yaml 一致):

services:
ollama:
volumes:
- ollama:/root/.ollama
container_name: ollama
pull_policy: always
tty: true
restart: unless-stopped
image: ollama/ollama:${OLLAMA_DOCKER_TAG-latest}

open-webui:
build:
context: .
dockerfile: Dockerfile
image: ghcr.io/open-webui/open-webui:${WEBUI_DOCKER_TAG-main}
container_name: open-webui
volumes:
- open-webui:/app/backend/data
depends_on:
- ollama
ports:
- ${OPEN_WEBUI_PORT-3000}:8080
environment:
- 'OLLAMA_BASE_URL=http://ollama:11434'
- 'WEBUI_SECRET_KEY='
extra_hosts:
- host.docker.internal:host-gateway
restart: unless-stopped

volumes:
ollama: {}
open-webui: {}

逐项解释关键配置:

  • 两个 servicesollamaopen-webui,通过 Compose 的内部网络互通。
  • ollama 镜像ollama/ollama,tag 用环境变量 OLLAMA_DOCKER_TAG 控制,默认 latest,想固定版本可自行 export。
  • open-webui 镜像:默认从 GitHub Container Registry 拉 ${WEBUI_DOCKER_TAG-main}(main 分支构建);如要本地构建可保留 build 段,让 Docker 在第一次启动时本地打镜像。
  • 端口映射:宿主 ${OPEN_WEBUI_PORT-3000} 映射到容器 8080。默认在浏览器访问 http://:3000。要改端口就 export OPEN_WEBUI_PORT=8080 之类。
  • 环境变量
  • OLLAMA_BASE_URL=http://ollama:11434:让 Open WebUI 直接走 Compose 内部网络连 Ollama,不要改成 localhost,否则容器里访问不到。
  • WEBUI_SECRET_KEY=:用于签名会话 cookie,生产环境务必设置一个长随机串(可用 openssl rand -hex 32 生成)。
  • extra_hosts:把 host.docker.internal 指向宿主网关,方便后续在容器里访问宿主服务(不在本文主流程里,但保留以备后用)。
  • volumes
  • ollama:/root/.ollama:模型文件持久化,重建容器不会丢模型。
  • open-webui:/app/backend/data:用户、对话历史、知识库、上传文件等都存在这里。

启动两个服务:

docker compose up -d

第一次启动会拉镜像,需要几分钟。完成后查看状态:

docker compose ps

两个容器都应是 running(Open WebUI 会等 Ollama 健康后再起,所以 depends_on 已经处理好顺序)。

### 第二步:拉一个模型到 Ollama

Open WebUI 默认连上 Ollama 后,下拉框里只显示 Ollama 实际加载的模型。先拉一个常用的:

docker exec -it ollama ollama pull qwen2.5:7b

这条命令在 Ollama 容器内执行,下载千问 2.5 7B 量级模型(具体大小与 tag 以官方为准)。如果想用更小的模型起步,可以换成:

docker exec -it ollama ollama pull llama3.2:3b

下载过程中可以另开终端跑 docker exec ollama ollama list 看是否出现在列表里。

Open WebUI 首次注册后的登录页与对话主页-4

第三步:访问 Open WebUI 并创建管理员

Open WebUI 默认监听宿主 3000 端口(容器内 8080)。浏览器打开:

http://:3000

第一次进入会要求注册账号。第一个注册的账号自动成为管理员——这是 Open WebUI 的设计,请尽快用它登录,再后续创建普通用户。

登录后界面和 ChatGPT 类似:左侧会话列表,中间对话区,顶部模型选择器。

### 第四步:在 Web 界面连接 Ollama 模型

Open WebUI 在环境变量里已经指定了 OLLAMA_BASE_URL=http://ollama:11434,一般情况下不需要再手动配。但如果你之前改过地址、或者要接远程 Ollama,需要到设置里调整:

  1. 点击右上角头像 → SettingsConnections(或 Admin Panel → Settings → Connections,不同版本路径略有差异)。
  2. Ollama API 一栏,确保 URL 为 http://ollama:11434(如果是 Compose 内置 Ollama)或 http://host.docker.internal:11434(如果是宿主原生装的 Ollama)。
  3. 点击 Save 后刷新页面。

回到对话界面,点顶部模型下拉框,应该能看到刚才 ollama pull 拉下来的模型(如 qwen2.5:7b)。选中它,发条消息就能看到回复了。

### 第五步:基础使用

  • 多轮对话:直接继续打字即可,对话历史会自动保存到左侧列表。
  • 新建会话:左上角”New Chat”按钮。
  • 系统提示词(System Prompt):点输入框上方的 ⚙ 图标或新建会话时设置,可以为这个会话指定角色。
  • 切换模型:同一个会话内可在模型下拉里切换,前提是 Ollama 已经下载对应模型。
  • 停止生成:回复过程中按钮会变成”Stop”,可以中断。

第六步:进阶功能

本地知识库 / RAG

对话输入框左侧有一个 📎 图标,点击可以上传 PDF、Word、TXT 等文件。Open WebUI 会在后台做 embedding、切片、建索引,下次用 # 加文件名引用就能让模型回答相关问题。

多用户与权限

以管理员身份进入 Admin Panel → Users,可以:

  • 创建或禁用用户;
  • 设置用户组(Groups);
  • 给不同组配置可用模型、知识库。

Open WebUI 默认每个用户的数据是隔离的,跨用户共享需要显式配置。

模型参数调节

新建会话时点 ⚙,可以设置:

  • Temperature:越高越发散(0.7 是常用值)。
  • Top P / Top K:核采样参数。
  • Context Length:上下文长度,受 Ollama 模型本身限制。
  • System Prompt:让模型扮演特定角色。

 

联网搜索与网页抓取

在 Admin Panel → Settings → Web Search 里,可以配置 SearXNG、Tavily、Brave 等搜索 provider;在对话里用 # 加 URL,模型就会把网页内容带进上下文。

常见问题

1. 容器里访问不到宿主 Ollama

如果在用宿主原生 Ollama 而非 Compose 内置 Ollama,容器里 localhost 是容器自身。必须用 host.docker.internal(Docker Desktop / Linux 较新版都支持),并在 Compose 里加 extra_hosts: ["host.docker.internal:host-gateway"]——仓库默认已经加了。

2. 端口 3000 被占用

启动前 export:

export OPEN_WEBUI_PORT=8080
docker compose up -d

或者直接修改 Compose 文件里的 ${OPEN_WEBUI_PORT-3000} 为其他端口。

3. 模型下拉框是空的

先确认 docker exec ollama ollama list 在容器内能看到模型,再确认 Open WebUI 设置里的 Ollama URL 正确。如果用过 SQLite 加密或外部数据库迁移,可能需要重新登录并触发一次模型刷新。

4. 内存吃满 / 推理很慢

  • 优先用更小的模型(如 3B、7B)。
  • 关闭其他吃内存的程序。
  • 有 NVIDIA GPU 时,使用 :cuda 标签的镜像(仓库 README 提到 :ollama:cuda tag)。
  • 模型切换频繁会反复加载,建议常驻 1–2 个模型。

5. 重装后数据丢失

检查 volumes:docker volume inspect ollama open-webui 看挂载点。Compose 里这两个 volume 是命名卷,重建容器不会丢数据;但如果用 docker compose down -v连 volume 一起删,请慎用。

 

收尾

到这里,Ollama + Open WebUI 的最小可用部署就完成了。后续如果要继续往生产化方向走,建议先做两件事:设置 WEBUI_SECRET_KEY、把数据卷挂到独立备份目录,再按团队规模决定是否迁移到 PostgreSQL + 外部向量库。如果你想对 Ollama 上各模型的本地表现有个横向参考,可以看这篇本地大模型评测:Ollama 上跑过的那些模型横评

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。