跳转到主要内容
本指南介绍如何为 Dify 企业版配置数据库。Dify 企业版支持 Docker Compose 和 Helm Chart 两种部署方式,并兼容 PostgreSQL、MySQL 和 TiDB 三种数据库引擎。

架构概览

Dify 企业版采用单实例多数据库架构。所有社区版和企业版服务都连接到同一个数据库服务器,但每个服务使用各自独立的数据库:
数据库默认名称使用组件
Dify 核心dify社区版 API / Worker / Plugin Daemon, 企业版服务
企业版enterprisedify-enterprise, dify-audit, dify-plugin-manager
审计日志auditdify-audit
插件dify_plugin_daemonPlugin Daemon, dify-plugin-manager
注意:社区版服务和企业版服务使用不同的环境变量命名规范,但必须指向同一个数据库实例

Docker Compose 配置

在 Docker Compose 部署中,通过修改 .env 文件来配置数据库。

1. 环境变量参考

社区版服务 (Dify API / Worker)

变量名描述PostgreSQL 默认MySQL 默认
DB_TYPE数据库类型postgresqlmysql
DB_USERNAME数据库用户名postgresroot
DB_PASSWORD数据库密码difyai123456difyai123456
DB_HOST数据库主机名db_postgresdb_mysql
DB_PORT数据库端口54323306
DB_DATABASEDify 核心数据库名difydify

企业版服务

变量名描述PostgreSQL 默认MySQL/TiDB 默认
DB_ENGINE数据库引擎postgresmysql
DB_HOST数据库主机名db_postgresdb_mysql
DB_PORT数据库端口54323306 / 4000 (TiDB)
DB_USER数据库用户名postgresroot
DB_PASS数据库密码difyai123456difyai123456
DIFY_DB_NAMEDify 核心数据库名difydify
ENTERPRISE_DB_NAME企业版数据库名enterpriseenterprise
AUDIT_DB_NAME审计日志数据库名auditaudit

2. 外部数据库模式

若使用外部数据库(如 AWS RDS、阿里云 RDS 或 TiDB Cloud),请按以下步骤配置:
  1. 修改 .env 环境变量:将上述变量指向您的外部数据库地址。
  2. 调整 COMPOSE_PROFILES(可选):从 COMPOSE_PROFILES 中移除数据库类型(如 postgresql),以防止启动内置数据库容器。
    # 示例:仅保留向量数据库和非结构化数据处理服务
    COMPOSE_PROFILES="weaviate,unstructured"
    
  3. 手动创建数据库:在启动 Dify 之前,必须在外部实例中手动创建所需的数据库(详见下文数据库初始化部分)。

Helm Chart 配置

在 Helm 部署中,通过 values.yaml 配置数据库。

1. 内部数据库模式 (PostgreSQL)

默认情况下,Helm 会启动一个内置的 PostgreSQL 容器。
postgresql:
  enabled: true
  global:
    postgresql:
      auth:
        postgresPassword: "your_password"
        database: "dify"

2. 外部数据库模式 (推荐生产环境)

连接外部 PostgreSQL、MySQL 或 TiDB。
postgresql:
  enabled: false

externalDatabase:
  enabled: true
  # 可选: postgres | mysql | tidb
  engine: "postgres"
  host: "your-db-host"
  port: 5432
  user: "your-user"
  password: "your-password"
  timezone: "UTC"
  databases:
    dify: "dify"
    enterprise: "enterprise"
    audit: "audit"
    plugin_daemon: "dify_plugin_daemon"
  dialectOptions:
    postgres:
      sslMode: "require"
    mysql:
      params: "charset=utf8mb4&parseTime=true&loc=UTC"
      tls: false

数据库初始化

1. 内置数据库模式

使用 Docker Compose 或 Helm 的内置数据库时,系统会自动执行初始化脚本(如 dify-postgresql-init.sql)来创建 enterpriseaudit 数据库。

2. 外部数据库模式 (手动创建)

使用外部数据库时,必须在启动 Dify 之前手动创建以下数据库:

PostgreSQL

CREATE DATABASE dify;
CREATE DATABASE enterprise;
CREATE DATABASE audit;
-- dify_plugin_daemon 将在首次启动时由插件服务自动创建

MySQL / TiDB

CREATE DATABASE IF NOT EXISTS dify;
CREATE DATABASE IF NOT EXISTS enterprise;
CREATE DATABASE IF NOT EXISTS audit;
-- dify_plugin_daemon 将在首次启动时由插件服务自动创建

常见问题 (FAQ)

为什么有两套数据库变量?

社区版服务(Python)和企业版服务(Go)使用不同的配置规范。在配置时,请确保两套变量指向同一个数据库实例。

TiDB 应该选择哪个引擎?

TiDB 兼容 MySQL 协议。在配置时请将 DB_TYPEDB_ENGINE 均设置为 mysql,并将端口指向 TiDB 的服务端口(默认 4000)。

如何开启 SSL/TLS 连接?

  • Docker Compose: 设置 DB_SSL_MODE="require"。对于 MySQL/TiDB,还需设置 DB_TLS="true"
  • Helm: 在 dialectOptions 下配置对应的 sslModetls 字段。