一套配置跑通 Ollama、Open WebUI 和 LiteLLM:Docker 部署实战指南
AI工具 Docker部署教程|附配置文件
随着大语言模型(LLM)和各类 AI 应用的普及,越来越多的团队和个人希望将 AI 工具部署到自己的服务器上,以获得更好的数据隐私、访问速度、可控成本以及二次开发能力。相比传统手动安装方式,Docker 部署具有环境隔离、迁移方便、配置清晰、维护成本低等优点,非常适合 AI 工具的快速上线。
本文将以一个较为通用、实用的 AI 工具部署方案为例,介绍如何使用 Docker Compose 部署一套本地 AI 服务环境。该方案包含:
- Ollama:本地大模型运行服务,可运行 Llama、Qwen、DeepSeek、Gemma 等模型;
- Open WebUI:类似 ChatGPT 的网页聊天界面,支持接入 Ollama;
- LiteLLM:统一大模型 API 网关,可将不同模型服务封装为 OpenAI 兼容接口;
- Nginx:反向代理服务,方便配置域名和 HTTPS;
- 数据持久化目录:防止容器重启或升级后数据丢失。
本文会提供完整目录结构、docker-compose.yml 配置文件、Nginx 配置示例以及常用运维命令,适合个人服务器、内网服务器、开发测试环境使用。
一、部署前准备
在开始部署之前,你需要准备一台 Linux 服务器。推荐配置如下:
| 项目 | 推荐配置 |
|---|---|
| 操作系统 | Ubuntu 20.04 / 22.04 / Debian 11+ / CentOS 7+ |
| CPU | 4 核及以上 |
| 内存 | 8GB 以上,推荐 16GB+ |
| 硬盘 | 50GB 以上可用空间 |
| GPU | 非必需,如需运行大模型建议 NVIDIA GPU |
| 网络 | 能访问 Docker 镜像仓库 |
如果只是体验 7B 级别模型,CPU 也可以运行,但速度较慢。如果要获得较好的推理体验,建议使用带 NVIDIA 显卡的服务器,并安装 NVIDIA Container Toolkit。
二、安装 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
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 -v
docker compose version
2. 设置 Docker 开机自启
sudo systemctl enable docker
sudo systemctl start docker
如果你希望当前用户无需每次使用 sudo 执行 Docker 命令,可以执行:
sudo usermod -aG docker $USER
执行后需要重新登录终端才会生效。
三、项目目录结构
建议在服务器上创建一个专门目录,例如 /opt/ai-tools:
sudo mkdir -p /opt/ai-tools
cd /opt/ai-tools
推荐目录结构如下:
/opt/ai-tools
├── docker-compose.yml
├── .env
├── nginx
│ └── conf.d
│ └── ai-tools.conf
├── data
│ ├── ollama
│ ├── open-webui
│ └── litellm
└── logs
└── nginx
创建目录:
mkdir -p nginx/conf.d
mkdir -p data/ollama data/open-webui data/litellm
mkdir -p logs/nginx
四、环境变量配置文件
在 /opt/ai-tools 目录下创建 .env 文件:
vim .env
写入以下内容:
# Open WebUI 管理员初始化配置
WEBUI_SECRET_KEY=please_change_this_to_a_random_string
# LiteLLM 配置
LITELLM_MASTER_KEY=sk-litellm-master-key-change-me
LITELLM_SALT_KEY=litellm-salt-key-change-me
# 时区
TZ=Asia/Shanghai
# 服务端口
OPEN_WEBUI_PORT=3000
LITELLM_PORT=4000
NGINX_HTTP_PORT=80
这里需要注意:
WEBUI_SECRET_KEY建议修改为复杂随机字符串;LITELLM_MASTER_KEY相当于 API 管理密钥,不要使用默认值;- 如果服务器上 80 端口已经被占用,需要修改
NGINX_HTTP_PORT; - 生产环境建议配合 HTTPS 使用。
五、Docker Compose 配置文件
在 /opt/ai-tools 目录下创建 docker-compose.yml:
vim docker-compose.yml
写入以下配置:
version: "3.9"
services:
ollama:
image: ollama/ollama:latest
container_name: ai-ollama
restart: unless-stopped
environment:
- TZ=${TZ}
volumes:
- ./data/ollama:/root/.ollama
ports:
- "11434:11434"
networks:
- ai-network
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: ai-open-webui
restart: unless-stopped
depends_on:
- ollama
environment:
- TZ=${TZ}
- WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}
- OLLAMA_BASE_URL=http://ollama:11434
volumes:
- ./data/open-webui:/app/backend/data
ports:
- "${OPEN_WEBUI_PORT}:8080"
networks:
- ai-network
litellm:
image: ghcr.io/berriai/litellm:main-latest
container_name: ai-litellm
restart: unless-stopped
depends_on:
- ollama
environment:
- TZ=${TZ}
- LITELLM_MASTER_KEY=${LITELLM_MASTER_KEY}
- LITELLM_SALT_KEY=${LITELLM_SALT_KEY}
volumes:
- ./data/litellm/config.yaml:/app/config.yaml
command:
- "--config=/app/config.yaml"
- "--port=4000"
ports:
- "${LITELLM_PORT}:4000"
networks:
- ai-network
nginx:
image: nginx:1.25-alpine
container_name: ai-nginx
restart: unless-stopped
depends_on:
- open-webui
- litellm
environment:
- TZ=${TZ}
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./logs/nginx:/var/log/nginx
ports:
- "${NGINX_HTTP_PORT}:80"
networks:
- ai-network
networks:
ai-network:
driver: bridge
这个 Compose 文件包含 4 个服务:
ollama:负责模型下载、管理和推理;open-webui:提供可视化聊天页面;litellm:提供统一 API 转发能力;nginx:对外提供统一入口。
六、LiteLLM 配置文件
由于上面的 Compose 文件将 ./data/litellm/config.yaml 挂载到了容器内部,所以需要先创建该配置文件:
vim data/litellm/config.yaml
写入以下内容:
model_list:
- model_name: qwen2.5
litellm_params:
model: ollama/qwen2.5
api_base: http://ollama:11434
- model_name: llama3.1
litellm_params:
model: ollama/llama3.1
api_base: http://ollama:11434
- model_name: deepseek-r1
litellm_params:
model: ollama/deepseek-r1
api_base: http://ollama:11434
general_settings:
master_key: os.environ/LITELLM_MASTER_KEY
database_url: null
litellm_settings:
drop_params: true
set_verbose: false
说明:
model_name是对外暴露的模型名称;model中的ollama/qwen2.5表示调用 Ollama 中的qwen2.5模型;api_base使用 Docker Compose 内部服务名ollama,而不是127.0.0.1;- 如果你没有下载对应模型,请先在 Ollama 中拉取。
七、Nginx 反向代理配置
创建 Nginx 配置文件:
vim nginx/conf.d/ai-tools.conf
写入以下内容:
server {
listen 80;
server_name _;
client_max_body_size 100m;
location / {
proxy_pass http://open-webui:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
location /litellm/ {
rewrite ^/litellm/(.*)$ /$1 break;
proxy_pass http://litellm:4000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
}
配置完成后,访问:
http://服务器IP/
即可进入 Open WebUI 页面。
LiteLLM 的接口地址为:
http://服务器IP/litellm/
如果你需要配置域名,可以将 server_name _; 修改为:
server_name ai.example.com;
然后将域名解析到服务器 IP 即可。
八、启动服务
在 /opt/ai-tools 目录下执行:
docker compose up -d
查看容器状态:
docker compose ps
如果全部服务都是 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 nginx
九、下载并运行 AI 模型
Ollama 启动后,需要下载模型才能使用。进入 Ollama 容器:
docker exec -it ai-ollama bash
拉取模型,例如:
ollama pull qwen2.5
ollama pull llama3.1
ollama pull deepseek-r1
测试模型是否可用:
ollama run qwen2.5
如果模型可以正常回复,说明 Ollama 运行成功。
也可以直接在宿主机执行:
docker exec -it ai-ollama ollama list
查看已经安装的模型:
docker exec -it ai-ollama ollama list
删除不需要的模型:
docker exec -it ai-ollama ollama rm qwen2.5
十、访问 Open WebUI
打开浏览器访问:
http://服务器IP/
首次访问需要注册管理员账号。注册完成后,进入设置页面,可以看到 Open WebUI 已经连接到 Ollama。
如果模型列表没有显示,可以检查:
- Ollama 容器是否正常运行;
- 模型是否已经下载;
- Open WebUI 的环境变量
OLLAMA_BASE_URL是否正确; - Docker 网络是否正常;
- 查看 Open WebUI 日志排查问题。
常用检查命令:
docker compose logs -f open-webui
docker compose logs -f ollama
十一、测试 LiteLLM API
LiteLLM 可以将本地 Ollama 模型转换为 OpenAI 兼容接口,方便其他应用调用。
假设你的服务器 IP 是 192.168.1.100,可以使用以下命令测试:
curl http://192.168.1.100/litellm/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-litellm-master-key-change-me" \
-d '{
"model": "qwen2.5",
"messages": [
{
"role": "user",
"content": "请用一句话介绍 Docker 部署 AI 工具的优势"
}
]
}'
如果返回模型生成内容,说明 LiteLLM 已经部署成功。
在其他支持 OpenAI API 的工具中,可以这样配置:
Base URL: http://服务器IP/litellm/v1
API Key: .env 中的 LITELLM_MASTER_KEY
Model: qwen2.5
这样就可以让第三方工具通过 OpenAI 格式调用你的本地模型。
十二、启用 GPU 加速,可选
如果服务器安装了 NVIDIA GPU,可以使用 GPU 加速 Ollama 推理。首先确认宿主机可以识别显卡:
nvidia-smi
然后安装 NVIDIA Container Toolkit。Ubuntu 示例:
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/stable/deb/nvidia-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
environment:
- TZ=${TZ}
volumes:
- ./data/ollama:/root/.ollama
ports:
- "11434:11434"
networks:
- ai-network
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
保存后重启:
docker compose down
docker compose up -d
再次查看日志:
docker compose logs -f ollama
如果日志中显示使用 GPU,说明配置成功。
十三、配置 HTTPS,生产环境推荐
如果你要将服务暴露到公网,强烈建议配置 HTTPS。可以使用宿主机上的 Certbot,也可以使用 Nginx Proxy Manager、Traefik、Caddy 等工具。
这里给出一种简单思路:
- 将域名解析到服务器;
- 使用 Certbot 申请证书;
- 将证书目录挂载到 Nginx 容器;
- 在 Nginx 配置中监听 443;
- 配置 HTTP 自动跳转 HTTPS。
示例 Nginx HTTPS 配置如下:
server {
listen 80;
server_name ai.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name ai.example.com;
ssl_certificate /etc/nginx/certs/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/privkey.pem;
client_max_body_size 100m;
location / {
proxy_pass http://open-webui:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
location /litellm/ {
rewrite ^/litellm/(.*)$ /$1 break;
proxy_pass http://litellm:4000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
}
生产环境还建议限制后台访问 IP、配置防火墙、开启登录认证,并定期备份数据目录。
十四、常用运维命令
1. 启动服务
docker compose up -d
2. 停止服务
docker compose down
3. 重启服务
docker compose restart
4. 更新镜像
docker compose pull
docker compose up -d
5. 查看容器资源占用
docker stats
6. 查看磁盘占用
du -sh data/*
7. 清理未使用镜像
docker image prune -a
执行清理前请确认不再需要相关镜像,避免误删。
十五、数据备份与迁移
这套部署方案将核心数据都放在 /opt/ai-tools/data 目录下,因此备份非常简单。
停止服务:
cd /opt/ai-tools
docker compose down
打包数据:
tar -czvf ai-tools-backup.tar.gz data docker-compose.yml .env nginx
迁移到新服务器后,解压并启动:
tar -xzvf ai-tools-backup.tar.gz
docker compose up -d
如果模型文件较大,备份体积也会很大。你可以只备份 Open WebUI 数据和配置文件,模型在新服务器重新拉取。
十六、常见问题排查
1. Open WebUI 无法连接 Ollama
检查 docker-compose.yml 中是否配置:
- OLLAMA_BASE_URL=http://ollama:11434
注意这里不能写成 localhost。在 Docker 容器内部,localhost 指的是当前容器自身,而不是宿主机或其他容器。
2. LiteLLM 调用模型失败
检查模型是否已经被 Ollama 下载:
docker exec -it ai-ollama ollama list
同时确认 data/litellm/config.yaml 中模型名称与 Ollama 模型名称一致。
3. 容器启动失败
查看日志:
docker compose logs -f 服务名
例如:
docker compose logs -f litellm
如果是配置文件格式问题,通常日志中会有 YAML 解析错误。注意 YAML 对缩进非常敏感,建议使用两个空格缩进,不要混用 Tab。
4. 模型回复速度很慢
可能原因包括:
- 使用 CPU 推理;
- 内存不足导致频繁交换;
- 模型参数量过大;
- 并发请求过多;
- 磁盘 I/O 性能较差。
可以尝试使用更小模型,例如 1.5B、3B、7B 版本;如果有 GPU,建议启用 GPU 加速。
5. 端口被占用
查看端口占用:
sudo lsof -i:80
sudo lsof -i:3000
sudo lsof -i:4000
如果端口被占用,可以修改 .env 文件中的端口配置,然后重启服务。
十七、安全建议
如果 AI 服务部署在公网,一定要注意安全问题:
- 修改默认密钥:不要使用示例中的默认
LITELLM_MASTER_KEY; - 开启 HTTPS:避免 API Key 和会话内容被明文传输;
- 限制访问来源:通过防火墙或 Nginx 限制 IP;
- 定期更新镜像:修复已知安全漏洞;
- 不要暴露 Ollama 端口:生产环境建议移除
11434:11434的端口映射,仅允许容器内部访问; - 定期备份数据:尤其是 Open WebUI 用户数据和配置文件;
- 控制模型调用权限:避免 API 被滥用导致服务器资源被耗尽。
如果只是在内网使用,可以关闭公网访问,仅通过 VPN、ZeroTier、Tailscale 等方式连接。
十八、完整配置文件汇总
1. .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
TZ=Asia/Shanghai
OPEN_WEBUI_PORT=3000
LITELLM_PORT=4000
NGINX_HTTP_PORT=80
2. docker-compose.yml
version: "3.9"
services:
ollama:
image: ollama/ollama:latest
container_name: ai-ollama
restart: unless-stopped
environment:
- TZ=${TZ}
volumes:
- ./data/ollama:/root/.ollama
ports:
- "11434:11434"
networks:
- ai-network
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: ai-open-webui
restart: unless-stopped
depends_on:
- ollama
environment:
- TZ=${TZ}
- WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}
- OLLAMA_BASE_URL=http://ollama:11434
volumes:
- ./data/open-webui:/app/backend/data
ports:
- "${OPEN_WEBUI_PORT}:8080"
networks:
- ai-network
litellm:
image: ghcr.io/berriai/litellm:main-latest
container_name: ai-litellm
restart: unless-stopped
depends_on:
- ollama
environment:
- TZ=${TZ}
- LITELLM_MASTER_KEY=${LITELLM_MASTER_KEY}
- LITELLM_SALT_KEY=${LITELLM_SALT_KEY}
volumes:
- ./data/litellm/config.yaml:/app/config.yaml
command:
- "--config=/app/config.yaml"
- "--port=4000"
ports:
- "${LITELLM_PORT}:4000"
networks:
- ai-network
nginx:
image: nginx:1.25-alpine
container_name: ai-nginx
restart: unless-stopped
depends_on:
- open-webui
- litellm
environment:
- TZ=${TZ}
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./logs/nginx:/var/log/nginx
ports:
- "${NGINX_HTTP_PORT}:80"
networks:
- ai-network
networks:
ai-network:
driver: bridge
3. data/litellm/config.yaml
model_list:
- model_name: qwen2.5
litellm_params:
model: ollama/qwen2.5
api_base: http://ollama:11434
- model_name: llama3.1
litellm_params:
model: ollama/llama3.1
api_base: http://ollama:11434
general_settings:
master_key: os.environ/LITELLM_MASTER_KEY
database_url: null
litellm_settings:
drop_params: true
set_verbose: false
4. nginx/conf.d/ai-tools.conf
server {
listen 80;
server_name _;
client_max_body_size 100m;
location / {
proxy_pass http://open-webui:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
location /litellm/ {
rewrite ^/litellm/(.*)$ /$1 break;
proxy_pass http://litellm:4000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
}
十九、总结
通过本文的配置,我们使用 Docker Compose 部署了一套完整的 AI 工具环境,包括本地模型服务 Ollama、网页聊天界面 Open WebUI、统一模型 API 网关 LiteLLM 以及 Nginx 反向代理。该方案的优势在于结构清晰、易于维护、方便迁移,并且可以根据实际需求扩展更多 AI 应用。
对于个人用户而言,这套环境可以作为本地知识助手、代码助手、写作助手使用;对于团队而言,可以作为内部 AI 能力平台的基础版本,用于统一接入本地模型或第三方模型 API。
后续你还可以继续扩展:
- 接入向量数据库,如 Milvus、Qdrant、Weaviate;
- 部署知识库问答系统,如 Dify、FastGPT、AnythingLLM;
- 接入图像生成工具,如 Stable Diffusion WebUI、ComfyUI;
- 使用 PostgreSQL、Redis 提升系统稳定性;
- 使用 Prometheus、Grafana 做监控;
- 使用 Traefik 或 Caddy 自动管理 HTTPS 证书。
如果你希望快速搭建一套可用、可控、可扩展的 AI 工具平台,Docker Compose 是非常推荐的部署方式。只要合理规划配置文件、数据目录和安全策略,就可以在较短时间内完成从模型运行到 Web 访问,再到 API 调用的完整闭环。