从零搭一套本地 AI 工具箱:Docker Compose 部署 Ollama、WebUI、LiteLLM 和 Qdrant 配置实战
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
注意:
WEBUI_SECRET_KEY建议改成随机字符串;LITELLM_MASTER_KEY是 LiteLLM API 的主密钥,不要使用默认值;- 如果服务器暴露在公网,请务必配置防火墙或反向代理鉴权;
.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.yml 的 litellm.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 场景,例如:
- 将文档切分成文本块;
- 使用 Embedding 模型将文本转换成向量;
- 将向量和原始文本存入 Qdrant;
- 用户提问时,将问题也转换成向量;
- 从 Qdrant 中检索相关内容;
- 把检索结果交给大模型生成最终回答。
十三、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. 模型列表为空
可能原因:
- Ollama 还没有下载模型;
- 模型下载失败;
- 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 推理,大模型回复慢是正常现象。可以尝试:
- 换用更小模型;
- 使用量化模型;
- 增加内存;
- 使用 NVIDIA GPU;
- 减少上下文长度;
- 避免多人同时请求。
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 和数据目录,就可以在不同服务器之间快速迁移和恢复。