架构概览
Dify 企业版采用单实例多数据库架构。所有社区版和企业版服务都连接到同一个数据库服务器,但每个服务使用各自独立的数据库:| 数据库 | 默认名称 | 使用组件 |
|---|---|---|
| Dify 核心 | dify | 社区版 API / Worker / Plugin Daemon, 企业版服务 |
| 企业版 | enterprise | dify-enterprise, dify-audit, dify-plugin-manager |
| 审计日志 | audit | dify-audit |
| 插件 | dify_plugin | Plugin Daemon, dify-plugin-manager |
注意:社区版服务和企业版服务使用不同的环境变量命名规范,但必须指向同一个数据库实例。
Docker Compose 配置
在 Docker Compose 部署中,通过修改.env 文件来配置数据库。
1. 环境变量参考
社区版服务 (Dify API / Worker)
| 变量名 | 描述 | PostgreSQL 默认 | MySQL 默认 |
|---|---|---|---|
DB_TYPE | 数据库类型 | postgresql | mysql |
DB_USERNAME | 数据库用户名 | postgres | root |
DB_PASSWORD | 数据库密码 | difyai123456 | difyai123456 |
DB_HOST | 数据库主机名 | db_postgres | db_mysql |
DB_PORT | 数据库端口 | 5432 | 3306 |
DB_DATABASE | Dify 核心数据库名 | dify | dify |
企业版服务
| 变量名 | 描述 | PostgreSQL 默认 | MySQL/TiDB 默认 |
|---|---|---|---|
DB_ENGINE | 数据库引擎 | postgres | mysql |
DB_HOST | 数据库主机名 | db_postgres | db_mysql |
DB_PORT | 数据库端口 | 5432 | 3306 / 4000 (TiDB) |
DB_USER | 数据库用户名 | postgres | root |
DB_PASS | 数据库密码 | difyai123456 | difyai123456 |
DIFY_DB_NAME | Dify 核心数据库名 | dify | dify |
ENTERPRISE_DB_NAME | 企业版数据库名 | enterprise | enterprise |
AUDIT_DB_NAME | 审计日志数据库名 | audit | audit |
2. 外部数据库模式
若使用外部数据库(如 AWS RDS、阿里云 RDS 或 TiDB Cloud),请按以下步骤配置:- 修改
.env环境变量:将上述变量指向您的外部数据库地址。 - 调整
COMPOSE_PROFILES(可选):从COMPOSE_PROFILES中移除数据库类型(如postgresql),以防止启动内置数据库容器。 - 手动创建数据库:在启动 Dify 之前,必须在外部实例中手动创建所需的数据库(详见下文数据库初始化部分)。
Helm Chart 配置
在 Helm 部署中,通过values.yaml 配置数据库。
1. 内部数据库模式 (PostgreSQL)
默认情况下,Helm 会启动一个内置的 PostgreSQL 容器。2. 外部数据库模式 (推荐生产环境)
连接外部 PostgreSQL、MySQL 或 TiDB。数据库初始化
1. 内置数据库模式
使用 Docker Compose 或 Helm 的内置数据库时,系统会自动执行初始化脚本(如dify-postgresql-init.sql)来创建 enterprise 和 audit 数据库。
2. 外部数据库模式 (手动创建)
使用外部数据库时,必须在启动 Dify 之前手动创建以下数据库:PostgreSQL
MySQL / TiDB
常见问题 (FAQ)
为什么有两套数据库变量?
社区版服务(Python)和企业版服务(Go)使用不同的配置规范。在配置时,请确保两套变量指向同一个数据库实例。TiDB 应该选择哪个引擎?
TiDB 兼容 MySQL 协议。在配置时请将DB_TYPE 和 DB_ENGINE 均设置为 mysql,并将端口指向 TiDB 的服务端口(默认 4000)。
如何开启 SSL/TLS 连接?
- Docker Compose: 设置
DB_SSL_MODE="require"。对于 MySQL/TiDB,还需设置DB_TLS="true"。 - Helm: 在
dialectOptions下配置对应的sslMode或tls字段。