手把手教你用Docker Compose一键拉起Dify和Ollama(含离线镜像包和模型配置)
基于Docker Compose的Dify与Ollama全栈部署实战指南
在当今快速迭代的技术环境中,如何高效部署AI应用栈成为开发者面临的核心挑战之一。传统部署方式往往需要手动配置多个组件,不仅耗时耗力,还容易因环境差异导致"在我机器上能跑"的经典问题。本文将介绍一种基于Docker Compose的工程化解决方案,通过容器化技术实现Dify(开源AI工作流平台)与Ollama(本地大模型运行框架)的一键式部署,特别适合需要离线环境或追求部署一致性的技术团队。
1. 环境准备与架构设计
1.1 系统要求与前置条件
在开始部署前,请确保您的系统满足以下基本要求:
- 操作系统:Linux(推荐Ubuntu 20.04+/CentOS 7+)或macOS
- 硬件配置:
- CPU:x86_64架构,至少4核
- 内存:建议16GB以上(运行大模型需要更多内存)
- 磁盘空间:至少50GB可用空间(模型文件通常体积较大)
- 网络环境:能够访问Docker Hub或已准备好离线镜像包
提示:如果在内网环境部署,建议提前下载所有依赖的Docker镜像(约15GB)和模型文件。
1.2 项目目录结构设计
合理的目录结构是保证部署可维护性的关键。建议采用以下标准化布局:
dify-ollama-stack/
├── docker-compose.yml # 主编排文件
├── .env # 环境变量配置
├── data/ # 持久化数据
│ ├── redis/ # Redis数据目录
│ ├── ollama/ # Ollama模型存储
│ └── dify/ # Dify工作目录
├── configs/ # 配置文件
│ ├── redis.conf # Redis定制配置
│ └── nginx/ # Nginx配置(如需)
└── images/ # 离线镜像包
├── dify.tar
├── ollama.tar
└── redis.tar
这种结构将运行时数据与配置分离,便于备份和迁移,同时也符合Docker最佳实践。
2. Docker Compose编排核心配置
2.1 编写docker-compose.yml
以下是经过优化的多服务编排配置,集成了Dify、Ollama和Redis:
version: '3.8'
services:
redis:
image: redis:6.2-alpine
container_name: dify-redis
restart: unless-stopped
volumes:
- ./data/redis:/data
- ./configs/redis.conf:/usr/local/etc/redis/redis.conf
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
ports:
- "6379:6379"
networks:
- ai-net
ollama:
image: ollama/ollama:latest
container_name: ollama-service
restart: unless-stopped
volumes:
- ./data/ollama:/root/.ollama
ports:
- "11434:11434"
environment:
- OLLAMA_HOST=0.0.0.0
networks:
- ai-net
deploy:
resources:
reservations:
memory: 12G
dify:
image: langgenius/dify:latest
container_name: dify-web
restart: unless-stopped
depends_on:
- redis
- ollama
volumes:
- ./data/dify:/app/data
ports:
- "80:3000"
environment:
- FLASK_APP=api
- FLASK_ENV=production
- REDIS_HOST=redis
- REDIS_PORT=6379
- OLLAMA_API_BASE_URL=http://ollama:11434
networks:
- ai-net
networks:
ai-net:
driver: bridge
关键配置说明:
- 资源限制:为Ollama服务预留了12GB内存,防止模型加载时OOM
- 网络隔离:所有服务通过自定义网络
ai-net通信,避免端口冲突 - 数据持久化:所有重要数据通过volume挂载到主机目录
- 服务依赖:使用
depends_on确保服务启动顺序
2.2 环境变量配置(.env)
创建.env文件定义可变参数,便于不同环境部署:
# Redis配置
REDIS_PASSWORD=your_secure_password
# Dify配置
DIFY_ADMIN_EMAIL=admin@yourdomain.com
DIFY_ADMIN_PASSWORD=ChangeMe123!
# Ollama配置
OLLAMA_DEFAULT_MODEL=llama2:13b
3. 离线部署实战技巧
3.1 镜像导入与验证
对于无法连接Docker Hub的环境,需提前准备离线镜像包:
# 导入镜像(假设所有tar包已放在./images目录)
docker load -i ./images/dify.tar
docker load -i ./images/ollama.tar
docker load -i ./images/redis.tar
# 验证镜像加载
docker images | grep -E 'dify|ollama|redis'
3.2 模型预加载策略
Ollama支持两种模型预加载方式:
方法一:通过volume挂载预下载模型
- 在主机下载模型:
ollama pull llama2:13b - 将模型文件复制到挂载目录:
cp -r ~/.ollama/models ./data/ollama/
方法二:使用Dockerfile定制镜像
创建Dockerfile.ollama:
FROM ollama/ollama:latest
RUN ollama pull llama2:13b && \
ollama pull deepseek-r1:32b
然后构建自定义镜像:
docker build -t custom-ollama -f Dockerfile.ollama .
3.3 常见问题排查表
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| Dify无法连接Ollama | 网络配置错误 | 检查ai-net网络连通性 |
| 模型加载超时 | 内存不足 | 增加Ollama内存限制 |
| Redis连接失败 | 密码未配置 | 在.env设置REDIS_PASSWORD |
| 端口冲突 | 服务已占用端口 | 修改docker-compose.yml端口映射 |
4. 高级配置与优化
4.1 模型性能调优
通过Ollama的Modelfile可以定制模型运行参数。创建./configs/Modelfile:
FROM llama2:13b
PARAMETER num_ctx 4096
PARAMETER num_gpu_layers 20
SYSTEM """
你是一个专业的AI助手,使用简洁专业的语言回答问题。
"""
然后应用到运行中的容器:
docker exec ollama-service ollama create tuned-llama -f /root/.ollama/Modelfile
4.2 Dify插件集成
在Dify中集成Ollama模型的步骤:
- 登录Dify控制台(默认http://localhost)
- 进入"插件市场" → 搜索"Ollama" → 安装
- 在"模型配置"中添加Ollama连接:
名称: Local-Ollama 基础URL: http://ollama:11434 模型列表: llama2:13b, deepseek-r1:32b - 测试连接并保存
4.3 监控与日志收集
建议添加Prometheus和Grafana监控:
# 在docker-compose.yml中添加
monitoring:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./configs/prometheus.yml:/etc/prometheus/prometheus.yml
networks:
- ai-net
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
volumes:
- ./data/grafana:/var/lib/grafana
networks:
- ai-net
配套的prometheus.yml配置示例:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'ollama'
static_configs:
- targets: ['ollama:11434']
- job_name: 'redis'
static_configs:
- targets: ['redis:6379']
5. 生产环境最佳实践
5.1 安全加固措施
-
修改默认凭证:
- 首次登录Dify后立即修改管理员密码
- 为Redis设置强密码(通过REDIS_PASSWORD环境变量)
-
网络隔离:
networks: ai-net: driver: bridge internal: true # 禁止外部访问 -
定期备份:
# 备份关键数据 tar -czvf backup-$(date +%Y%m%d).tar.gz ./data
5.2 性能优化建议
-
模型选择:根据硬件配置选择合适的模型尺寸
- 8GB内存:建议7B以下模型
- 16GB内存:可运行13B模型
- 32GB+内存:尝试30B以上模型
-
GPU加速: 若主机配备NVIDIA GPU,修改Ollama服务配置:
ollama: runtime: nvidia environment: - NVIDIA_VISIBLE_DEVICES=all -
批处理请求: 在Dify工作流中合理设置批处理参数,减少模型加载次数
5.3 版本升级策略
-
测试环境验证:
docker-compose pull # 获取新镜像 docker-compose up -d # 重建容器 -
回滚方案:
# 回退到上一个稳定版本 docker-compose down docker-compose up -d --force-recreate --no-deps ollama dify -
数据迁移检查清单:
- 备份
./data目录 - 记录当前模型版本
- 检查插件兼容性
- 备份
在实际项目中,这种部署方案显著减少了环境配置时间。通过将整个AI栈容器化,新团队成员能在5分钟内获得可用的开发环境,而运维团队则受益于统一的生产部署流程。一个特别实用的技巧是在初始化脚本中自动预加载常用模型,这可以节省首次使用时的大量等待时间。
更多推荐
所有评论(0)