1. 项目概述
在本地部署大语言模型时,Ollama凭借其简洁的API和高效的模型管理能力,已经成为开发者首选的工具之一。而Open WebUI则为Ollama提供了直观易用的图形界面,大大降低了使用门槛。然而在实际部署过程中,我们常常会遇到两个主要痛点:一是从官方源拉取镜像和模型速度缓慢;二是缺乏针对高性能硬件的优化配置方案。
本文将分享一套经过实战验证的完整部署方案,通过DaoCloud镜像加速服务解决下载速度问题,同时提供针对多核CPU和大内存服务器的优化配置参数。这套方案已经在我们的生产环境中稳定运行数月,支持了包括Qwen3-Coder在内的多个大模型的日常使用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与基础配置
2.1 系统要求
在开始部署前,请确保你的服务器满足以下最低配置要求:
- 操作系统:Ubuntu 20.04 LTS或更高版本(其他Linux发行版也可,但命令可能需要调整)
- Docker版本:20.10.0或更高
- 硬件配置:建议至少64核CPU和128GB内存(具体配置可根据模型大小调整)
- 存储空间:建议预留100GB以上空间用于模型存储
提示:虽然Ollama可以在配置较低的机器上运行,但大模型推理对计算资源要求很高。我们建议使用配备NVIDIA GPU的服务器以获得更好的性能。
2.2 Docker安装与验证
如果你的系统尚未安装Docker,可以执行以下命令进行安装:
bash复制# 卸载旧版本(如有)
sudo apt-get remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
# 添加Docker官方GPG密钥
sudo mkdir -p /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
# 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 验证安装
sudo docker run hello-world
安装完成后,建议将当前用户加入docker组,避免每次都需要sudo:
bash复制sudo usermod -aG docker $USER
newgrp docker
3. Docker镜像加速配置
3.1 配置国内镜像源
国内从Docker Hub拉取镜像速度较慢,我们可以通过配置多个国内镜像源来加速下载。编辑Docker的配置文件:
bash复制sudo nano /etc/docker/daemon.json
将以下内容添加到文件中(如果文件已存在,请确保合并registry-mirrors数组):
json复制{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
保存后,重新加载Docker配置并重启服务:
bash复制sudo systemctl daemon-reload
sudo systemctl restart docker
3.2 验证镜像加速
可以通过以下命令验证镜像加速是否生效:
bash复制docker info | grep -A 1 "Registry Mirrors"
如果输出中显示了刚才配置的镜像地址,说明配置成功。
4. Ollama容器部署
4.1 拉取Ollama镜像
使用DaoCloud加速拉取Ollama官方镜像:
bash复制docker pull docker.m.daocloud.io/ollama/ollama:latest
注意:这里的
docker.m.daocloud.io前缀表示通过DaoCloud的镜像代理服务拉取镜像,速度会比直接从Docker Hub拉取快很多。
4.2 启动Ollama容器
以下是针对高性能服务器的优化启动命令:
bash复制docker run -d \
--name ollama \
--cpus="64" \
--memory="128g" \
--shm-size="64g" \
-p 18888:18888 \
-v ollama:/root/work/yq/ollama/data/.ollama \
-e OLLAMA_HOST="0.0.0.0:18888" \
-e OLLAMA_NUM_PARALLEL=24 \
docker.m.daocloud.io/ollama/ollama:latest
参数说明表格:
| 参数 | 说明 | 推荐值 |
|---|---|---|
--cpus |
限制容器使用的CPU核心数 | 根据服务器实际核心数设置,建议不超过物理核心数的80% |
--memory |
限制容器使用的内存大小 | 根据服务器内存配置,建议预留部分内存给系统和其他服务 |
--shm-size |
设置共享内存大小 | 对大模型推理至关重要,建议设置为内存的一半 |
-p 18888:18888 |
端口映射 | 可根据需要修改第一个端口号 |
-v ollama:/root/work/yq/ollama/data/.ollama |
数据卷挂载 | 确保模型数据持久化 |
-e OLLAMA_HOST |
服务监听地址 | 设置为0.0.0.0允许外部访问 |
-e OLLAMA_NUM_PARALLEL |
并行请求数 | 根据CPU核心数调整,建议每2-3个核心处理一个请求 |
4.3 验证Ollama运行
检查容器是否正常运行:
bash复制docker ps -a | grep ollama
如果状态显示为"Up",说明容器已成功启动。可以通过以下命令查看日志:
bash复制docker logs ollama
5. 模型部署与管理
5.1 下载Qwen3-Coder模型
进入运行中的Ollama容器:
bash复制docker exec -it ollama bash
在容器内下载Qwen3-Coder模型:
bash复制ollama pull qwen3-coder
下载完成后,可以列出已安装的模型:
bash复制ollama list
5.2 运行模型
启动模型交互界面:
bash复制ollama run qwen3-coder
提示:首次运行模型时,Ollama会自动进行一些初始化工作,可能需要几分钟时间。完成后就可以开始与模型交互了。
5.3 模型管理技巧
- 模型更新:当有新版本模型发布时,可以执行以下命令更新:
bash复制ollama pull qwen3-coder
- 删除模型:如果需要释放空间,可以删除不再使用的模型:
bash复制ollama rm qwen3-coder
- 自定义模型:Ollama支持基于现有模型创建自定义版本:
bash复制ollama create my-qwen -f Modelfile
其中Modelfile包含自定义配置,例如:
code复制FROM qwen3-coder
PARAMETER temperature 0.7
PARAMETER top_p 0.9
6. Open WebUI部署
6.1 拉取Open WebUI镜像
同样使用DaoCloud加速拉取:
bash复制docker pull ghcr.m.daocloud.io/open-webui/open-webui:main
6.2 启动Open WebUI容器
bash复制docker run -d \
--name open-webui \
-p 1886:8080 \
-e OLLAMA_BASE_URL=http://<your-server-ip>:18888 \
-e WEBUI_SECRET_KEY=$(openssl rand -hex 32) \
ghcr.m.daocloud.io/open-webui/open-webui:main
重要参数说明:
OLLAMA_BASE_URL:指向之前部署的Ollama服务地址WEBUI_SECRET_KEY:随机生成的密钥,用于保护Web界面
注意:将
<your-server-ip>替换为你服务器的实际IP地址。如果是本机部署,可以使用hostname -I查看IP。
6.3 验证Open WebUI
检查容器状态:
bash复制docker ps -a | grep open-webui
查看日志:
bash复制docker logs open-webui
如果没有报错,说明服务已正常启动。
7. 网络与安全配置
7.1 防火墙设置
如果系统启用了firewalld,需要开放相关端口:
bash复制sudo firewall-cmd --add-port=1886/tcp --permanent
sudo firewall-cmd --add-port=18888/tcp --permanent
sudo firewall-cmd --reload
验证端口是否开放:
bash复制sudo firewall-cmd --list-ports
7.2 端口监听检查
确认服务正在监听指定端口:
bash复制netstat -tlnp | grep 1886
netstat -tlnp | grep 18888
7.3 安全建议
- 限制访问IP:如果服务需要暴露在公网,建议通过防火墙或Nginx限制访问IP
- 启用HTTPS:使用Nginx反向代理并配置SSL证书
- 定期备份:定期备份模型数据和容器配置
8. 服务访问与使用
8.1 访问Open WebUI
在浏览器中访问:
code复制http://<your-server-ip>:1886
首次访问会要求创建管理员账户。创建完成后,就可以开始使用Web界面与模型交互了。
8.2 直接调用Ollama API
Ollama提供了RESTful API,可以直接通过HTTP请求调用:
bash复制curl http://localhost:18888/api/generate -d '{
"model": "qwen3-coder",
"prompt": "写一个Python的快速排序实现",
"stream": false
}'
API响应示例:
json复制{
"model": "qwen3-coder",
"response": "def quicksort(arr):\n if len(arr) <= 1:\n return arr\n pivot = arr[len(arr) // 2]\n left = [x for x in arr if x < pivot]\n middle = [x for x in arr if x == pivot]\n right = [x for x in arr if x > pivot]\n return quicksort(left) + middle + quicksort(right)",
"done": true
}
9. 性能优化与监控
9.1 资源监控
可以使用以下命令监控容器资源使用情况:
bash复制docker stats ollama open-webui
输出示例:
code复制CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
a1b2c3d4e5f6 ollama 650% 85.4GiB / 128GiB 66.7% 1.45GB/2.1GB 0B/0B 48
g7h8i9j0k1l2 open-webui 2.5% 456MiB / 4GiB 11.1% 156MB/278MB 0B/0B 12
9.2 参数调优
根据监控结果,可以调整以下参数优化性能:
- OLLAMA_NUM_PARALLEL:控制并行请求数,避免资源争抢
- --cpus:根据实际CPU使用率调整
- --memory:根据内存使用情况调整,避免OOM
9.3 GPU加速(可选)
如果服务器配备NVIDIA GPU,可以使用nvidia-docker来获得更好的性能:
- 首先安装NVIDIA Container Toolkit:
bash复制distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo apt-key add - \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
- 修改Ollama启动命令,添加GPU支持:
bash复制docker run -d \
--name ollama \
--gpus all \
--cpus="64" \
--memory="128g" \
--shm-size="64g" \
-p 18888:18888 \
-v ollama:/root/work/yq/ollama/data/.ollama \
-e OLLAMA_HOST="0.0.0.0:18888" \
-e OLLAMA_NUM_PARALLEL=24 \
docker.m.daocloud.io/ollama/ollama:latest
10. 常见问题排查
10.1 镜像拉取失败
问题现象:docker pull命令执行失败,提示超时或认证错误
解决方案:
- 检查网络连接是否正常
- 确认镜像地址拼写正确
- 尝试更换其他镜像源
- 对于ghcr.io镜像,可能需要登录:
bash复制echo $GITHUB_TOKEN | docker login ghcr.io -u <username> --password-stdin
10.2 容器启动失败
问题现象:docker ps显示容器状态为Exited
解决方案:
- 查看容器日志:
bash复制docker logs ollama
- 常见原因:
- 端口冲突:修改映射端口
- 资源不足:调整--cpus和--memory参数
- 权限问题:检查数据卷挂载路径权限
10.3 模型响应缓慢
问题现象:模型生成结果速度很慢
解决方案:
- 检查服务器资源使用情况:
bash复制top
- 调整OLLAMA_NUM_PARALLEL参数,减少并行请求数
- 考虑升级硬件配置,特别是GPU
10.4 WebUI无法连接Ollama
问题现象:Open WebUI提示无法连接到Ollama服务
解决方案:
- 确认OLLAMA_BASE_URL设置正确
- 检查网络连通性:
bash复制curl http://<ollama-ip>:18888
- 确保防火墙已开放相应端口
11. 维护与升级
11.1 定期维护
- 清理无用镜像:
bash复制docker image prune -a
- 清理停止的容器:
bash复制docker container prune
- 清理构建缓存:
bash复制docker builder prune
11.2 服务升级
- Ollama升级:
bash复制docker stop ollama
docker rm ollama
docker pull docker.m.daocloud.io/ollama/ollama:latest
# 使用之前的参数重新运行容器
- Open WebUI升级:
bash复制docker stop open-webui
docker rm open-webui
docker pull ghcr.m.daocloud.io/open-webui/open-webui:main
# 使用之前的参数重新运行容器
11.3 数据备份
- 备份模型数据:
bash复制docker run --rm --volumes-from ollama -v $(pwd):/backup ubuntu tar cvf /backup/ollama_backup.tar /root/work/yq/ollama/data/.ollama
- 恢复模型数据:
bash复制docker run --rm --volumes-from ollama -v $(pwd):/backup ubuntu bash -c "cd / && tar xvf /backup/ollama_backup.tar"
12. 扩展应用
12.1 集成到现有系统
Ollama的API可以轻松集成到现有应用中。以下是Python调用示例:
python复制import requests
def ask_ollama(prompt, model="qwen3-coder"):
url = "http://localhost:18888/api/generate"
data = {
"model": model,
"prompt": prompt,
"stream": False
}
response = requests.post(url, json=data)
return response.json()["response"]
print(ask_ollama("用Python实现二分查找"))
12.2 多模型管理
Ollama支持同时运行多个模型。可以通过不同的端口部署多个Ollama实例,每个实例运行不同的模型:
bash复制docker run -d \
--name ollama-qwen \
-p 18889:18888 \
-v ollama-qwen:/root/work/yq/ollama/data/.ollama \
docker.m.daocloud.io/ollama/ollama:latest
docker run -d \
--name ollama-llama \
-p 18890:18888 \
-v ollama-llama:/root/work/yq/ollama/data/.ollama \
docker.m.daocloud.io/ollama/ollama:latest
12.3 自动化部署
对于需要频繁部署的场景,可以编写docker-compose.yml文件实现一键部署:
yaml复制version: '3'
services:
ollama:
image: docker.m.daocloud.io/ollama/ollama:latest
container_name: ollama
deploy:
resources:
limits:
cpus: '64'
memory: 128g
shm_size: 64g
ports:
- "18888:18888"
volumes:
- ollama_data:/root/work/yq/ollama/data/.ollama
environment:
- OLLAMA_HOST=0.0.0.0:18888
- OLLAMA_NUM_PARALLEL=24
webui:
image: ghcr.m.daocloud.io/open-webui/open-webui:main
container_name: open-webui
ports:
- "1886:8080"
environment:
- OLLAMA_BASE_URL=http://ollama:18888
- WEBUI_SECRET_KEY=changeme_to_a_random_string
volumes:
ollama_data:
使用以下命令启动服务:
bash复制docker-compose up -d
这套部署方案已经在我们的多个生产环境中验证过稳定性,能够支持企业级的大模型应用需求。根据实际使用经验,配置128GB内存的服务器可以流畅运行70亿参数级别的模型,而更大型的模型则需要相应增加内存和计算资源。
