Dify 私有化部署全解析:构建企业级 AI 应用开发平台
前言
在人工智能快速发展的今天,如何快速构建和部署 AI 应用已成为企业数字化转型的核心挑战。Dify 作为一款开源的 LLMs(大型语言模型)应用开发平台,凭借其直观的设计和强大的功能,已帮助数万家企业实现了 AI 能力的快速落地。本文将深入解析基于 Docker 的 Dify 私有化部署方案,带你一步步构建属于自己的企业级 AI 应用开发平台。
一、项目概览
1.1 什么是 Dify?
Dify 是一个开源的 LLMs 应用开发平台,支持超过数百种主流 AI 模型的接入,包括 GPT、Claude、Gemini、通义千问、文心一言等。其核心功能包括:
- 可视化 AI 工作流编排:通过拖拽式界面,轻松构建复杂的 AI 工作流程
- RAG 能力:一键接入私有知识库,实现企业文档的智能问答
- AI Agent:支持构建智能代理,自动完成多步骤复杂任务
- 模型统一管理:一站式管理企业所有 AI 模型资源
- 应用市场:丰富的预置模板和插件生态
1.2 部署方案拓扑

系统架构图 - 分层展示 Dify 各组件及数据流向
二、核心组件详解
2.1 API 服务 (dify-api)
API 服务是整个平台的核心,负责处理所有业务逻辑和 RESTful API 请求。
api:
image: langgenius/dify-api:1.8.1
environment:
MODE: api
SERVER_WORKER_CLASS: gevent # 高并发处理模式
SERVER_WORKER_AMOUNT: 1
GUNICORN_TIMEOUT: 360 # 支持长连接
关键配置参数:
| 参数 | 说明 | 默认值 |
|---|---|---|
MODE |
启动模式 | api |
SERVER_WORKER_CLASS |
Worker 类型 | gevent |
SERVER_WORKER_AMOUNT |
Worker 数量 | 1 |
GUNICORN_TIMEOUT |
请求超时时间 | 360s |
2.2 Web 前端 (dify-web)
提供 Web 控制台界面,支持应用创建、知识库管理、用户管理等完整功能。
web:
image: langgenius/dify-web:1.8.1
environment:
CONSOLE_API_URL: ${CONSOLE_API_URL:-}
NEXT_TELEMETRY_DISABLED: 0
2.3 PostgreSQL 数据库
主数据库,存储所有业务数据:
db:
image: postgres:15-alpine
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: difyai123456
POSTGRES_DB: dify
ports:
- '17432:5432'
2.4 Redis 缓存
用于缓存和 Celery 消息队列:
redis:
image: redis:6-alpine
command: redis-server --requirepass difyai123456
2.5 Sandbox 沙箱
安全的代码执行环境,支持工作流中的代码执���节���:
sandbox:
image: langgenius/dify-sandbox:0.2.12
environment:
API_KEY: dify-sandbox
ENABLE_NETWORK: true # 允许网络访问
HTTP_PROXY: http://ssrf_proxy:3128
2.6 Plugin Daemon
支持 Python 插件扩展:
plugin_daemon:
image: langgenius/dify-plugin-daemon:0.2.0-local
ports:
- "17003:17003" # 调试端口
2.7 SSRF Proxy
关键的安全组件,防止 Server-Side Request Forgery 攻击:
ssrf_proxy:
image: ubuntu/squid:latest
environment:
HTTP_PORT: 3128
HTTP_PROXY_SERVER_HOST: 192.168.31.107
HTTP_PROXY_SERVER_PORT: 7890
三、存储配置详解
3.1 文件存储
Dify 支持多种文件存储后端配置:
# 本地存储
STORAGE_TYPE=opendal
OPENDAL_SCHEME=fs
OPENDAL_FS_ROOT=storage
支持的存储类型:
- Local: 本地文件系统
- S3: AWS S3 / MinIO
- Azure Blob: Azure Blob Storage
- 阿里云 OSS
- 腾讯 COS
- Google Storage
3.2 向量数据库
用于 RAG 知识库的向量存储:
# 当前配置
VECTOR_STORE=weaviate
WEAVIATE_ENDPOINT=http://weaviate:8080
WEAVIATE_API_KEY=WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih
支持的向量数据库:
| 数据库 | 配置参数 | 说明 |
|---|---|---|
| Weaviate | VECTOR_STORE=weaviate |
当前使用 |
| Qdrant | VECTOR_STORE=qdrant |
高性能向量搜索 |
| Milvus | VECTOR_STORE=milvus |
开源向量数据库 |
| pgvector | VECTOR_STORE=pgvector |
PostgreSQL 扩展 |
| Elasticsearch | VECTOR_STORE=elasticsearch |
全文搜索 |
四、网络与安全配置
4.1 端口映射
┌────────────────┬──────────────┬────────────────────────────────────────┐
│ 服务 │ 内部端口 │ 说明 │
├────────────────┼──────────────┼────────────────────────────────────────┤
│ Nginx HTTP │ 80 │ 17080 → 80 (外部访问) │
│ Nginx HTTPS │ 443 │ 17443 → 443 (外部访问) │
│ PostgreSQL │ 5432 │ 17432 → 5432 (外部访问) │
│ Plugin Debug │ 17003 │ 17003 → 17003 (外部调试) │
│ Weaviate │ 8080 │ 仅内网访问 │
│ Sandbox │ 8194 │ 仅内网访问 │
└────────────────┴──────────────┴────────────────────────────────────────┘
4.2 SSRF 防护配置
Squid 代理配置(ssrf_proxy/squid.conf.template):
# 仅允许特定域名通过上游代理访问
cache_peer 192.168.31.107 parent 7890 0 no-query no-digest no-netdb-exchange default
acl external_domains dstdomain .googleapis.com .google.com .openai.com .anthropic.com .github.com
never_direct allow external_domains
# 反向代理到 Sandbox
http_port 8194 accel vhost
cache_peer sandbox parent 8194 0 no-query originserver
允许访问的外部域名:
.googleapis.com .google.com google.dev
.openai.com .anthropic.com
.github.com .githubusercontent.com .githubassets.com
.youtube.com .duckduckgo.com .huggingface.co
.dify.ai
4.3 安全建议
-
变更默认密码:修改以下默认凭证
# 数据库密码 DB_PASSWORD=difyai123456 → 替换为强密码 # Redis 密码 REDIS_PASSWORD=difyai123456 → 替换为强密码 # Sandbox API Key SANDBOX_API_KEY=dify-sandbox → 使用 openssl rand -base64 42 生成 -
启用 HTTPS:在
.env文件中设置NGINX_HTTPS_ENABLED=true NGINX_SSL_CERT_FILENAME=your-cert.crt NGINX_SSL_CERT_KEY_FILENAME=your-cert.key -
网络隔离:生产环境建议配置防火墙规则
五、部署步骤
5.1 环境要求
- Docker Engine: 20.10+
- Docker Compose: 2.0+
- 内存: 推荐 8GB+
- 磁盘: 推荐 100GB+
5.2 快速部署
# 1. 进入部署目录
cd \dify\docker
# 2. 编辑环境变量(重要!)
cp .env .env.original # 备份原始配置
# 3. 启动所有服务
docker-compose up -d
# 4. 查看服务状态
docker-compose ps
# 5. 查看日志
docker-compose logs -f api
5.3 验证部署
访问控制台验证服务是否正常运行:
http://your-server-ip:17080
首次访问时,系统会提示创建管理员账号。
六、运维管理
6.1 常用命令
# 查看所有服务状态
docker-compose ps
# 查看特定服务日志
docker-compose logs -f api
docker-compose logs -f worker
docker-compose logs -f web
# 重启服务
docker-compose restart api
# 停止所有服务
docker-compose down
# 更新服务
docker-compose pull
docker-compose up -d
6.2 数据持久化
关键数据存储目录:
volumes/
├── app/storage/ # 用户上传文件
├── db/data/ # PostgreSQL 数据
├── redis/data/ # Redis 持久化
├── weaviate/ # 向量数据库
├── sandbox/ # 沙箱依赖
└── plugin_daemon/ # 插件存储
6.3 备份策略
建议配置定时备份任务:
# 备份数据库
docker-compose exec db pg_dump -U postgres dify > backup_$(date +%Y%m%d).sql
# 备份配置
tar -czf dify_config_$(date +%Y%m%d).tar.gz .env nginx/ ssrf_proxy/
七、常见问题
7.1 服务启动失败
症状:服务无法启动或频繁重启
排查步骤:
# 1. 查看详细日志
docker-compose logs service_name
# 2. 检查端口占用
netstat -ano | findstr :5432
# 3. 检查资源限制
docker stats
7.2 无法连接数据库
排查步骤:
# 1. 等待数据库健康检查通过
docker-compose ps
# 2. 检查数据库日志
docker-compose logs db
7.3 外部 AI 模型无法访问
检查 SSRF Proxy 配置和上游代理连通性:
# 测试代理连通性
docker-compose exec ssrf_proxy curl -x http://localhost:3128 https://api.openai.com
# 检查域名配置
cat ssrf_proxy/squid.conf.template | grep DOMAINS_BY_PROXY
八、扩展配置
8.1 性能优化
-
增加 Worker 数量:
SERVER_WORKER_AMOUNT=2 CELERY_WORKER_AMOUNT=2 -
数据库连接池:
SQLALCHEMY_POOL_SIZE=50 SQLALCHEMY_MAX_OVERFLOW=20 -
调整 Weaviate 内存:
QUERY_DEFAULTS_LIMIT=50
8.2 高可用方案
- 配置 PostgreSQL 主从复制
- 使用 Redis Sentinel/Cluster
- 配置多实例 Nginx 负载均衡
- 使用外部对象存储替代本地存储
九、总结
通过本文的详细解析,你应该对 Dify 的私有化部署有了全面的理解。该方案提供了:
- ✅ 一站式 AI 应用开发平台
- ✅ 可视化工作流编排
- ✅ 企业级安全防护
- ✅ 灵活的扩展能力
- ✅ 完善的运维支持