ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Docker化部署dify与ollama的AI开发平台实践

Docker化部署dify与ollama的AI开发平台实践

1. 项目概述:Docker化部署dify与ollama的技术实践

在当今的AI应用开发领域,快速搭建和部署智能工作流平台已成为刚需。dify作为一款开源的智能体开发平台,结合ollama的本地大模型运行能力,能够为开发者提供从原型设计到生产部署的全流程支持。而Docker容器化技术则完美解决了环境依赖和部署一致性的痛点。本文将详细记录我在Linux环境下通过Docker Compose完整部署difv+ollama的技术方案,包含从镜像准备到服务调通的每个关键步骤。

这个方案特别适合以下场景:

  • 需要快速搭建AI能力中台的技术团队
  • 希望本地运行大模型同时保持灵活部署的开发者
  • 研究智能体工作流但受限于云服务成本的个人研究者

2. 环境准备与架构设计

2.1 基础环境配置

推荐使用Ubuntu 22.04 LTS作为宿主机系统,确保内核版本≥5.4。以下是必须的准备工作:

# 安装Docker引擎 sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io sudo systemctl enable --now docker # 安装Docker Compose插件 sudo apt-get install -y docker-compose-plugin

重要提示:如果遇到"virtualization support not detected"错误,需进入BIOS开启VT-x/AMD-V虚拟化支持,并在Windows功能中启用Hyper-V和Windows虚拟机监控程序平台。

2.2 系统资源规划

组件最低配置推荐配置
dify-core2核CPU/4GB内存4核CPU/8GB内存
ollama服务4核CPU/16GB内存8核CPU/32GB内存
PostgreSQL2核CPU/4GB内存4核CPU/8GB内存
Redis1核CPU/2GB内存2核CPU/4GB内存

2.3 网络架构设计

采用分层的容器网络模型:

  1. 前端服务层:dify-web(端口8080)
  2. 应用服务层:dify-api(端口5001)
  3. 模型服务层:ollama(端口11434)
  4. 数据存储层:PostgreSQL+Redis

通过自定义bridge网络实现容器间隔离通信,关键服务间采用域名解析而非IP直连。

3. 核心组件部署实战

3.1 ollama模型服务部署

使用官方镜像部署ollama服务:

# docker-compose.ollama.yml services: ollama: image: ollama/ollama:latest ports: - "11434:11434" volumes: - ollama_data:/root/.ollama deploy: resources: reservations: cpus: '4' memory: 16G volumes: ollama_data:

启动后拉取所需模型(以llama2为例):

docker exec -it ollama ollama pull llama2

3.2 dify平台部署配置

完整的dify服务栈配置示例:

# docker-compose.dify.yml version: '3.8' services: redis: image: redis:6-alpine ports: - "6379:6379" volumes: - redis_data:/data postgres: image: postgres:13-alpine environment: POSTGRES_DB: dify POSTGRES_USER: dify POSTGRES_PASSWORD: dify123 volumes: - pg_data:/var/lib/postgresql/data api: image: langgenius/dify-api:latest depends_on: - redis - postgres environment: - DB_TYPE=postgresql - DB_HOST=postgres - DB_PORT=5432 - DB_NAME=dify - DB_USER=dify - DB_PASSWORD=dify123 ports: - "5001:5001" web: image: langgenius/dify-web:latest depends_on: - api ports: - "8080:3000" volumes: redis_data: pg_data:

3.3 服务连通性测试

验证ollama服务可用性:

curl http://localhost:11434/api/generate -d '{ "model": "llama2", "prompt": "为什么天空是蓝色的?" }'

检查dify后台状态:

docker logs dify-api | grep "Application startup"

4. 高级配置与优化

4.1 模型管理技巧

通过ollama的Model Library功能管理多个模型:

# 列出已下载模型 docker exec ollama ollama list # 删除特定模型 docker exec ollama ollama rm llama2 # 创建自定义模型配置 docker exec -it ollama ollama create my-model -f /root/modelfile.txt

4.2 dify工作流配置

在dify控制台配置ollama连接:

  1. 进入"模型供应商"设置页
  2. 添加自定义供应商,填写Endpoint为http://ollama:11434
  3. 在应用工作流中选择"Ollama"作为推理引擎

4.3 性能调优参数

关键JVM参数调整(API服务):

environment: - JAVA_OPTS=-Xms4g -Xmx4g -XX:MaxRAMPercentage=75%

Redis连接池配置:

environment: - REDIS_POOL_SIZE=20 - REDIS_TIMEOUT=5000

5. 常见问题排查指南

5.1 容器启动故障

症状:dify-api不断重启

  • 检查PostgreSQL连接日志:docker logs postgres | grep "connection"
  • 验证网络连通性:docker exec dify-api nc -zv postgres 5432
  • 典型解决方案:延长depends_on的healthcheck超时

5.2 模型推理超时

症状:ollama返回504错误

  • 调整ollama的启动参数:
    environment: - OLLAMA_NUM_PARALLEL=2 - OLLAMA_MAX_LOADED_MODELS=1
  • 在dify侧增加超时设置:
    {"inference_timeout": 300}

5.3 存储卷权限问题

症状:ollama无法保存模型

  • 修复命令:
    sudo chown -R 1000:1000 /var/lib/docker/volumes/ollama_data
  • 预防措施:在compose文件显式声明volume权限
    volumes: ollama_data: driver_opts: o: uid=1000 o: gid=1000

6. 生产环境部署建议

6.1 安全加固措施

  1. 网络隔离:

    networks: dify_net: driver: bridge internal: true
  2. 证书配置:

    web: environment: - HTTPS_ENABLED=true - SSL_CERT_PATH=/certs/fullchain.pem - SSL_KEY_PATH=/certs/privkey.pem

6.2 监控方案实现

Prometheus监控配置示例:

services: prometheus: image: prom/prometheus ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml grafana: image: grafana/grafana ports: - "3000:3000"

关键监控指标:

  • ollama:GPU利用率、推理延迟
  • dify:API响应时间、队列深度
  • 数据库:连接数、查询延迟

6.3 备份与恢复策略

模型数据备份方案:

# 备份ollama模型 docker run --rm -v ollama_data:/data -v $(pwd):/backup busybox tar czf /backup/ollama_backup.tar.gz /data # 恢复模型数据 docker run --rm -v ollama_data:/data -v $(pwd):/backup busybox tar xzf /backup/ollama_backup.tar.gz -C /

数据库备份方案:

docker exec postgres pg_dump -U dify -Fc dify > dify_backup.dump
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进