上一篇 下一篇 分享链接 返回 返回顶部

从零搭一套本地 AI 工具箱:Docker Compose 部署 Ollama、WebUI、LiteLLM 和 Qdrant 配置实战

发布人:慈云数据-客服中心 发布时间:9小时前 阅读量:2

AI工具 Docker部署教程|附配置文件

随着大模型应用的普及,越来越多团队希望在本地服务器或云服务器上部署一套可控、可扩展、易维护的 AI 工具环境。相比直接在宿主机安装各种依赖,使用 Docker 部署 AI 工具具备更好的隔离性、可迁移性和稳定性。本文将以一套常见的 AI 工具组合为例,介绍如何通过 Docker Compose 快速部署本地 AI 服务。

本文部署方案包含以下组件:

  • Ollama:用于本地运行大语言模型,例如 Llama、Qwen、Mistral 等;
  • Open WebUI:一个类 ChatGPT 的网页交互界面,可连接 Ollama 使用;
  • LiteLLM:统一大模型 API 网关,可兼容 OpenAI API 格式;
  • Qdrant:向量数据库,可用于知识库、RAG 检索增强生成;
  • Docker Compose:统一编排多个容器服务。

通过本文,你可以搭建一套较完整的 AI 工具基础环境,适合个人学习、团队内网试用、私有化 AI 助手、知识库问答系统等场景。


一、部署架构说明

本教程采用 Docker Compose 一键部署,整体架构如下:

用户浏览器
   ↓
Open WebUI
   ↓
Ollama 本地模型服务
   ↓
本地大语言模型

应用服务 / 脚本
   ↓
LiteLLM API 网关
   ↓
Ollama / OpenAI / 其他模型服务

知识库应用
   ↓
Qdrant 向量数据库

各服务作用如下:

服务 作用 默认端口
Ollama 本地大模型运行服务 11434
Open WebUI Web 聊天界面 3000
LiteLLM OpenAI 兼容 API 网关 4000
Qdrant 向量数据库 6333

如果你只是想体验本地 AI 聊天,部署 Ollama + Open WebUI 即可;如果你还想开发 AI 应用、统一调用多家模型接口,可以加入 LiteLLM;如果你要构建知识库问答系统,可以加入 Qdrant


二、服务器环境要求

部署前建议准备如下环境:

1. 基础配置

最低配置:

CPU:4 核
内存:8GB
磁盘:50GB
系统:Ubuntu 20.04 / Ubuntu 22.04 / Debian / CentOS

推荐配置:

CPU:8 核及以上
内存:16GB 或 32GB
磁盘:100GB SSD
GPU:NVIDIA 显卡,显存 8GB 以上

如果没有 GPU,也可以使用 CPU 运行小模型,但推理速度会明显较慢。个人测试或轻量使用可以选择 7B 以下模型,例如:

  • qwen2.5:7b
  • llama3.1:8b
  • mistral:7b
  • gemma2:9b

如果服务器有 NVIDIA GPU,需要提前安装 NVIDIA 驱动和 NVIDIA Container Toolkit,才能让 Docker 容器使用 GPU。


三、安装 Docker 与 Docker Compose

如果你的服务器尚未安装 Docker,可以参考以下命令。

1. Ubuntu / Debian 安装 Docker

sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release

sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

安装完成后查看版本:

docker version
docker compose version

启动 Docker:

sudo systemctl enable docker
sudo systemctl start docker

为了避免每次执行 Docker 命令都加 sudo,可以把当前用户加入 docker 用户组:

sudo usermod -aG docker $USER

执行后需要退出终端并重新登录。


四、创建项目目录

建议将所有 AI 工具相关文件放在一个独立目录中,例如:

mkdir -p /opt/ai-tools
cd /opt/ai-tools

创建目录结构:

mkdir -p data/ollama
mkdir -p data/open-webui
mkdir -p data/qdrant
mkdir -p litellm

最终目录大致如下:

/opt/ai-tools
├── docker-compose.yml
├── .env
├── litellm
│   └── config.yaml
└── data
    ├── ollama
    ├── open-webui
    └── qdrant

五、环境变量配置文件

/opt/ai-tools 目录下创建 .env 文件:

vim .env

写入以下内容:

# 项目名称
COMPOSE_PROJECT_NAME=ai-tools

# Open WebUI 配置
OPEN_WEBUI_PORT=3000
WEBUI_SECRET_KEY=please_change_this_to_a_random_string

# Ollama 配置
OLLAMA_PORT=11434

# LiteLLM 配置
LITELLM_PORT=4000
LITELLM_MASTER_KEY=sk-litellm-master-key-change-me
LITELLM_SALT_KEY=litellm-salt-key-change-me

# Qdrant 配置
QDRANT_PORT=6333
QDRANT_GRPC_PORT=6334

注意:

  1. WEBUI_SECRET_KEY 建议改成随机字符串;
  2. LITELLM_MASTER_KEY 是 LiteLLM API 的主密钥,不要使用默认值;
  3. 如果服务器暴露在公网,请务必配置防火墙或反向代理鉴权;
  4. .env 文件不要提交到公开代码仓库。

六、Docker Compose 配置文件

/opt/ai-tools 目录下创建 docker-compose.yml

vim docker-compose.yml

写入以下配置:

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ai-ollama
    restart: unless-stopped
    ports:
      - "${OLLAMA_PORT}:11434"
    volumes:
      - ./data/ollama:/root/.ollama
    environment:
      - OLLAMA_HOST=0.0.0.0
    networks:
      - ai-network

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: ai-open-webui
    restart: unless-stopped
    ports:
      - "${OPEN_WEBUI_PORT}:8080"
    volumes:
      - ./data/open-webui:/app/backend/data
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
      - WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}
      - ENABLE_SIGNUP=true
    depends_on:
      - ollama
    networks:
      - ai-network

  litellm:
    image: ghcr.io/berriai/litellm:main-latest
    container_name: ai-litellm
    restart: unless-stopped
    ports:
      - "${LITELLM_PORT}:4000"
    volumes:
      - ./litellm/config.yaml:/app/config.yaml
    command:
      - "--config=/app/config.yaml"
      - "--port=4000"
      - "--host=0.0.0.0"
    environment:
      - LITELLM_MASTER_KEY=${LITELLM_MASTER_KEY}
      - LITELLM_SALT_KEY=${LITELLM_SALT_KEY}
    depends_on:
      - ollama
    networks:
      - ai-network

  qdrant:
    image: qdrant/qdrant:latest
    container_name: ai-qdrant
    restart: unless-stopped
    ports:
      - "${QDRANT_PORT}:6333"
      - "${QDRANT_GRPC_PORT}:6334"
    volumes:
      - ./data/qdrant:/qdrant/storage
    networks:
      - ai-network

networks:
  ai-network:
    driver: bridge

这个配置完成了四个服务的部署编排:

  • ollama 负责运行本地模型;
  • open-webui 负责提供网页聊天界面;
  • litellm 负责提供统一 API;
  • qdrant 负责存储向量数据。

七、LiteLLM 配置文件

接下来创建 LiteLLM 的模型配置文件:

vim litellm/config.yaml

写入以下内容:

model_list:
  - model_name: qwen-local
    litellm_params:
      model: ollama/qwen2.5:7b
      api_base: http://ollama:11434

  - model_name: llama-local
    litellm_params:
      model: ollama/llama3.1:8b
      api_base: http://ollama:11434

general_settings:
  master_key: os.environ/LITELLM_MASTER_KEY

litellm_settings:
  drop_params: true
  set_verbose: false

这里配置了两个本地模型:

LiteLLM 调用名称 对应 Ollama 模型
qwen-local qwen2.5:7b
llama-local llama3.1:8b

需要注意的是,配置文件中的模型必须先在 Ollama 中下载,否则调用时会失败。后面会介绍如何拉取模型。

如果你还想接入 OpenAI、Claude、Gemini、DeepSeek 等云端模型,也可以在 LiteLLM 中继续增加配置。例如接入 OpenAI:

model_list:
  - model_name: gpt-4o-mini
    litellm_params:
      model: openai/gpt-4o-mini
      api_key: os.environ/OPENAI_API_KEY

然后在 docker-compose.ymllitellm.environment 中添加:

- OPENAI_API_KEY=你的API_KEY

生产环境中更推荐放到 .env 文件里统一管理。


八、启动服务

/opt/ai-tools 目录下执行:

docker compose up -d

查看容器状态:

docker compose ps

如果一切正常,可以看到类似输出:

NAME             IMAGE                              STATUS
ai-ollama        ollama/ollama:latest              Up
ai-open-webui    ghcr.io/open-webui/open-webui     Up
ai-litellm       ghcr.io/berriai/litellm           Up
ai-qdrant        qdrant/qdrant                     Up

查看日志:

docker compose logs -f

单独查看某个服务日志:

docker compose logs -f ollama
docker compose logs -f open-webui
docker compose logs -f litellm
docker compose logs -f qdrant

九、下载本地模型

容器启动后,需要进入 Ollama 容器下载模型。

1. 下载 Qwen 模型

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

2. 下载 Llama 模型

docker exec -it ai-ollama ollama pull llama3.1:8b

3. 查看已安装模型

docker exec -it ai-ollama ollama list

输出示例:

NAME              ID              SIZE
qwen2.5:7b        xxxxxxxx        4.7 GB
llama3.1:8b       xxxxxxxx        4.9 GB

模型下载完成后,就可以通过 Open WebUI 或 LiteLLM 调用了。


十、访问 Open WebUI

浏览器访问:

http://服务器IP:3000

首次访问时需要创建管理员账号。注册完成后,即可进入聊天界面。

如果前面配置无误,Open WebUI 会自动连接到 Ollama。你可以在模型列表中选择已经下载的模型,例如:

  • qwen2.5:7b
  • llama3.1:8b

然后输入问题进行测试。

例如:

请用中文介绍一下 Docker Compose 的作用。

如果模型正常返回内容,说明部署成功。


十一、通过 LiteLLM 调用本地模型

LiteLLM 的作用是将不同模型服务统一成类似 OpenAI 的调用方式。这样你的应用只需要适配 OpenAI API,就可以切换调用本地 Ollama、OpenAI、Claude 或其他模型。

LiteLLM 默认访问地址:

http://服务器IP:4000

1. 查看模型列表

使用 curl 测试:

curl http://服务器IP:4000/v1/models \
  -H "Authorization: Bearer sk-litellm-master-key-change-me"

如果你修改了 .env 里的 LITELLM_MASTER_KEY,这里要替换成你自己的值。

2. 测试聊天接口

curl http://服务器IP:4000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-litellm-master-key-change-me" \
  -d '{
    "model": "qwen-local",
    "messages": [
      {
        "role": "user",
        "content": "请用三句话介绍一下本地大模型部署的优势。"
      }
    ]
  }'

如果返回类似 OpenAI 格式的 JSON,说明 LiteLLM 已经正常代理 Ollama。


十二、Qdrant 向量数据库测试

Qdrant 部署完成后,可以访问:

http://服务器IP:6333/dashboard

如果页面正常打开,说明 Qdrant 已启动。

也可以通过接口测试:

curl http://服务器IP:6333/collections

返回示例:

{
  "result": {
    "collections": []
  },
  "status": "ok",
  "time": 0.001
}

Qdrant 通常用于 RAG 场景,例如:

  1. 将文档切分成文本块;
  2. 使用 Embedding 模型将文本转换成向量;
  3. 将向量和原始文本存入 Qdrant;
  4. 用户提问时,将问题也转换成向量;
  5. 从 Qdrant 中检索相关内容;
  6. 把检索结果交给大模型生成最终回答。

十三、GPU 加速配置

如果服务器有 NVIDIA GPU,建议启用 GPU 加速。首先确认宿主机可以识别显卡:

nvidia-smi

如果命令正常输出显卡信息,再安装 NVIDIA Container Toolkit。

Ubuntu 示例:

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
  | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container-toolkit.list \
  | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
  | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt update
sudo apt install -y nvidia-container-toolkit

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

然后修改 docker-compose.yml 中的 ollama 服务,增加 GPU 配置:

  ollama:
    image: ollama/ollama:latest
    container_name: ai-ollama
    restart: unless-stopped
    ports:
      - "${OLLAMA_PORT}:11434"
    volumes:
      - ./data/ollama:/root/.ollama
    environment:
      - OLLAMA_HOST=0.0.0.0
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    networks:
      - ai-network

修改后重启服务:

docker compose down
docker compose up -d

查看 Ollama 是否使用 GPU:

docker logs -f ai-ollama

或者在模型推理时通过宿主机执行:

nvidia-smi

如果看到显存占用增加,说明 GPU 已经生效。


十四、常用运维命令

1. 启动服务

docker compose up -d

2. 停止服务

docker compose down

3. 重启服务

docker compose restart

4. 更新镜像

docker compose pull
docker compose up -d

5. 查看日志

docker compose logs -f

6. 查看资源占用

docker stats

7. 进入容器

docker exec -it ai-ollama bash
docker exec -it ai-open-webui bash
docker exec -it ai-litellm bash
docker exec -it ai-qdrant bash

十五、安全建议

如果你只是在本机或内网使用,默认配置基本够用。但如果服务部署在公网服务器上,一定要注意安全。

建议至少做好以下几点:

1. 不要直接暴露核心端口

例如:

  • Ollama 11434
  • LiteLLM 4000
  • Qdrant 6333

这些服务如果直接暴露公网,可能被他人滥用,造成数据泄露或资源消耗。

2. 使用防火墙限制访问

例如只允许自己的 IP 访问:

sudo ufw allow from 你的IP to any port 3000
sudo ufw allow from 你的IP to any port 4000
sudo ufw enable

3. 修改默认密钥

.env 中的以下字段必须修改:

WEBUI_SECRET_KEY=please_change_this_to_a_random_string
LITELLM_MASTER_KEY=sk-litellm-master-key-change-me
LITELLM_SALT_KEY=litellm-salt-key-change-me

4. 配置 HTTPS

生产环境建议使用 Nginx、Caddy 或 Traefik 做反向代理,并配置 HTTPS 证书。

5. 禁用公开注册

如果 Open WebUI 面向多人使用,初次创建管理员后可以将注册关闭:

- ENABLE_SIGNUP=false

修改配置后重启:

docker compose up -d

十六、常见问题排查

1. Open WebUI 无法连接 Ollama

检查 docker-compose.yml 中是否配置:

- OLLAMA_BASE_URL=http://ollama:11434

注意在 Docker Compose 网络中,应该使用服务名 ollama,而不是 localhost

查看 Ollama 是否正常:

docker compose logs -f ollama

测试接口:

curl http://localhost:11434/api/tags

2. 模型列表为空

可能原因:

  1. Ollama 还没有下载模型;
  2. 模型下载失败;
  3. Open WebUI 没有刷新模型列表。

解决方法:

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

然后刷新 Open WebUI 页面。


3. LiteLLM 调用模型失败

先检查 LiteLLM 日志:

docker compose logs -f litellm

常见原因包括:

  • config.yaml 中模型名称写错;
  • Ollama 中未下载对应模型;
  • api_base 地址写错;
  • 请求时未携带正确的 Authorization Token。

4. 模型回复速度很慢

如果使用 CPU 推理,大模型回复慢是正常现象。可以尝试:

  1. 换用更小模型;
  2. 使用量化模型;
  3. 增加内存;
  4. 使用 NVIDIA GPU;
  5. 减少上下文长度;
  6. 避免多人同时请求。

5. 容器启动后立即退出

查看对应服务日志:

docker compose logs 服务名

例如:

docker compose logs litellm

通常是配置文件格式错误、端口冲突、权限不足或环境变量缺失导致。


十七、完整配置汇总

为了方便复制,下面给出完整配置。

1. .env

COMPOSE_PROJECT_NAME=ai-tools

OPEN_WEBUI_PORT=3000
WEBUI_SECRET_KEY=please_change_this_to_a_random_string

OLLAMA_PORT=11434

LITELLM_PORT=4000
LITELLM_MASTER_KEY=sk-litellm-master-key-change-me
LITELLM_SALT_KEY=litellm-salt-key-change-me

QDRANT_PORT=6333
QDRANT_GRPC_PORT=6334

2. docker-compose.yml

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ai-ollama
    restart: unless-stopped
    ports:
      - "${OLLAMA_PORT}:11434"
    volumes:
      - ./data/ollama:/root/.ollama
    environment:
      - OLLAMA_HOST=0.0.0.0
    networks:
      - ai-network

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: ai-open-webui
    restart: unless-stopped
    ports:
      - "${OPEN_WEBUI_PORT}:8080"
    volumes:
      - ./data/open-webui:/app/backend/data
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
      - WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}
      - ENABLE_SIGNUP=true
    depends_on:
      - ollama
    networks:
      - ai-network

  litellm:
    image: ghcr.io/berriai/litellm:main-latest
    container_name: ai-litellm
    restart: unless-stopped
    ports:
      - "${LITELLM_PORT}:4000"
    volumes:
      - ./litellm/config.yaml:/app/config.yaml
    command:
      - "--config=/app/config.yaml"
      - "--port=4000"
      - "--host=0.0.0.0"
    environment:
      - LITELLM_MASTER_KEY=${LITELLM_MASTER_KEY}
      - LITELLM_SALT_KEY=${LITELLM_SALT_KEY}
    depends_on:
      - ollama
    networks:
      - ai-network

  qdrant:
    image: qdrant/qdrant:latest
    container_name: ai-qdrant
    restart: unless-stopped
    ports:
      - "${QDRANT_PORT}:6333"
      - "${QDRANT_GRPC_PORT}:6334"
    volumes:
      - ./data/qdrant:/qdrant/storage
    networks:
      - ai-network

networks:
  ai-network:
    driver: bridge

3. litellm/config.yaml

model_list:
  - model_name: qwen-local
    litellm_params:
      model: ollama/qwen2.5:7b
      api_base: http://ollama:11434

  - model_name: llama-local
    litellm_params:
      model: ollama/llama3.1:8b
      api_base: http://ollama:11434

general_settings:
  master_key: os.environ/LITELLM_MASTER_KEY

litellm_settings:
  drop_params: true
  set_verbose: false

十八、总结

通过 Docker Compose,我们可以非常方便地部署一套完整的 AI 工具环境。本文提供的方案同时覆盖了本地模型运行、网页聊天界面、统一 API 网关和向量数据库,既适合个人搭建本地 AI 助手,也适合团队内部进行 AI 应用原型开发。

如果你是初学者,可以先部署 Ollama + Open WebUI,快速体验本地大模型聊天;如果你是开发者,可以进一步使用 LiteLLM 将本地模型封装为 OpenAI 兼容接口;如果你要构建企业知识库、文档问答或智能客服,则可以加入 Qdrant 实现向量检索能力。

后续可以在此基础上继续扩展:

  • 接入 Nginx/Caddy 实现 HTTPS;
  • 使用 Dify、FastGPT、LangChain、LlamaIndex 构建 AI 应用;
  • 接入更多云端模型;
  • 使用 GPU 提升推理速度;
  • 配置监控、日志和备份策略。

这套 Docker 部署方式最大的优点是清晰、稳定、可复制。只要保留好 docker-compose.yml.env 和数据目录,就可以在不同服务器之间快速迁移和恢复。

目录结构
全文