Skip to main content

Dify Enterprise Edition 部署指南(AWS)

本文档介绍如何在 AWS 云环境中部署 Dify 企业版。您可以选择以下任一方式完成部署:
  • 通过 Terraform(推荐)
  • 通过 CDK
  • 手动创建基础设施并部署(不推荐)

选项一:通过 Terraform 构建

请联系 Dify 技术支持团队获取 Terraform 相关脚本和文档。

前提条件

  1. 本地已安装 kubectlhelmaws cli
  2. 拥有具备创建以下资源权限的 AWS 账号。
Terraform 将自动创建以下云资源以支持 Dify 企业版的部署。如需调整资源规格,可提前修改 Terraform 配置文件。
  • AWS EKS(Elastic Kubernetes Service):用于部署 Dify 核心服务,节点需能访问互联网或配置 NAT Gateway
  • AWS S3(Simple Storage Service):用于持久化存储
  • AWS ECR(Elastic Container Registry):用于 Dify 插件安装,也可用于托管 Dify 镜像与 Helm Chart
  • AWS RDS Aurora Postgres:关系数据库,用于存储应用数据和审计记录
  • AWS OpenSearch:向量数据库,用于 RAG(检索增强生成)相关功能
  • Amazon ElastiCache:托管 Redis 缓存服务,用于加速数据访问

选项二:通过 CDK 构建

请参考 AWS CDK 部署

选项三:手动创建基础设施并部署

1. 创建基础设施

请参考下表推荐的配置,根据实际需求创建基础设施。(请将双括号中的内容替换为实际值)
版本说明(重要): 下表中的版本以“可用范围/版本系列”为参考。在实际部署前,请务必在目标 AWS Region 的控制台或通过 AWS CLI 校验对应服务当前支持的版本(EKS Kubernetes、Aurora PostgreSQL、OpenSearch、ElastiCache Redis 等),避免因区域差异或版本下线导致无法创建资源。

测试环境基础设施配置参考

注意: 若在单节点上启用 unstructured 服务,需将磁盘容量提升至 40 GB。

生产环境基础设施配置参考

此外,您还需要创建适当的虚拟私有云(VPC)和安全组(SG)以确保基础设施的安全性。

2. 配置 values.yaml

完成数据库、S3 等基础设施的创建后,请参考以下示例配置 values.yaml(将双括号中的内容替换为实际值)。在此之前,您需要先在数据库中创建 difyenterpriseauditdify_plugin_daemon 四个数据库,并相应替换 values.yaml 中的 rds_main_database_name 等配置项。

3. 配置 S3 和 ECR 权限

为确保 Dify 服务正常启动及插件系统正常运行,apiworkerworkerBeatplugin_daemonplugin_connector 服务需要 S3 访问权限,plugin_connector 服务还需要 ECR 访问权限。关于 plugin_connector 服务需要这些权限的具体原因,将在后文详细说明。 您可以通过以下两种方式配置权限:
  • IRSA 模式:IAM Roles for Service Accounts,实现安全、精细的权限控制(推荐)
  • Access Key(AK/SK)模式:通过环境变量提供凭证

IRSA 模式配置

Dify 推荐使用 IRSA 配置 ServiceAccount 权限。您可联系 Dify 技术支持团队获取一键部署(one_click) IRSA 脚本。 IRSA 通过 OIDC Provider 建立 EKS 集群与 IAM 之间的信任关系,使 Pod 能够通过 ServiceAccount 安全获取 AWS 权限,无需在 Pod 中配置 Access Key。整体架构如下:
以下是 Dify 企业版所需的 ServiceAccount 权限说明:
💡 关于 CRD 安装的特殊说明 Dify 企业版在安装时仅需 namespace 级别权限。但由于 CRD 本身是集群级别资源,安装时需要相应的集群权限。如果没有集群级别权限,可以先单独安装 CRD,再安装其余组件。CRD 本身只是注册到 Kubernetes 中的 API 结构声明,当其对应的 Controller 为 namespace 级别时,不具备跨 namespace 访问或修改其他资源的能力。
步骤 1:验证 IAM OIDC Provider
在配置 IRSA 之前,请确保集群已启用 IAM OIDC Provider。如果是手动创建的集群,建议通过 eksctl 命令行工具来启用或验证。IAM OIDC Provider 建立了信任关系,允许 EKS 集群向 IAM 证明 Pod 的身份,从而让 Pod 能够安全地获取 AWS 权限。
IRSA 配置需要创建 AWS 角色(Role)和策略(Policy),以及集群 ServiceAccount。创建 ServiceAccount 时建议保持默认名称,避免与 Helm 配置冲突导致权限分配失败。
步骤 2:创建 AWS IAM 策略
需要创建以下三个 IAM 策略: 策略 1:S3 访问策略(名称可自定义,如 DifyS3Policy
策略 2:ECR 完整访问策略(名称可自定义,如 DifyECRPolicy 用于插件镜像的推送和管理,包含 ECR 认证、仓库管理、镜像推送以及审计日志权限:
{your_ecr_repo_prefix} 为您的 ECR 仓库名称前缀。例如您在步骤 5 中配置 imageRepoPrefix123456789.dkr.ecr.us-east-1.amazonaws.com/dify-ee,则此处 ECR 仓库前缀为 dify-ee,对应 Resource 应填写 arn:aws:ecr:us-east-1:123456789:repository/dify-ee*
策略 3:ECR 只读拉取策略(名称可自定义,如 DifyECRPullOnlyPolicy 仅用于拉取插件运行时镜像:
步骤 3:创建 AWS IAM 角色
创建以下三个角色,并将步骤 2 中的策略附加到对应角色上(角色名称可自定义): 获取对应的角色 ARN:
每个角色的信任策略(Trust Policy)需配置为 OIDC Provider 联合认证,以下为信任策略模板:
请将 {oidc_id} 替换为 EKS 集群的 OIDC Provider ID。可通过以下命令获取:
步骤 4:将角色绑定到 EKS 的 ServiceAccount
ServiceAccount(SA)是一种机制,允许 EKS 中的 Pod 获取特定的 AWS 权限,以访问云资源(如 S3)。
创建以下四个 ServiceAccount,并将对应的角色 ARN 添加到 eks.amazonaws.com/role-arn 注解中: 创建 ServiceAccount 的示例命令(请将 $DIFY_EE_* 替换为步骤 3 中获取的角色 ARN):
步骤 5:在 values.yaml 中配置 ServiceAccount
修改 Helm 的 values.yaml,添加以下配置(以下仅展示 ServiceAccount 和 ECR 相关配置,其他配置省略)。imageRepoPrefix 可自定义:
‼️ dify-plugin-connector-sa 会通过 Helm Chart 模板自动分配给 plugin_connector 服务;dify-plugin-crd-sadify-plugin-runner-sa 将被用于构建和运行插件的 Pod。

Access Key 模式配置

步骤 1:准备凭证
创建一个仅具备 S3 和 ECR 权限的 IAM 用户,并获取其 Access Key 和 Secret Key。
步骤 2:创建 Kubernetes Secret
该 Secret 需要在下一步通过 values.yaml 中的 imageRepoSecret 配置给 plugin_connector 服务。
步骤 3:配置 values.yaml

4. 安装 AWS ALB(Application Load Balancer)

为使 Dify 企业版可通过域名访问,您需要安装 AWS ALB(Application Load Balancer)。您也可以选择使用 Nginx Ingress Controller 或其他 Ingress Controller。推荐使用 AWS ALB,因为它能与 Dify 企业版无缝集成,并提供更好的性能和可扩展性。 请访问 https://docs.aws.amazon.com/eks/latest/userguide/lbc-manifest.html 获取 AWS ALB 安装指南。
如果无法安装 AWS ALB,可使用 Nginx Ingress Controller 作为备选方案:
AWS ALB 安装完成后,可通过以下命令确认服务是否正常运行:
安装完成后,请在 values.yaml 中配置 Ingress:
*若要通过 SSL 证书发布 Dify 企业版服务,请在 ALB 注解中配置证书,并在 global 配置中启用 TLS。您可通过 AWS Certificate Manager 验证域名并创建证书。

5. 执行安装

请访问 https://langgenius.github.io/dify-helm/#/ 获取详细的安装说明。
‼️ 不建议将 Dify 安装在 default 命名空间中。

6. 验证服务状态

  1. 更新 kubectl 访问凭证:
  1. 验证 EKS 节点已正常启动:
  1. 验证 Dify 服务运行状态:
  1. 确认 ALB 是否正常工作:
‼️ 请将上述命令输出的 DNSName 配置为 CNAME 记录,解析到 Dify 所需的各个域名。

7. 初始化服务

至此安装完成。请访问 enterprise.dify.yourdomain.com 登录 Dify 企业版管理后台,进行后续配置和使用。