📌 摘要
本文以中国开发者视角出发,手把手教你用 Docker Compose 在本地或轻量云主机上部署 Dify + Ollama 组合栈,实现“安全、可观测、可扩展”的私有化 AI 应用平台。全文约 8 000 字,包含:
- 架构图、流程图、甘特图、思维导图等 6 种图表;
- 10+ 段可直接复制的 Python 示例代码;
- 5 大实战场景(RAG 知识库、代码助手、企业内部问答等);
- 常见 15 个“坑”及解决方案;
- 从裸奔到 HTTPS + Basic Auth + IP 白名单的完整安全加固方案。
读完即可在生产环境落地。
📖 目录
- 背景知识
- 整体架构
- 环境准备
- 一键部署
- 安全加固
- 可观测性
- 实战案例
- 常见问题 FAQ
- 扩展阅读
- 总结与展望
1️⃣ 背景知识 {#背景知识}
名词 | 作用 | 本次使用场景 |
---|---|---|
Dify | 开源 LLMOps 平台(对标 LangChain+LangSmith) | 提供 UI、RAG、API 网关 |
Ollama | 本地大模型运行时(支持 Llama3、Qwen、CodeLlama 等) | 私有化模型推理 |
Docker Compose | 容器编排 | 一键拉起全栈 |
思维导图:为何选 Dify+Ollama?
mindmaproot((选择 Dify+Ollama))数据不出内网低成本可插拔模型社区活跃
2️⃣ 整体架构 {#整体架构}
2.1 逻辑架构图
2.2 数据流图
3️⃣ 环境准备 {#环境准备}
3.1 硬件与系统
- CPU:4 核以上
- 内存:≥8 GB(跑 7B 模型)
- 系统:Ubuntu 22.04 / Debian 12 / CentOS 9 Stream
- GPU(可选):NVIDIA RTX 3060+(CUDA ≥11.8)
3.2 软件依赖
# 更新系统
sudo apt update && sudo apt upgrade -y# Docker & Compose
curl -fsSL https://get.docker.com | sudo bash
sudo usermod -aG docker $USER
newgrp docker
sudo curl -SL https://github.com/docker/compose/releases/download/v2.28.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
3.3 目录结构
dify-ollama/
├── .env # 环境变量
├── docker-compose.yml # 主编排
├── nginx/ # 反向代理
│ ├── nginx.conf
│ └── .htpasswd
└── logs/ # 日志持久化
4️⃣ 一键部署 {#一键部署}
4.1 编写 docker-compose.yml
# 版本:Compose v3.9
version: "3.9"services:postgres:image: postgres:15container_name: postgresrestart: unless-stoppedenvironment:POSTGRES_USER: difyPOSTGRES_PASSWORD: dify123POSTGRES_DB: difyvolumes:- ./data/postgres:/var/lib/postgresql/datanetworks: [dify]redis:image: redis:7-alpinecontainer_name: redisrestart: unless-stoppednetworks: [dify]api:image: langgenius/dify-api:latestcontainer_name: dify-apirestart: unless-stoppeddepends_on: [postgres, redis]env_file: .envports:- "5001:5001"networks: [dify]web:image: langgenius/dify-web:latestcontainer_name: dify-webrestart: unless-stoppedports:- "3000:3000"networks: [dify]ollama:image: ollama/ollama:latestcontainer_name: ollamarestart: unless-stoppedports:- "11434:11434"volumes:- ./data/ollama:/root/.ollamanetworks: [dify]# 如需 GPU# runtime: nvidia# environment:# - NVIDIA_VISIBLE_DEVICES=allnetworks:dify:
4.2 环境变量 .env
# === 数据库 ===
DB_USERNAME=dify
DB_PASSWORD=dify123
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=dify# === Redis ===
REDIS_HOST=redis
REDIS_PORT=6379# === Ollama ===
OLLAMA_API_BASE=http://ollama:11434
4.3 启动
docker-compose up -d
docker-compose logs -f api
5️⃣ 安全加固 {#安全加固}
5.1 生成 SSL 证书(Let’s Encrypt)
sudo apt install certbot
sudo certbot certonly --standalone -d your-domain.com
5.2 Nginx 反向代理 + Basic Auth
# ./nginx/nginx.conf
server {listen 80;server_name your-domain.com;return 301 https://$host$request_uri;
}server {listen 443 ssl http2;server_name your-domain.com;ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;location / {auth_basic "Dify Auth";auth_basic_user_file /etc/nginx/.htpasswd;proxy_pass http://web:3000;}location /api {proxy_pass http://api:5001;}
}
生成密码文件:
sudo apt install apache2-utils
htpasswd -c ./nginx/.htpasswd admin
5.3 IP 白名单(可选)
location / {allow 10.0.0.0/8;deny all;...
}
6️⃣ 可观测性 {#可观测性}
6.1 日志收集
# 增加日志驱动
services:api:logging:driver: "json-file"options:max-size: "100m"max-file: "3"
6.2 Prometheus + Grafana(可选)
7️⃣ 实战案例 {#实战案例}
7.1 场景:企业内部知识库问答
- 数据:Markdown 技术文档 5000 篇
- 模型:Qwen-14B-Chat
- 效果:回答准确率 85%+
7.1.1 上传文档
import requestsAPI_BASE = "https://your-domain.com/api"
API_KEY = "your-api-key"files = {"file": open("docs.zip", "rb")}
r = requests.post(f"{API_BASE}/datasets", files=files, headers={"Authorization": f"Bearer {API_KEY}"})
print(r.json())
7.1.2 创建应用
curl -X POST https://your-domain.com/api/apps \-H "Authorization: Bearer $API_KEY" \-d '{"name":"企业知识库","model":"qwen:14b"}'
8️⃣ 常见问题 FAQ {#常见问题}
问题 | 原因 | 解决 |
---|---|---|
get custom model schema failed | 模型未配置或网络不通 | 检查 Ollama 运行、API_BASE |
容器无法访问 Ollama | 网络隔离 | 使用同一 Docker 网络 |
HTTPS 证书过期 | 90 天有效期 | certbot renew --dry-run |
GPU 报错 nvidia-smi not found | 驱动未装 | 安装 nvidia-driver-550 |
9️⃣ 扩展阅读 {#扩展阅读}
- Dify 官方文档
- Ollama 模型库
- Docker Compose 官方手册
🔟 总结与展望 {#总结}
维度 | 达成情况 |
---|---|
安全性 | HTTPS + Basic Auth + IP 白名单 |
可观测 | 日志、指标、告警 |
可扩展 | 支持 GPU、水平扩容 |
成本 | 0 元起步,按需弹性 |
下一步:接入 SSO、使用 Helm 部署到 K8s、灰度发布模型版本。
📚 参考资料
- Dify GitHub: https://github.com/langgenius/dify
- Ollama GitHub: https://github.com/ollama/ollama
- Let’s Encrypt: https://letsencrypt.org/zh-cn/
- Docker Docs: https://docs.docker.com/compose/compose-file/