如果你想在自己的服务器或家用电脑上搭一套纯本地的大语言模型,既不希望聊天记录上传到第三方云端,又想要一个和 ChatGPT 一样顺手好用的 Web 界面,那这套组合就是目前的黄金标准。简单来说,Ollama 负责在后台加载和运行模型(它充当底层的模型引擎),而 Open WebUI 则是前台的门面与工作台(支持多模型切换、知识库 RAG、用户权限管理等)。两者搭在一起,模型跑在本机、数据留在本地,就算拔掉网线也能正常对话。
网上一堆旧教程还在拿两年前的旧版本举例。本文所有步骤基于 2026-11-03 当天的真实环境实测:采用 Open WebUI v0.12.5 搭配 Ollama v0.40.13(官方主版本号早已大幅演进,别再被老旧的 v0.6.x 误导)。教程中我们将 Open WebUI 映射到宿主机 13000 端口,Ollama 保持默认的 11434 端口,并在文末实拉了一个轻量级 qwen2.5:0.5b 模型做全链路真实对话验证。
成品长这样
整套服务跑起来之后,界面与主流商业 AI 几乎一致:左侧是历史会话,上方随时选择已下载的模型,输入框支持 Markdown 渲染和流式打字输出,所有推理计算均在本地硬件完成。

准备工作
动工前先确认你的宿主机满足以下基础条件:
- 运行环境:一台标准的 Linux 机器(Ubuntu/Debian 等均可),已正确安装 Docker 与 Docker Compose 插件。
- 内存要求:建议 8GB 起步。Open WebUI 容器本身占用几百兆,加上演示用的 0.5B 微型模型完全够用;如果后续计划运行 7B/14B 级别模型,建议将物理内存加到 16GB–32GB 或搭配独立显卡。
- 磁盘空间:基础镜像请预留至少 5GB 空闲(Open WebUI 镜像拉取压缩包约 1.6GB,解压后占用约 4.5GB);后续 Ollama 拉取模型的文件体积另算(0.5B 约 400MB,7B 约 4.5GB–5GB)。
- 网络连通:宿主机需能顺畅拉取
ghcr.io(GitHub 镜像仓)以及 HuggingFace(Open WebUI 首次启动时会在后台拉取一个约 90MB 的默认向量嵌入模型)。
第一步:Docker Compose 部署
-
找一个干净的工作目录(如
~/open-webui),创建并编辑docker-compose.yml文件:services: ollama: image: ollama/ollama:latest container_name: ollama restart: unless-stopped ports: - "11434:11434" volumes: - ollama:/root/.ollama open-webui: image: ghcr.io/open-webui/open-webui:v0.12.5 container_name: open-webui restart: unless-stopped depends_on: - ollama ports: - "13000:8080" environment: - OLLAMA_BASE_URL=http://ollama:11434 - WEBUI_SECRET_KEY=改成你自己的随机字符串 volumes: - open-webui:/app/backend/data volumes: ollama: open-webui: -
在当前目录下执行后台拉取与启动命令:
docker compose up -d -
验证双容器运行状态。首先在终端测试 Ollama 引擎是否就绪,正常会返回版本 JSON:
curl http://127.0.0.1:11434/api/version # 返回类似: {"version":"0.40.13"}接着在浏览器打开
http://<你的服务器IP>:13000,能看到 Open WebUI 的欢迎与管理员初始注册页,即代表前后端容器网络已经互通。
进阶小提示:如果你之前已经在宿主机原生安装了 Ollama,不想再用 Docker 多跑一个 Ollama 容器,也可以在 compose 中单起 open-webui。此时需要将 OLLAMA_BASE_URL 设为 http://host.docker.internal:11434,并在该 service 下补充 extra_hosts: ["host.docker.internal:host-gateway"],同时确保宿主机的 Ollama 环境变量监听了 0.0.0.0 即可。
第二步:创建管理员账号
浏览器打开 http://服务器IP:13000,迎面而来的是新版引导落地页。别到处找登录框,直接点中间醒目的 Get started 就能进入建号表单。
表单非常简单,依次填入 Name(随便起个顺眼的昵称)、Email 和 Password,确认无误后点击 Create Admin Account。注意,系统里第一个创建的账号会自动提权为最高管理员,省去了老版本繁琐的手动初始化和待审核流程,一步到位。

建号完成后会自动跳进聊天主界面,整体布局和 ChatGPT 非常像,清爽干脆:

安全提醒:在搞定管理员账号后,后续任何新人注册默认都会被拦在门外、处于待批准状态,必须由你在左下角的 Admin 面板里手动点通过。千万别图省事直接把公共注册完全裸奔对外,容易被蹭爆资源甚至惹上安全隐患。
第三步:给 Ollama 装模型并聊一句
现在主界面有了,但左上角的模型列表还是空荡荡的,咱们得给它喂点“脑子”。切回安装了 Ollama 的服务器终端,先拉一个轻量级模型热热身:
ollama pull qwen2.5:0.5b这个 0.5B 的小尺寸模型只有 400MB 左右,下载飞快,就算拿两核老旧轻量云或者小虚拟机来跑也毫无压力。下载完成进度跑到 100% 后,切回刚才的 WebUI 网页——左上角的模型选择器完全是自动热刷新的,不用重启任何容器,点开下拉框就能看到并选中 qwen2.5:0.5b。
在输入框敲一句:用一句话介绍你自己,按回车发出去验证一下。很快模型就会打字回复,并且左侧侧边栏还会根据聊天内容贴心地自动生成对话标题。只要看到能来回流畅应答,整套体系就算真正跑通了。
如果你的机子带独显或者内存充足(8G~16G 以上),体验完之后可以直接把命令换成 ollama pull qwen2.5:7b 甚至 14b,命令只换后面的 tag 即可。拉完同样在网页端即选即用,丝滑顺畅。
踩坑实录
1. 手工导入的 GGUF 报错超出上下文大小
如果你不是直接从官方 pull,而是用 Modelfile 从本地 GGUF 自建导入的模型,进 WebUI 聊天很容易当头撞上一句报错:request exceeds the available context size。原因在于 GGUF 默认上下文常常只有 4096,而 Open WebUI 为了支持丰富功能,每次对话都会在后台附带挺长的系统提示词(System Prompt)和工具调用定义。解决办法是在你的 Modelfile 里显式加上 PARAMETER num_ctx 16384(或者按需拉到 32768),然后重新跑一遍 ollama create 覆盖建一下。官方直接 pull 的通用模型通常默认参数更合理,一般碰不到这坑。
2. 首次启动卡死在后台拉取嵌入模型
很多人 Docker 跑起来后发现打不开网页或者日志一直在转圈,其实是 WebUI 在第一次启动时,会在后台静默联网下载一个约 90MB 的本地向量嵌入模型(专门用来处理 RAG 知识库检索)。如果你这台服务器断网或者通往 HuggingFace 的网络受阻,容器就会卡在初始化启动阶段动弹不得。部署前务必确保机器能连通 HuggingFace,或者提前把缓存目录挂载进对应容器里。
3. 首次进界面被 What's New 弹窗遮住,找不到入口
新版刚建完号登录进去,屏幕正中央经常会啪地弹出一个大大的“What's New”版本更新日志浮层,把底下的操作区域挡得严严实实,有人以为页面假死了。别慌,直接往下滑或者在弹窗右下角点击 Okay, Let's Go! 把它关掉就能恢复正常。另外再次提醒初次访问的朋友:打开 http://IP:13000 默认呈现的是带插图的展示落地页,不是直接的登录输入框,先点页面正中的 Get started 才能进建号界面。
升级与备份
版本平滑升级:
后续如果官方发了新版本,升级只需要编辑 docker-compose.yml 调整镜像 tag(或者直接保留 :main),然后在同一目录下执行:
docker compose pull && docker compose up -dCompose 会自动销毁旧容器、启动新容器。Open WebUI 的容器内置了全套数据表自迁移机制,启动时会自动识别并跑完数据库 migration,你的所有账号、历史记录和知识库都在。
定期冷备份与迁移要点:
核心数据全在挂载卷里,真要备份或者搬家换机,只需要打包两个东西:
- open-webui 的数据卷:核心是 SQLite 数据库
webui.db和附件目录uploads/,都在里面; - ollama 的模型卷:即
~/.ollama/models,免得换了机器又得几十个 G 重新苦哈哈地下载。
特别警告:docker-compose.yml 里的 WEBUI_SECRET_KEY 是用来给数据库密码和敏感令牌做加密的盐值。如果你要备份还原或者迁到新机器,这个环境变量的值必须与原机完全保持一模一样。一旦换了新的密钥字符串,系统虽然能起得来,但已有的会话、API Token 和加密配置将统统解不开而失效。