本文记录一次从 Ollama 后端模型服务Open WebUI 前端界面 的完整搭建过程,重点放在 Docker Compose 架构、数据卷持久化、模型管理与常见误区。文中已对主机名、IP、端口等私人信息做统一脱敏处理。


一、目标与前提

目标

  • 在同一台 Linux 主机上:
    • 运行 Ollama 作为本地大模型后端
    • 运行 Open WebUI 作为 Web 访问入口
  • 使用 Docker Compose 统一管理
  • 模型数据持久化,容器重建不丢模型
  • 仅对外暴露 WebUI 端口,Ollama 不直接暴露

前提环境

  • Linux 主机
  • Docker Engine(较新版本)
  • Docker Compose v2+
  • 足够的磁盘空间(7B 模型约 4.7GB)

二、关键概念澄清

在开始之前,先澄清几个容易混淆的点。

1️⃣ Ollama 版本 ≠ 模型大小

  • ollama/ollama:latest运行时程序版本
  • qwen2.5:7b模型本体(7 Billion 参数)

二者是完全不同的层级,不要混为一谈。


2️⃣ 7B 是什么

  • 7B = 70 亿参数
  • 属于 CPU 可勉强运行、GPU 更佳 的模型级别
  • 非常适合:
    • Bash / Shell 脚本
    • Python 运维脚本
    • 日常辅助写代码

3️⃣ WebUI 与 Ollama 的关系

  • Ollama:只提供 API(默认 11434)
  • Open WebUI:前端 + 后端,调用 Ollama API
  • 两者同主机部署时:
    • 不需要暴露 Ollama 端口
    • 使用 Docker 内部网络通信即可

三、Docker Compose 结构设计

设计原则

  • Ollama 只在内部网络监听
  • WebUI 对外暴露一个端口(供浏览器 / 反代使用)
  • 模型数据、WebUI 数据全部持久化

四、最终 Docker Compose 配置(脱敏版)

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    restart: unless-stopped

    # 外部端口不暴露,Ollama 仅供内部 WebUI 使用
    # ports:
    #   - "<PUBLIC_PORT>:11434"

    # 模型与配置持久化(模型不会丢)
    volumes:
      - ollama:/root/.ollama

    # 可选:避免某些情况下的资源争抢
    # deploy:
    #   resources:
    #     limits:
    #       memory: 10G

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    restart: unless-stopped

    environment:
      - OLLAMA_BASE_URL=http://ollama:11434

    # 对外只暴露 WebUI 端口
    ports:
      - "<PUBLIC_PORT>:8080"

    volumes:
      - open-webui:/app/backend/data

    depends_on:
      - ollama

volumes:
  ollama:
  open-webui:

五、启动流程

1️⃣ 启动服务

docker compose up -d

确认两个容器均为 Up 状态。


2️⃣ 下载模型(重点)

模型必须通过运行中的 Ollama 容器下载,否则会报错。

docker compose exec ollama ollama pull qwen2.5:7b

下载完成后验证:

docker compose exec ollama ollama list

确认模型已存在。


3️⃣ 模型下载位置说明

  • 模型数据实际存放在:
    • Docker Volume:ollama
  • 映射路径:
    • 容器内:/root/.ollama
  • 特点:
    • 容器删除 ≠ 模型丢失
    • 只要 volume 不删,模型永久保留

六、WebUI 访问与验证

1️⃣ 访问 WebUI

在浏览器中打开:

http://<HOST>:<PUBLIC_PORT>

首次访问通常会:

  • 创建管理员账号
  • 或直接进入聊天界面(视版本而定)

2️⃣ 确认模型已接入

在 WebUI 中:

  • 打开模型选择下拉框
  • 确认能看到:
    • qwen2.5:7b

这一步说明:

WebUI → Ollama → 模型 的链路完全打通


七、关于容器显示为 unhealthy

docker ps 中可能看到:

open-webui   Up (...) (unhealthy)

说明:

  • 这是 Docker healthcheck 判定偏严格
  • 实际表现是:
    • HTTP 已 200
    • 页面可访问
    • 模型可用

👉 不影响实际使用,可忽略


八、常见误区总结

❌ 使用 docker compose run 拉模型

  • 会启动临时容器
  • Ollama 服务未启动
  • 容易报错

✅ 正确方式:

docker compose exec ollama ollama pull <model>

❌ 混淆端口职责

  • Ollama 端口:给程序用
  • WebUI 端口:给人用

同主机部署时:

只暴露 WebUI 即可


九、最终状态

至此,系统状态应为:

  • ✅ Ollama 后端运行
  • ✅ 7B 模型下载并持久化
  • ✅ Open WebUI 可访问
  • ✅ 前后端通信正常

后续可继续:

  • 固定镜像版本(避免 latest 漂移)
  • 接入反向代理 / HTTPS
  • 增加更多模型

Leave a Reply

Your email address will not be published. Required fields are marked *