一、为什么选 Ollama + OpenWebUI

Ollama 负责在本机或服务器上拉起与管理大模型(拉取、运行、OpenAI 兼容 API);OpenWebUI(原 Ollama WebUI)提供类 ChatGPT 的对话界面、多会话、知识库与工具扩展。二者用 Docker 组合后,可以快速搭一套私有、可自托管的本地大模型工作台,适合团队内测、Agent 联调与敏感数据不出网场景。

二、环境准备

建议机器至少具备:

  • Docker Engine 24+ 与 Docker Compose v2
  • CPU 推理:8GB+ 内存;若跑 7B~14B 模型更建议 16GB+
  • GPU(可选):NVIDIA 驱动 + nvidia-container-toolkit,显存按模型尺寸预留
  • 磁盘:模型文件较大,预留 30GB+ 空闲空间

确认基础命令可用:

docker version
docker compose version

三、目录与 Compose 编排

新建工作目录,例如 ~/ai-stack,写入 docker-compose.yml:

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    restart: unless-stopped
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    # GPU 可选:取消下面注释(需已安装 nvidia-container-toolkit)
    # deploy:
    #   resources:
    #     reservations:
    #       devices:
    #         - driver: nvidia
    #           count: all
    #           capabilities: [gpu]

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    restart: unless-stopped
    depends_on:
      - ollama
    ports:
      - "3000:8080"
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
      # 首次访问需注册管理员;生产环境请自行改密与反向代理 HTTPS
    volumes:
      - open_webui_data:/app/backend/data

volumes:
  ollama_data:
  open_webui_data:

说明:OpenWebUI 容器内通过服务名 ollama 访问 API,比写宿主机 IP 更稳;对外只暴露 3000(Web)与必要时的 11434(API)。

四、启动与拉取模型

在编排目录执行:

docker compose up -d
docker compose ps
docker compose logs -f ollama

进入 Ollama 容器拉取模型(按机器配置选择体量):

# 轻量入门(CPU 也可试)
docker exec -it ollama ollama pull llama3.2:3b

# 常用对话 / 代码辅助(需更大内存或 GPU)
docker exec -it ollama ollama pull qwen2.5:7b
docker exec -it ollama ollama list

浏览器打开 http://服务器IP:3000,完成 OpenWebUI 首次管理员注册,在模型列表中应能看到已拉取的模型。

五、联调检查清单

  1. API 探活:curl http://127.0.0.1:11434/api/tags 应返回模型列表。
  2. 对话通路:在 OpenWebUI 新建会话,选中模型,发送一句「用三句话介绍你自己」,确认流式输出正常。
  3. 跨容器连通:若 WebUI 报连不上 Ollama,检查 OLLAMA_BASE_URL 是否为 http://ollama:11434,以及两容器是否在同一 Compose 网络。
  4. 资源:首次推理时用 docker stats 观察 CPU/内存;OOM 时换更小模型或加内存/GPU。

六、生产向加固(建议做)

  • 不要对公网裸奔 11434:仅内网或经反向代理鉴权后暴露;Web 端走 Nginx/Caddy + HTTPS。
  • 账号与权限:OpenWebUI 开启注册限制或关闭公开注册;管理员密码使用高强度口令。
  • 数据备份:定期备份 ollama_data 与 open_webui_data 两个 volume。
  • 版本钉死:生产将 latest/main 改为具体镜像 tag,避免静默升级踩坑。
  • GPU 机器:确认 nvidia-smi 在宿主机正常,再启用 Compose 中的 GPU 段。

七、和 Agent 工程的衔接

Ollama 提供 OpenAI 兼容接口后,可把 base_url 指到 http://host:11434/v1,供自研 Agent、Hermes 类框架或企业内部工具调用。OpenWebUI 适合人工评测与知识库试跑;自动化链路建议直连 Ollama API,把「对话产品」与「Agent 运行时」分层,便于观测与限流。

八、常见问题

模型列表为空:先 ollama list 确认已 pull;OpenWebUI 设置里检查 Ollama URL,必要时重启 open-webui 容器。

下载极慢或失败:检查机器出网与磁盘空间;可换网络窗口重试,或在可访问环境拉好模型后迁移 volume。

CPU 推理极慢:属正常现象,优先换小参数模型,或上 GPU / 更高主频机器。

升级后配置丢失:确认 volume 挂载未改名;升级前先 docker compose pull 再 up -d,并保留旧 compose 备份。

九、小结

一套最小可用路径是:Compose 拉起 Ollama + OpenWebUI → pull 小模型 → 浏览器验证对话 → 再按需加 GPU、HTTPS 与 Agent API 对接。把「能跑起来」和「能稳、能管、能接业务」分开迭代,本地大模型栈会 remake 得更顺。