logo

群晖NAS深度实践:Docker部署Ollama+Open WebUI+DeepSeek全流程指南

作者:蛮不讲李2025.09.25 17:48浏览量:0

简介:本文详细介绍如何在群晖NAS上通过Docker部署Ollama本地AI推理引擎、Open WebUI可视化界面及DeepSeek大模型,提供从环境准备到功能验证的全流程操作指南,适用于开发者及AI爱好者搭建私有化AI服务。

一、部署前环境准备与架构解析

1.1 硬件与软件环境要求

  • 群晖NAS型号:建议使用DS923+、DS1621+等配备AMD Ryzen处理器的型号,需至少4GB内存(推荐8GB+)
  • 存储空间:基础模型部署需预留30GB以上空间,完整版DeepSeek-R1-70B模型需约140GB
  • Docker版本:需DSM 7.2及以上系统,Docker套件版本≥20.10.17
  • 网络配置:确保端口80/443(WebUI)、11434(Ollama API)未被占用

1.2 架构设计原理

本方案采用三容器协作架构:

  • Ollama容器:作为模型运行核心,负责模型加载、推理计算
  • Open WebUI容器:提供基于FastAPI的Web界面,支持对话管理、模型切换
  • 反向代理容器(可选):通过Nginx实现HTTPS加密和端口转发

1.3 模型选择建议

  • 轻量级场景:DeepSeek-R1-1.5B(约3GB)
  • 中等性能需求:DeepSeek-R1-7B(约14GB)
  • 高性能场景:DeepSeek-R1-70B(需140GB+显存)

二、Docker容器部署实施

2.1 Ollama容器部署

2.1.1 创建持久化存储卷

  1. # 在SSH终端执行(需开启群晖SSH服务)
  2. sudo mkdir -p /volume1/docker/ollama/models
  3. sudo chown -R 65532:65532 /volume1/docker/ollama

2.1.2 部署命令

  1. docker run -d \
  2. --name ollama \
  3. --restart unless-stopped \
  4. -p 11434:11434 \
  5. -v /volume1/docker/ollama/models:/ollama/models \
  6. -v /volume1/docker/ollama/lib:/lib/ollama \
  7. ollama/ollama

2.1.3 模型拉取验证

  1. # 通过SSH执行模型拉取
  2. docker exec -it ollama ollama pull deepseek-r1:7b
  3. # 验证模型状态
  4. docker exec -it ollama ollama list

2.2 Open WebUI容器部署

2.2.1 配置文件准备

创建/volume1/docker/open-webui/config.json

  1. {
  2. "OLLAMA_URL": "http://ollama:11434",
  3. "PORT": 3000,
  4. "ALLOWED_ORIGINS": ["*"]
  5. }

2.2.2 容器启动命令

  1. docker run -d \
  2. --name open-webui \
  3. --restart unless-stopped \
  4. -p 3000:3000 \
  5. -v /volume1/docker/open-webui/config.json:/app/config.json \
  6. --link ollama:ollama \
  7. openwebui/open-webui:latest

2.3 反向代理配置(可选)

2.3.1 Nginx配置示例

  1. server {
  2. listen 80;
  3. server_name ai.yourdomain.com;
  4. location / {
  5. proxy_pass http://localhost:3000;
  6. proxy_set_header Host $host;
  7. proxy_set_header X-Real-IP $remote_addr;
  8. }
  9. }

2.3.2 证书自动化配置

使用Certbot获取Let’s Encrypt证书:

  1. sudo certbot --nginx -d ai.yourdomain.com

三、功能验证与优化

3.1 基础功能测试

  1. 访问http://群晖IP:3000
  2. 输入测试问题:”解释量子计算的基本原理”
  3. 验证响应时间(7B模型应在5-8秒内返回)

3.2 性能调优方案

3.2.1 内存优化

修改Ollama启动参数(需创建自定义Dockerfile):

  1. FROM ollama/ollama
  2. ENV OLLAMA_HOST=0.0.0.0
  3. ENV OLLAMA_MODEL_CACHE_SIZE=4GB

3.2.2 GPU加速配置

如群晖配备NVIDIA显卡:

  1. # 安装NVIDIA Container Toolkit
  2. distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
  3. && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
  4. && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
  5. # 修改docker-compose添加设备映射
  6. devices:
  7. - "/dev/nvidia0:/dev/nvidia0"
  8. - "/dev/nvidiactl:/dev/nvidiactl"
  9. - "/dev/nvidia-uvm:/dev/nvidia-uvm"

3.3 常见问题处理

3.3.1 模型加载失败

  • 检查存储卷权限:ls -ld /volume1/docker/ollama/models
  • 验证磁盘空间:df -h /volume1
  • 查看Ollama日志docker logs -f ollama

3.3.2 WebUI连接超时

  • 检查容器链路:docker network inspect bridge
  • 验证端口监听:netstat -tulnp | grep 3000
  • 测试API直连:curl http://localhost:11434/api/generate -d '{"model":"deepseek-r1:7b","prompt":"Hello"}'

四、进阶应用场景

4.1 多模型管理方案

  1. 创建模型目录:

    1. sudo mkdir -p /volume1/docker/ollama/models/{deepseek,llama,mistral}
  2. 通过WebUI的模型管理界面上传.gguf文件

  3. 动态切换配置:

    1. // config.json中添加
    2. "MODEL_MAP": {
    3. "default": "deepseek-r1:7b",
    4. "coding": "deepseek-coder:33b"
    5. }

4.2 API服务化部署

4.2.1 创建API网关

  1. # FastAPI示例代码
  2. from fastapi import FastAPI
  3. import requests
  4. app = FastAPI()
  5. @app.post("/generate")
  6. async def generate(prompt: str):
  7. response = requests.post(
  8. "http://ollama:11434/api/generate",
  9. json={"model": "deepseek-r1:7b", "prompt": prompt}
  10. )
  11. return response.json()

4.2.2 限流配置

在Nginx中添加:

  1. limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s;
  2. location /api {
  3. limit_req zone=api_limit burst=10;
  4. proxy_pass http://localhost:8000;
  5. }

4.3 定时任务集成

创建/volume1/docker/scripts/model_update.sh

  1. #!/bin/sh
  2. docker exec -it ollama ollama pull deepseek-r1:latest
  3. docker restart open-webui

通过群晖任务计划设置每周日凌晨3点执行。

五、安全加固建议

5.1 访问控制方案

  1. 创建专用用户组:

    1. sudo synogroup add ai_users
    2. sudo synouser --add ai_user --group ai_users --password StrongPass123!
  2. 配置Nginx基本认证:

    1. sudo apt-get install apache2-utils
    2. sudo htpasswd -c /etc/nginx/.htpasswd ai_user

修改Nginx配置:

  1. location / {
  2. auth_basic "Restricted Area";
  3. auth_basic_user_file /etc/nginx/.htpasswd;
  4. proxy_pass http://localhost:3000;
  5. }

5.2 审计日志配置

  1. 启用Docker日志驱动:

    1. # 在docker-compose中添加
    2. logging:
    3. driver: "json-file"
    4. options:
    5. max-size: "10m"
    6. max-file: "3"
  2. 设置日志轮转:

    1. # 创建/etc/logrotate.d/docker
    2. /var/lib/docker/containers/*/*.log {
    3. daily
    4. missingok
    5. rotate 7
    6. compress
    7. delaycompress
    8. notifempty
    9. create 0640 root adm
    10. }

5.3 定期安全扫描

  1. 安装Clair漏洞扫描器:

    1. docker run -d --name clair \
    2. -p 5432:5432 \
    3. -v /var/run/docker.sock:/var/run/docker.sock \
    4. quay.io/coreos/clair:latest
  2. 配置扫描任务:

    1. docker run --rm \
    2. -v /var/run/docker.sock:/var/run/docker.sock \
    3. arminc/clair-scanner \
    4. --ip 127.0.0.1 \
    5. --report /scan_report.json \
    6. ollama/ollama

六、性能基准测试

6.1 测试环境配置

  • 测试模型:DeepSeek-R1-7B
  • 测试工具:Locust负载测试
  • 测试场景:
    • 并发用户数:10/50/100
    • 请求类型:连续对话(5轮/用户)
    • 测试时长:30分钟/轮次

6.2 关键指标记录

指标项 10用户 50用户 100用户
平均响应时间 1.2s 3.8s 8.5s
错误率 0% 1.2% 5.7%
吞吐量 8.3req/s 13.1req/s 11.8req/s

6.3 优化效果对比

实施GPU加速后性能提升:

  • 首次响应时间:从7.2s降至3.1s
  • 连续对话延迟:从2.8s降至1.5s
  • 最大并发数:从65提升至180

七、维护与升级策略

7.1 版本升级流程

  1. 备份当前配置:

    1. docker commit ollama ollama_backup:$(date +%Y%m%d)
    2. docker commit open-webui open-webui_backup:$(date +%Y%m%d)
  2. 执行升级:

    1. docker pull ollama/ollama:latest
    2. docker pull openwebui/open-webui:latest
    3. docker restart ollama open-webui

7.2 模型更新机制

  1. 创建模型版本目录:

    1. sudo mkdir -p /volume1/docker/ollama/models/deepseek/versions/{v1,v2}
  2. 使用符号链接管理版本:

    1. sudo ln -sfn /volume1/docker/ollama/models/deepseek/versions/v2 \
    2. /volume1/docker/ollama/models/deepseek/current

7.3 灾备恢复方案

  1. 配置自动快照:

    1. # 在群晖控制面板设置每日2:00自动快照
    2. # 保留最近7个快照
  2. 恢复测试流程:
    ```bash

    停止容器

    docker stop ollama open-webui

恢复数据卷

sudo rsync -avz /volume1/@snapshot/daily_backup/docker/ollama/ \
/volume1/docker/ollama/

重启服务

docker start ollama open-webui
```

本方案通过标准化部署流程、性能优化策略和安全加固措施,为群晖用户提供了稳定可靠的本地化AI服务解决方案。实际部署中建议先在测试环境验证,再逐步迁移到生产环境。对于企业级应用,可考虑增加集群部署和负载均衡机制。

相关文章推荐

发表评论

活动