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-core | 2核CPU/4GB内存 | 4核CPU/8GB内存 |
| ollama服务 | 4核CPU/16GB内存 | 8核CPU/32GB内存 |
| PostgreSQL | 2核CPU/4GB内存 | 4核CPU/8GB内存 |
| Redis | 1核CPU/2GB内存 | 2核CPU/4GB内存 |
2.3 网络架构设计
采用分层的容器网络模型:
- 前端服务层:dify-web(端口8080)
- 应用服务层:dify-api(端口5001)
- 模型服务层:ollama(端口11434)
- 数据存储层: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 llama23.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.txt4.2 dify工作流配置
在dify控制台配置ollama连接:
- 进入"模型供应商"设置页
- 添加自定义供应商,填写Endpoint为
http://ollama:11434 - 在应用工作流中选择"Ollama"作为推理引擎
4.3 性能调优参数
关键JVM参数调整(API服务):
environment: - JAVA_OPTS=-Xms4g -Xmx4g -XX:MaxRAMPercentage=75%Redis连接池配置:
environment: - REDIS_POOL_SIZE=20 - REDIS_TIMEOUT=50005. 常见问题排查指南
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 安全加固措施
网络隔离:
networks: dify_net: driver: bridge internal: true证书配置:
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