agentic_huge_data_base / wiki
页面 Dify · 2.1 服务拓扑与 Docker Compose 栈·DeepWiki 中文全文译文

2.1 · 服务拓扑与 Docker Compose 栈(Service Topology and Docker Compose Stack)

应用编排与外部知识接入 · 聚焦本章的模块关系、源码依据与实现要点。

项目Dify 章节2.1 状态全文译文 模块存储与持久化、测试、发布与运维、配置治理、图谱与关系
源码线索
  • api/.env.example
  • api/Dockerfile
  • api/app.py
  • api/app_factory.py
  • api/configs/feature/__init__.py
  • api/configs/middleware/__init__.py
  • api/configs/observability/__init__.py
  • api/configs/observability/otel/otel_config.py
  • api/configs/packaging/__init__.py
  • api/controllers/console/datasets/datasets.py
模块标签
  • 存储与持久化
  • 测试、发布与运维
  • 配置治理
  • 图谱与关系
  • 系统架构

章节正文

服务拓扑与 Docker Compose 栈

服务拓扑与 Docker Compose 堆栈

相关源文件

本章引用的主要源码文件:

  • api/.env.example
  • api/Dockerfile
  • api/app.py
  • api/app_factory.py
  • api/configs/feature/__init__.py
  • api/configs/middleware/__init__.py
  • api/configs/observability/__init__.py
  • api/configs/observability/otel/otel_config.py
  • api/configs/packaging/__init__.py
  • api/controllers/console/datasets/datasets.py
  • api/core/rag/datasource/vdb/vector_factory.py
  • api/core/rag/datasource/vdb/vector_type.py
  • api/extensions/ext_compress.py
  • api/extensions/ext_otel.py
  • api/extensions/otel/instrumentation.py
  • api/pyproject.toml
  • api/tests/unit_tests/configs/test_dify_config.py
  • api/tests/unit_tests/core/workflow/graph_engine/test_table_runner.py
  • api/uv.lock
  • docker/.env.example
  • docker/README.md
  • docker/docker-compose-template.yaml
  • docker/docker-compose.middleware.yaml
  • docker/docker-compose.yaml
  • docker/envs/core-services/shared.env.example
  • docker/envs/infrastructure/nginx.env.example
  • docker/envs/security.env.example
  • docker/nginx/conf.d/default.conf.template
  • web/.env.example
  • web/Dockerfile
  • web/app/layout.tsx
  • web/config/index.ts
  • web/docker/entrypoint.sh
  • web/package.json
  • web/types/feature.ts

本文档描述了基于 Docker Compose 的 Dify 服务编排,包括完整的服务拓扑、容器依赖关系、网络配置和卷管理。它涵盖了 Docker Compose 堆栈中定义的运行时服务架构。

有关 Docker 构建过程和多阶段镜像的信息,请参阅 3.1 Docker 构建过程与多阶段镜像。有关环境配置和运行时模式的详细信息,请参阅 3.2 环境配置与运行时模式

服务拓扑总览

Dify 平台以多容器 Docker Compose 堆栈形式部署,包含三类服务:核心应用服务基础设施服务可选向量数据库服务。所有服务通过单个 docker-compose.yaml 文件进行编排,并根据配置文件选择数据库 docker/docker-compose.yaml:1-5

拓扑图:代码实体关联

下图将高级服务名称与仓库中定义的特定代码入口点和配置模式关联起来。

Dify · 拓扑图:代码实体关联 · 图 1
Dify · 拓扑图:代码实体关联 · 图 1

来源: docker/docker-compose.yaml:206-250docker/docker-compose-template.yaml:200-240docker/docker-compose.middleware.yaml:1-131api/Dockerfile:114-123

Docker Compose 结构

使用 YAML 锚点共享环境变量

Docker Compose 文件使用 YAML 锚点在多个服务之间共享环境配置。Dify 定义了三个主要共享锚点,用于从 docker/envs/ 目录下的特定 .env 文件中注入配置 docker/docker-compose.yaml:8-205

锚点名称目标服务包含的环境文件
x-shared-api-worker-configapishared.envapi.envsecurity.env、数据库/Redis/向量存储环境变量 docker/docker-compose.yaml:8-72
x-shared-worker-configworkershared.envworker.envsecurity.env、数据库/Redis/向量存储环境变量 docker/docker-compose.yaml:74-138
x-shared-worker-beat-configworker_beatshared.envworker-beat.envsecurity.env、数据库/Redis/向量存储环境变量 docker/docker-compose.yaml:140-204
Dify · 使用 YAML 锚点共享环境变量 · 图 2
Dify · 使用 YAML 锚点共享环境变量 · 图 2

来源: docker/docker-compose.yaml:8-205docker/docker-compose-template.yaml:2-198

核心应用服务

后端服务(相同镜像,不同模式)

所有后端服务使用相同的 langgenius/dify-api 镜像,但根据传递给入口点的 MODE 环境变量执行不同的角色 api/Dockerfile:123

服务镜像MODE描述
apilanggenius/dify-api:1.14.2api处理 REST API 请求的 Flask/Gunicorn 服务器 docker/docker-compose-template.yaml:226
workerlanggenius/dify-api:1.14.2worker用于异步任务(索引、工作流执行)的 Celery 工作进程 docker/docker-compose-template.yaml:273
worker_beatlanggenius/dify-api:1.14.2beat用于周期性任务调度的 Celery Beat docker/docker-compose-template.yaml:318

api 服务绑定到端口 5001,并使用 gevent 作为工作进程类来处理并发请求 docker/.env.example:54-56

前端服务
服务镜像端口描述
weblanggenius/dify-web:1.14.23000用于控制台和 WebApp 的 Next.js Web 应用程序 docker/docker-compose-template.yaml:350-352

来源: docker/docker-compose-template.yaml:221-380api/Dockerfile:31-50docker/.env.example:53-61

基础设施与执行服务

关系型数据库(基于配置文件选择)

Dify 通过 Docker Compose 配置文件支持 PostgreSQL(默认)或 MySQL docker/docker-compose.middleware.yaml:5-46

  • PostgreSQL:使用 postgres:15-alpine。它包含一个使用 pg_isready 的健康检查 docker/docker-compose.middleware.yaml:3-41
  • MySQL:使用 mysql:8.0。仅在指定 mysql 配置文件时激活 docker/docker-compose.middleware.yaml:43-80
沙箱与插件守护进程

执行层为不受信任的代码提供隔离,并管理插件生态系统。

  • 沙箱sandbox 服务(langgenius/dify-sandbox:0.2.15)为工作流中的 CodeNode 提供隔离环境。它监听端口 8194,并通过 CodeExecutionSandboxConfig 进行配置 docker/docker-compose.middleware.yaml:105-128api/configs/feature/__init__.py:103-116
  • 插件守护进程plugin_daemon 服务(langgenius/dify-plugin-daemon:0.6.1-local)处理 Dify 插件的生命周期,并为插件通信提供内部 API docker/docker-compose.middleware.yaml:131-150

来源: docker/docker-compose.middleware.yaml:1-182api/configs/feature/__init__.py:103-191

网络架构

Dify 使用两个 Docker 网络实现严格的网络隔离,以防止 SSRF 并隔离内部流量 docker/docker-compose-template.yaml:63-65

Dify · 网络架构 · 图 3
Dify · 网络架构 · 图 3
  • default:用于所有内部服务间通信 docker/docker-compose-template.yaml:65
  • ssrf_proxy_network:用于需要出站互联网访问的服务。流量通过 ssrf_proxy(Squid)路由,以过滤和监控请求 docker/docker-compose-template.yaml:64docker/docker-compose.middleware.yaml:127-128

来源: docker/docker-compose-template.yaml:63-71docker/docker-compose.middleware.yaml:105-128docker/.env.example:190-195

卷管理与数据持久化

该堆栈使用持久卷来确保数据在容器重启后得以保留。

主机路径容器路径服务用途
./volumes/app/storage/app/api/storageapiworker用户上传、文档和插件数据 docker/docker-compose-template.yaml:254
./volumes/db/data/var/lib/postgresql/datadb_postgres数据库存储 docker/docker-compose.middleware.yaml:24
./volumes/redis/data/dataredisRedis 持久化 docker/docker-compose.middleware.yaml:92
./volumes/sandbox/dependencies/dependenciessandbox代码执行的缓存依赖 docker/docker-compose.middleware.yaml:123

初始化:一个 init_permissions 容器(使用 busybox)在其他服务之前运行,以确保 dify 用户(UID 1001)对共享存储卷具有正确的所有权 docker/docker-compose-template.yaml:202-218api/Dockerfile:54-60

来源: docker/docker-compose-template.yaml:201-219docker/docker-compose.middleware.yaml:23-124api/Dockerfile:53-60