引言
Dify 是一个强大的多模态 AI 应用构建平台,但默认的部署方式仅适用于单机环境。本文将带你一步步将其升级为高可用、集群化、可扩展的私有部署系统,适配生产环境需求。
Dify 部署核心为开源工程 docker 目录下的 docker-compose.yaml
文件和 .env
文件,docker-compose.yaml
文件中配置了 Dify 部署的总体结构,包括:几个 Dify 自身工程(api、web、 work、sandbox等),还有 Dify 的一些依赖(nginx、PostgreSQL、Redis、罗列了各类向量数据库),具体结构可以参考这里。.env
总结了一些常用变量,通过修改这些变量可以控制 docker-compose.yaml
的部署配置。.env.example
文件给出了一个单机环境部署,如果私有化高可用部署,我们可以在这个基础上进行修改。
部署依赖
1. PostgreSQL 高可用部署
推荐使用 Patroni + etcd + HAProxy 的高可用架构,当然也可以使用云服务:
步骤简述:
- 部署 etcd 集群(3节点)
- 部署 Patroni 管理的 PostgreSQL 集群(至少 3 节点)
- 部署 HAProxy,作为 Dify 的数据库访问入口
推荐使用 Kubernetes + Helm 部署。
修改 .env
配置:
DB_HOST=haproxy # HAProxy 的服务名或负载均衡地址
DB_PORT=5432
在 docker-compose.yaml
中移除原来的 db
服务,改为连接外部 HAProxy。
2. Redis 集群部署
推荐采用 Redis Cluster 模式或 Redis Sentinel 模式。
使用 Redis Cluster,修改 .env
配置:
REDIS_USE_CLUSTERS=true
REDIS_CLUSTERS=redis-node1:6379,redis-node2:6379,redis-node3:6379
REDIS_CLUSTERS_PASSWORD=your_password
注意:Redis Cluster 模式下不支持
pub/sub
的全功能,如需 conversation 持久性,优先使用 Sentinel 模式。
在 docker-compose.yaml
中移除原来的 redis
服务
3. Milvus 向量数据库高可用部署
推荐使用:
- 使用 Helm Charts 配置 Milvus 生产集群部署方案(详见 官方部署文档)
修改 .env
配置:
VECTOR_STORE=milvus
MILVUS_URI=http://milvus-cluster-ip:19530
在 docker-compose.yaml
中移除原来所有的 vector
服务
部署服务
多节点服务部署(Nginx / API / Worker / Web 等)
默认部署方式所有组件都是单实例,推荐将关键服务配置为多节点运行,挂载共享存储。
组件拆分建议:
服务名称 | 推荐副本数 | 无状态 | 说明 |
---|---|---|---|
nginx | 2+ | 是 | 负载均衡入口 |
api | 2+ | 是 | Web API 服务 |
worker | 2+ | 是 | Celery 消费者 |
web | 2+ | 是 | Web 前端 |
sandbox | 1-2 | 是 | 执行代码逻辑 |
ssrf_proxy | 1-2 | 是 | 安全代理 |
plugin_daemon | 1-2 | 是 | 插件运行容器 |
所有服务需使用 external
Redis、PostgreSQL、Milvus。
可以部署多台 Docker 服务,内部使用域名、代理、nginx负载,需要注意修改 ssrf_proxy 配置。
也可以用 Kubernetes + Helm 或者 Kubernetes + YAML,实现弹性伸缩和服务发现,github上有一些参考:helm、YAML。
精简后的 .env
示例(节选)
# PostgreSQL via HAProxy
DB_HOST=haproxy
DB_PORT=5432
DB_USERNAME=postgres
DB_PASSWORD=your-password
DB_DATABASE=dify
# Redis Cluster
REDIS_USE_CLUSTERS=true
REDIS_CLUSTERS=redis-node1:6379,redis-node2:6379,redis-node3:6379
REDIS_CLUSTERS_PASSWORD=your-password
# Milvus cluster
VECTOR_STORE=milvus
MILVUS_URI=http://milvus-cluster:19530
# The Alibaba Cloud OSS configurations,
ALIYUN_OSS_BUCKET_NAME=your-bucket-name
ALIYUN_OSS_ACCESS_KEY=your-access-key
ALIYUN_OSS_SECRET_KEY=your-secret-key
ALIYUN_OSS_ENDPOINT=https://oss-ap-southeast-1-internal.aliyuncs.com
ALIYUN_OSS_REGION=ap-southeast-1
ALIYUN_OSS_AUTH_VERSION=v4
ALIYUN_OSS_PATH=your-path
小结
通过本文部署方案,你可以将 Dify 系统升级为具备高可用、可扩展能力的企业级部署形态。无论是多节点的服务组件,还是高可用的底层存储系统,均能确保在高并发场景下稳定运行。