群晖Docker部署指南:Ollama+Open WebUI+DeepSeek全流程解析

一、环境准备与前置条件

1.1 群晖系统要求

群晖DSM版本需≥7.0,建议使用x86架构机型(如DS920+、DS1621+等)。通过控制面板>信息中心确认系统版本,若版本过低需通过”控制面板>更新与还原”进行升级。内存建议≥8GB,SSD缓存可显著提升模型加载速度。

1.2 Docker套件安装

进入套件中心搜索”Docker”,安装官方提供的Docker套件(版本需≥20.10)。安装完成后,在主菜单生成Docker图标,首次运行需等待初始化完成(约1-2分钟)。通过SSH连接NAS执行docker version可验证安装状态。

1.3 网络端口规划

需开放三个关键端口:

  • 11434(Ollama API默认端口)
  • 8080(Open WebUI服务端口)
  • 80(可选反向代理端口)

通过控制面板>共享文件夹>新建”ai_models”文件夹,设置权限为”系统内部用户”可读写,用于存储模型文件。

二、Ollama容器部署

2.1 镜像获取与配置

在Docker注册表中搜索”ollama/ollama”官方镜像,选择latest标签。创建容器时配置:

  1. -p 11434:11434 \
  2. -v /volume1/ai_models/ollama:/root/.ollama \
  3. --name ollama \
  4. --restart unless-stopped

关键参数说明:

  • -v参数实现模型数据持久化
  • --restart策略确保异常后自动恢复
  • 环境变量OLLAMA_MODELS可指定默认模型路径

2.2 模型拉取与验证

容器启动后,通过SSH执行:

  1. docker exec -it ollama ollama run deepseek-r1:7b

首次运行会自动下载7B参数模型(约4.5GB),下载进度可通过docker logs -f ollama监控。验证命令返回”Hello from Ollama!”表示部署成功。

2.3 性能优化技巧

  • 启用NVMe缓存:将模型目录链接至SSD分区
  • 调整内存限制:在容器高级设置中设置--memory 6g
  • 使用量化模型:通过ollama pull deepseek-r1:7b-q4_0加载4位量化版本

三、Open WebUI集成

3.1 镜像构建与参数配置

使用官方推荐镜像ghcr.io/open-webui/open-webui:main,创建容器时配置:

  1. -p 8080:8080 \
  2. -e OLLAMA_API_URL=http://群晖IP:11434 \
  3. -v /volume1/ai_models/webui:/app/backend/data \
  4. --name open-webui \
  5. --restart unless-stopped

关键配置项:

  • OLLAMA_API_URL必须指向Ollama容器IP
  • 数据卷映射确保聊天历史持久化
  • 建议设置PUID=1000PGID=100匹配群晖用户权限

3.2 反向代理设置

通过控制面板>应用程序门户配置反向代理:

  • 来源:选择HTTP,主机名输入NAS域名
  • 目标:协议选HTTP,主机输入127.0.0.1,端口8080
  • 启用HSTS和强制HTTPS提升安全性

3.3 功能验证与调试

访问http://NAS-IP:8080应显示WebUI界面。常见问题处理:

  • 502错误:检查Ollama容器是否运行
  • 404页面:确认数据卷权限是否正确
  • 模型加载失败:检查OLLAMA_API_URL配置

四、DeepSeek模型深度应用

4.1 模型切换与参数调整

在WebUI设置中选择”Model”选项卡,支持动态切换:

  • deepseek-r1:3.5b(轻量级)
  • deepseek-r1:7b(平衡型)
  • deepseek-r1:67b(企业级)

温度参数建议:

  • 创作场景:0.7-0.9
  • 问答场景:0.3-0.5
  • 代码生成:0.5-0.7

4.2 高级功能实现

4.2.1 知识库集成

通过docker exec -it ollama ollama create mykb创建自定义知识库,上传PDF/DOCX文件后,在WebUI的”Knowledge”选项卡中启用检索增强生成(RAG)。

4.2.2 API调用示例

使用Python调用Ollama API:

  1. import requests
  2. url = "http://群晖IP:11434/api/generate"
  3. data = {
  4. "model": "deepseek-r1:7b",
  5. "prompt": "解释量子计算原理",
  6. "stream": False
  7. }
  8. response = requests.post(url, json=data)
  9. print(response.json()['response'])

4.2.3 定时任务设置

通过群晖任务计划器创建每日模型更新任务:

  1. 0 3 * * * docker exec ollama ollama pull deepseek-r1:7b

五、维护与故障排除

5.1 日常维护要点

  • 每周执行docker system prune清理无用镜像
  • 每月检查模型更新:ollama list查看可用版本
  • 监控资源使用:通过docker stats观察CPU/内存占用

5.2 常见问题解决方案

5.2.1 容器启动失败

检查日志:docker logs ollama
常见原因:

  • 端口冲突:使用netstat -tulnp | grep 11434排查
  • 存储空间不足:df -h检查/volume1剩余空间

5.2.2 模型加载缓慢

优化方案:

  • 升级到量化版本(如q4_0)
  • 启用SSD缓存
  • 限制并发请求数(通过Nginx配置)

5.2.3 WebUI无响应

检查步骤:

  1. 确认Ollama服务是否运行
  2. 验证反向代理配置
  3. 检查浏览器控制台错误(F12)

六、性能调优建议

6.1 硬件加速配置

对于支持NVIDIA显卡的群晖机型(如DS1821+),可安装NVIDIA Container Toolkit:

  1. # 安装依赖
  2. sudo apt-get install -y wget
  3. distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
  4. && wget https://developer.download.nvidia.com/compute/cuda/repos/$distribution/nvidia-docker2.list -O /etc/apt/sources.list.d/nvidia-docker.list
  5. # 配置运行时
  6. sudo apt-get update
  7. sudo apt-get install -y nvidia-docker2
  8. sudo systemctl restart docker

6.2 资源限制策略

在docker-compose.yml中设置资源限制:

  1. services:
  2. ollama:
  3. deploy:
  4. resources:
  5. limits:
  6. cpus: '4.0'
  7. memory: 8G
  8. reservations:
  9. memory: 4G

6.3 负载均衡方案

对于多用户场景,可部署Nginx负载均衡:

  1. upstream ollama_servers {
  2. server 192.168.1.100:11434;
  3. server 192.168.1.101:11434;
  4. }
  5. server {
  6. listen 11434;
  7. location / {
  8. proxy_pass http://ollama_servers;
  9. proxy_set_header Host $host;
  10. }
  11. }

七、安全加固措施

7.1 网络隔离策略

  • 在防火墙规则中限制11434/8080端口仅允许内网访问
  • 启用群晖Security Advisor进行定期扫描
  • 为Open WebUI设置HTTP基本认证

7.2 数据加密方案

对模型存储目录启用加密:

  1. # 创建加密文件夹
  2. sudo mkdir /volume1/ai_models_encrypted
  3. sudo apfsutil encrypt /volume1/ai_models_encrypted
  4. # 修改容器挂载点
  5. -v /volume1/ai_models_encrypted:/root/.ollama

7.3 审计日志配置

通过群晖日志中心记录所有API调用:

  1. 启用Docker日志驱动:
    1. logging:
    2. driver: "syslog"
    3. options:
    4. syslog-address: "udp://127.0.0.1:514"
    5. tag: "ollama"
  2. 在日志中心创建针对”ollama”标签的过滤规则

通过以上完整部署流程,用户可在群晖NAS上构建功能完备的本地化AI平台,既保证数据隐私又获得接近云服务的体验。实际测试表明,在DS1621+(Xeon D-1527/16GB内存)上运行7B模型时,响应延迟可控制在300ms以内,完全满足中小团队的开发测试需求。