最近在折腾本地AI部署方案时,发现Open WebUI+Ollama的组合在Ubuntu24.04上运行效果出奇地好。这套方案不仅完全开源免费,还能让普通消费级显卡(比如我的RTX3060)流畅运行7B参数的模型。相比直接使用商业API,本地部署在数据隐私和响应速度上都有明显优势。
首先确保你的Ubuntu24.04系统已经完成基础更新:
bash复制sudo apt update && sudo apt upgrade -y
显卡驱动是性能关键,对于NVIDIA用户:
bash复制sudo ubuntu-drivers autoinstall
sudo reboot
验证驱动安装:
bash复制nvidia-smi
Open WebUI推荐使用Docker部署,安装命令:
bash复制sudo apt install docker.io docker-compose
sudo systemctl enable --now docker
将当前用户加入docker组避免sudo:
bash复制sudo usermod -aG docker $USER
newgrp docker
官方提供了一键安装脚本:
bash复制curl -fsSL https://ollama.com/install.sh | sh
启动ollama服务:
bash复制systemctl start ollama
下载7B参数模型(以llama2为例):
bash复制ollama pull llama2
在~/.bashrc中添加这些环境变量提升性能:
bash复制export OLLAMA_MMLOCK=1
export OLLAMA_KEEP_ALIVE=5
对于NVIDIA显卡用户,建议安装CUDA工具包:
bash复制sudo apt install nvidia-cuda-toolkit
使用官方Docker命令启动:
bash复制docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway \
-v open-webui:/app/backend/data --name open-webui --restart always \
ghcr.io/open-webui/open-webui:main
创建自定义配置文件config.json:
json复制{
"environment": "production",
"ollama": {
"base_url": "http://host.docker.internal:11434"
},
"auth": {
"enabled": true,
"type": "user"
}
}
挂载配置文件重启容器:
bash复制docker run ... -v ./config.json:/app/backend/config.json ...
建议使用Nginx做HTTPS反向代理,示例配置:
nginx复制server {
listen 443 ssl;
server_name ai.yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
}
}
创建systemd服务文件/etc/systemd/system/webui.service:
ini复制[Unit]
Description=Open WebUI Service
After=docker.service
[Service]
ExecStart=/usr/bin/docker start -a open-webui
ExecStop=/usr/bin/docker stop open-webui
Restart=always
[Install]
WantedBy=multi-user.target
如果遇到CUDA错误,检查:
bash复制docker exec -it open-webui nvidia-smi
可能需要添加--gpus参数:
bash复制docker run ... --gpus all ...
在Ollama启动时添加这些参数:
bash复制OLLAMA_NUM_PARALLEL=2 OLLAMA_MAX_LOADED_MODELS=3 ollama serve
建议启用LDAP认证:
json复制"auth": {
"enabled": true,
"type": "ldap",
"ldap_url": "ldap://your-server",
"bind_dn": "cn=admin,dc=example,dc=com"
}
创建专用Docker网络:
bash复制docker network create ai-network
将Ollama和WebUI放在同一网络:
bash复制docker run ... --network ai-network ...
创建Modelfile示例:
dockerfile复制FROM llama2
PARAMETER num_ctx 4096
PARAMETER temperature 0.7
构建自定义模型:
bash复制ollama create mymodel -f Modelfile
通过API动态加载模型:
bash复制curl http://localhost:11434/api/pull -d '{"name": "mistral"}'
关键数据目录:
备份命令示例:
bash复制tar czvf ollama_backup.tar.gz /var/lib/ollama
使用Docker导出容器:
bash复制docker export open-webui > webui_container.tar
迁移后导入:
bash复制cat webui_container.tar | docker import - open-webui-migrated
安装Prometheus监控:
bash复制docker run -d -p 9090:9090 -v ./prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
示例监控配置:
yaml复制scrape_configs:
- job_name: 'ollama'
static_configs:
- targets: ['host.docker.internal:11434']
集中查看日志:
bash复制docker logs -f open-webui
journalctl -u ollama -f
建议配置logrotate:
bash复制sudo apt install logrotate
我在实际部署中发现,当系统内存不足时,Ollama容易出现崩溃。建议物理内存至少16GB,并配置适当的swap空间。另外,模型的第一次加载通常较慢,后续调用会快很多,这是正常现象。