Ollama + Open WebUI 本地大模型部署实战:从服务器选型到HTTPS配置
最近在折腾本地大模型部署,目标是搭建一套可以离线使用、数据不出内网的AI对话系统。对比了多种方案后,最终选择了Ollama + Open WebUI的组合。
这篇文章记录完整的部署过程:从服务器选型、Docker环境配置、Ollama模型拉取,到Open WebUI的安装与调优。整个过程踩了不少坑,整理出来供有同样需求的朋友参考。
### 一、为什么选Ollama + Open WebUI?
**Ollama**是目前最流行的本地大模型运行框架,支持Llama、Qwen、DeepSeek、Mistral等主流开源模型,一条命令就能拉取和运行,省去了手动配置CUDA、Python环境的繁琐。
**Open WebUI**是一个功能完善的Web界面,支持多模型切换、对话历史管理、RAG知识库、多用户管理,界面体验接近ChatGPT。
两者结合,相当于用最低的成本搭建一个私有化的AI对话平台。
**硬件需求**:纯CPU跑7B量化模型,16GB内存够用;如果要跑13B以上模型或追求推理速度,建议上GPU实例。
### 二、服务器选型与环境准备
#### 2.1 服务器配置
本次部署使用的是一台2核4G的云服务器,操作系统Ubuntu 22.04。对于跑7B量化模型(如qwen2.5:7b)的测试场景,这个配置基本够用。
选服务器时建议根据模型规模决定配置:7B模型选2核4G起步,13B以上建议4核8G或带GPU的实例。
#### 2.2 安全组配置
拿到服务器后,先在控制台配置安全组,开放必要端口:
| 端口 | 协议 | 用途 |
|------|------|------|
| 22 | TCP | SSH远程连接 |
| 3000 | TCP | Open WebUI访问端口 |
| 11434 | TCP | Ollama API端口(建议仅内网) |
**安全提醒**:11434端口是Ollama的API接口,不建议直接暴露到公网。
#### 2.3 连接服务器并更新系统
```bash
ssh root@你的公网IP
apt update && apt upgrade -y
apt install -y curl git vim
```
### 三、安装Docker环境
```bash
# 安装Docker
curl -fsSL https://get.docker.com | sh
# 验证安装
docker --version
docker compose version
```
如果下载速度慢,可以配置国内镜像加速:
```bash
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
```
### 四、部署Ollama
#### 4.1 拉取并运行Ollama容器
```bash
docker run -d \
--name ollama \
--restart always \
-p 11434:11434 \
-v ollama_data:/root/.ollama \
ollama/ollama
```
#### 4.2 拉取模型
```bash
# 进入容器
docker exec -it ollama bash
# 拉取qwen2.5 7B模型
ollama pull qwen2.5:7b
# 查看已下载模型
ollama list
```
#### 4.3 测试模型
```bash
# 用API测试
curl http://localhost:11434/api/generate -d '{
"model": "qwen2.5:7b",
"prompt": "介绍一下Docker的核心概念",
"stream": false
}'
```
### 五、部署Open WebUI
#### 5.1 启动Open WebUI容器
```bash
docker run -d \
--name open-webui \
--restart always \
-p 3000:8080 \
-v open-webui:/app/backend/data \
--add-host=host.docker.internal:host-gateway \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
ghcr.io/open-webui/open-webui:main
```
#### 5.2 访问Web界面
浏览器打开 `http://你的公网IP:3000`,首次访问需要注册管理员账号。
### 六、性能调优与踩坑记录
#### 6.1 内存不足导致OOM
2核4G跑7B模型时,如果同时开多个对话,偶尔会触发OOM。解决方案是加Swap:
```bash
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
```
#### 6.2 模型加载慢
首次加载模型需要将权重读入内存,7B模型大约需要30-60秒。后续对话会快很多。
### 七、配置Nginx反向代理与HTTPS(可选)
```bash
apt install -y nginx certbot python3-certbot-nginx
```
创建Nginx配置:
```nginx
server {
listen 80;
server_name 你的域名;
location / {
proxy_pass http://127.0.0.1:3000;
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;
# WebSocket支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
```
启用配置并申请证书:
```bash
ln -s /etc/nginx/sites-available/openwebui /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
certbot --nginx -d 你的域名
```
### 八、总结
至此,一套完整的本地大模型对话系统就部署完成了。核心组件包括:
- **Ollama**:负责模型运行和推理
- **Open WebUI**:提供Web界面和多用户管理
- **Docker**:容器化管理,环境隔离
- **Nginx**:反向代理和HTTPS
这套方案的优势是数据完全私有化,适合对数据安全有要求的场景。
### 附:相关资源
> **服务器来源说明**:本次部署使用的云服务器,当时参考的是官方活动页面,有需要可以看看:https://curl.qcloud.com/Qxm26oKV
---
*本文为个人实践记录,相关配置和价格请以官方页面实时信息为准。*
更多推荐
所有评论(0)