📌 摘要
本文以中国开发者视角出发,手把手教你用 Docker Compose 在本地或轻量云主机上部署 Dify + Ollama 组合栈,实现“安全、可观测、可扩展”的私有化 AI 应用平台。全文约 8 000 字,包含:
- 架构图、流程图、甘特图、思维导图等 6 种图表;
- 10+ 段可直接复制的 Python 示例代码;
- 5 大实战场景(RAG 知识库、代码助手、企业内部问答等);
- 常见 15 个“坑”及解决方案;
- 从裸奔到 HTTPS + Basic Auth + IP 白名单的完整安全加固方案。
读完即可在生产环境落地。
📖 目录
1️⃣ 背景知识 {#背景知识}
| 名词 | 作用 | 本次使用场景 |
|---|---|---|
| Dify | 开源 LLMOps 平台(对标 LangChain+LangSmith) | 提供 UI、RAG、API 网关 |
| Ollama | 本地大模型运行时(支持 Llama3、Qwen、CodeLlama 等) | 私有化模型推理 |
| Docker Compose | 容器编排 | 一键拉起全栈 |
思维导图:为何选 Dify+Ollama?
mindmap
root((选择 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:15
container_name: postgres
restart: unless-stopped
environment:
POSTGRES_USER: dify
POSTGRES_PASSWORD: dify123
POSTGRES_DB: dify
volumes:
- ./data/postgres:/var/lib/postgresql/data
networks: [dify]
redis:
image: redis:7-alpine
container_name: redis
restart: unless-stopped
networks: [dify]
api:
image: langgenius/dify-api:latest
container_name: dify-api
restart: unless-stopped
depends_on: [postgres, redis]
env_file: .env
ports:
- "5001:5001"
networks: [dify]
web:
image: langgenius/dify-web:latest
container_name: dify-web
restart: unless-stopped
ports:
- "3000:3000"
networks: [dify]
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ./data/ollama:/root/.ollama
networks: [dify]
# 如需 GPU
# runtime: nvidia
# environment:
# - NVIDIA_VISIBLE_DEVICES=all
networks:
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 requests
API_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️⃣ 扩展阅读 {#扩展阅读}
🔟 总结与展望 {#总结}
| 维度 | 达成情况 |
|---|---|
| 安全性 | 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/

5387

被折叠的 条评论
为什么被折叠?



