部署与操作(中文译文)
原始 DeepWiki 页面:https://deepwiki.com/langgenius/dify/3-deployment-and-operations
翻译时间:2026-05-27T08:44:40.405Z
翻译模型:deepseek-chat
原文字符数:18100
项目:Dify (dify)
---
部署与运维
相关源文件
以下文件被用作生成此 Wiki 页面的上下文:
api/.env.exampleapi/Dockerfileapi/app.pyapi/app_factory.pyapi/configs/feature/__init__.pyapi/configs/middleware/__init__.pyapi/configs/middleware/cache/redis_config.pyapi/configs/observability/__init__.pyapi/configs/observability/otel/otel_config.pyapi/configs/packaging/__init__.pyapi/controllers/console/datasets/datasets.pyapi/core/rag/datasource/vdb/vector_factory.pyapi/core/rag/datasource/vdb/vector_type.pyapi/extensions/ext_celery.pyapi/extensions/ext_compress.pyapi/extensions/ext_otel.pyapi/extensions/ext_redis.pyapi/extensions/otel/instrumentation.pyapi/pyproject.tomlapi/schedule/queue_monitor_task.pyapi/schedule/workflow_schedule_task.pyapi/tests/test_containers_integration_tests/trigger/__init__.pyapi/tests/test_containers_integration_tests/trigger/conftest.pyapi/tests/test_containers_integration_tests/trigger/test_trigger_e2e.pyapi/tests/unit_tests/configs/test_dify_config.pyapi/tests/unit_tests/core/workflow/graph_engine/test_table_runner.pyapi/tests/unit_tests/extensions/test_celery_ssl.pyapi/tests/unit_tests/extensions/test_redis.pyapi/uv.lockdocker/.env.exampledocker/README.mddocker/docker-compose-template.yamldocker/docker-compose.middleware.yamldocker/docker-compose.yamldocker/envs/core-services/shared.env.exampledocker/envs/infrastructure/nginx.env.exampledocker/envs/security.env.exampledocker/nginx/conf.d/default.conf.templateweb/.env.exampleweb/Dockerfileweb/app/layout.tsxweb/config/index.tsweb/docker/entrypoint.shweb/package.jsonweb/types/feature.ts
---
目的与范围
本文档概述了 Dify 平台的部署策略和运维注意事项,涵盖了在生产环境中部署和运维 Dify 所需的服务架构、部署方法、配置管理和运行时模式。
关于特定主题的详细信息:
- Docker 镜像构建过程:参见 Docker 构建过程与多阶段镜像
- 运行时模式与入口点配置:参见 环境配置与运行时模式
- 存储与向量数据库设置:参见 存储后端与向量数据库配置
- 后台任务处理:参见 使用 Celery 处理后台任务
关于开发环境设置,参见 开发环境设置。关于系统架构详情,参见 系统架构总览。
---
部署架构
Dify 平台由多个容器化服务组成,通过 Docker Compose 或 Kubernetes 进行编排。架构将关注点分离到不同的服务层:表示层(Web)、应用层(API)、后台处理层(Worker/Beat)、执行隔离层(Sandbox)和数据持久化层(数据库)。
服务拓扑
graph TB
subgraph "入口层"
Nginx["nginx<br/>(反向代理)<br/>端口 80/443"]
end
subgraph "应用层"
API["api<br/>langgenius/dify-api:1.14.2<br/>MODE=api<br/>端口 5001"]
Web["web<br/>langgenius/dify-web:1.14.2<br/>端口 3000"]
end
subgraph "处理层"
Worker["worker<br/>langgenius/dify-api:1.14.2<br/>MODE=worker<br/>CELERY_WORKER_AMOUNT"]
WorkerBeat["worker_beat<br/>langgenius/dify-api:1.14.2<br/>MODE=beat"]
end
subgraph "执行层"
Sandbox["sandbox<br/>langgenius/dify-sandbox:0.2.15<br/>端口 8194<br/>API_KEY"]
PluginDaemon["plugin_daemon<br/>langgenius/dify-plugin-daemon:0.6.1-local<br/>端口 5002"]
end
subgraph "数据层"
DBPostgres["db_postgres<br/>postgres:15-alpine<br/>端口 5432<br/>PGDATA"]
DBMySQL["db_mysql<br/>mysql:8.0<br/>端口 3306<br/>(可选)"]
Redis["redis<br/>redis:6-alpine<br/>端口 6379<br/>REDIS_PASSWORD"]
end
subgraph "网络隔离"
SSRFProxy["ssrf_proxy<br/>squid<br/>端口 3128"]
end
Nginx --> Web
Nginx --> API
API --> DBPostgres
API --> DBMySQL
API --> Redis
API --> Sandbox
API --> PluginDaemon
Worker --> DBPostgres
Worker --> DBMySQL
Worker --> Redis
WorkerBeat --> Redis
Sandbox --> SSRFProxy
API --> SSRFProxy
Web -.CONSOLE_API_URL.-> API
服务依赖与启动顺序
graph TB
InitPermissions["init_permissions<br/>busybox:latest<br/>chown -R 1001:1001"]
DBPostgres["db_postgres<br/>健康检查: pg_isready"]
DBMySQL["db_mysql<br/>健康检查: SELECT 1"]
Redis["redis<br/>健康检查: redis-cli ping"]
API["api<br/>depends_on:<br/>- init_permissions<br/>- db_postgres/db_mysql<br/>- redis"]
Worker["worker<br/>depends_on:<br/>- init_permissions<br/>- db_postgres/db_mysql<br/>- redis"]
WorkerBeat["worker_beat<br/>depends_on:<br/>- init_permissions<br/>- db_postgres/db_mysql<br/>- redis"]
InitPermissions -->|service_completed_successfully| API
InitPermissions -->|service_completed_successfully| Worker
InitPermissions -->|service_completed_successfully| WorkerBeat
DBPostgres -->|service_healthy| API
DBPostgres -->|service_healthy| Worker
DBPostgres -->|service_healthy| WorkerBeat
DBMySQL -->|service_healthy| API
DBMySQL -->|service_healthy| Worker
DBMySQL -->|service_healthy| WorkerBeat
Redis -->|service_started| API
Redis -->|service_started| Worker
Redis -->|service_started| WorkerBeat
来源:docker/docker-compose-template.yaml:1-152, docker/docker-compose.yaml:1-115, docker/docker-compose.middleware.yaml:1-128
---
部署方法
Docker Compose 部署
Docker Compose 是开发、测试和小规模生产部署的推荐方法。平台提供了预配置的 Compose 文件,用于编排所有必要的服务。
关键文件:
docker/docker-compose.yaml- 自动生成的主 Compose 文件docker/docker-compose.yaml:1-5docker/docker-compose-template.yaml- 用于生成的模板docker/docker-compose-template.yaml:1-2docker/docker-compose.middleware.yaml- 仅中间件服务docker/docker-compose.middleware.yaml:1-103docker/.env.example- 环境配置模板docker/.env.example:1-150
部署步骤:
- 配置:复制并自定义环境文件
cp docker/.env.example docker/.env
- 数据库选择:通过 Docker Compose 配置文件选择数据库
docker/docker-compose.middleware.yaml:5-7
- PostgreSQL:--profile postgresql(默认) - MySQL:--profile mysql
- 服务启动:启动服务及其依赖
docker compose --profile postgresql up -d
服务配置文件:
| 配置文件 | 服务 | 使用场景 |
|---|---|---|
postgresql | db_postgres, api, worker, worker_beat, web, redis, sandbox, plugin_daemon | 默认生产环境设置 docker/docker-compose.middleware.yaml:7 |
mysql | db_mysql, api, worker, worker_beat, web, redis, sandbox, plugin_daemon | 基于 MySQL 的部署 docker/docker-compose.middleware.yaml:46 |
来源:docker/docker-compose-template.yaml:184-210, docker/docker-compose.middleware.yaml:1-100
---
服务组件
API 服务(api)
API 服务是主要的应用服务器,处理来自控制台(管理端)和服务(运行时)接口的 HTTP 请求。
容器配置:
- 镜像:
langgenius/dify-api:1.14.2api/pyproject.toml:3 - 运行时模式:
MODE: apidocker/docker-compose-template.yaml:30 - 端口:
5001(可通过DIFY_PORT配置)docker/.env.example:54 - 进程管理器:使用
gevent工作模式的 Gunicornapi/pyproject.toml:14-18 - 工作进程数量:由
SERVER_WORKER_AMOUNT控制docker/.env.example:55
启动流程(从入口点开始):
graph LR
Start["entrypoint.sh"] --> CheckMode{"MODE == 'api'?"}
CheckMode -->|是| Migration["flask db upgrade<br/>(如果 MIGRATION_ENABLED)"]
Migration --> StartGunicorn["gunicorn<br/>--bind $DIFY_BIND_ADDRESS:$DIFY_PORT<br/>--workers $SERVER_WORKER_AMOUNT<br/>--worker-class $SERVER_WORKER_CLASS<br/>app:app"]
CheckMode -->|否| OtherMode["worker/beat/job 模式"]
StartGunicorn --> APIReady["API 就绪<br/>监听 0.0.0.0:5001"]
关键环境变量:
| 变量 | 默认值 | 用途 |
|---|---|---|
MODE | api | 决定服务行为 docker/docker-compose-template.yaml:30 |
DIFY_PORT | 5001 | API 服务端口 docker/.env.example:54 |
SERVER_WORKER_AMOUNT | 1 | Gunicorn 工作进程数量 docker/.env.example:55 |
SERVER_WORKER_CLASS | gevent | 工作进程类型(sync/gevent/solo)docker/.env.example:56 |
GUNICORN_TIMEOUT | 360 | 请求超时时间(秒)docker/.env.example:61 |
MIGRATION_ENABLED | true | 启动时自动运行数据库迁移 docker/.env.example:37 |
来源:api/Dockerfile:113-122, docker/docker-compose-template.yaml:22-68, docker/.env.example:1-70
Worker 服务(worker)
Worker 服务使用 Celery 处理异步后台任务,从多个专用队列中消费消息。
容器配置:
- 镜像:
langgenius/dify-api:1.14.2api/pyproject.toml:3 - 运行时模式:
MODE: workerdocker/docker-compose-template.yaml:78 - 工作进程类:由
CELERY_WORKER_CLASS控制docker/.env.example:62
队列架构:
graph LR
Redis["Redis<br/>CELERY_BROKER_URL<br/>端口 6379"] --> Queue1["dataset 队列<br/>(文档索引)"]
Redis --> Queue2["generation 队列<br/>(大语言模型处理)"]
Redis --> Queue3["mail 队列<br/>(邮件发送)"]
Redis --> Queue4["ops_trace 队列<br/>(追踪数据)"]
Redis --> Queue5["dataset_summary 队列<br/>(摘要生成)"]
Queue1 --> Worker["Celery Worker<br/>CELERY_WORKER_AMOUNT"]
Queue2 --> Worker
Queue3 --> Worker
Queue4 --> Worker
Queue5 --> Worker
Worker 扩缩容配置:
| 变量 | 默认值 | 用途 |
|---|---|---|
CELERY_WORKER_AMOUNT | 4 | 固定工作进程数量 docker/.env.example:63 |
CELERY_AUTO_SCALE | false | 启用自动扩缩容 docker/.env.example:64 |
CELERY_MAX_WORKERS | 未设置 | 自动扩缩容时的最大工作进程数 docker/.env.example:65 |
CELERY_MIN_WORKERS | 未设置 | 自动扩缩容时的最小工作进程数 docker/.env.example:66 |
来源:docker/docker-compose-template.yaml:69-114, docker/.env.example:62-70, api/pyproject.toml:10
Worker Beat 服务(worker_beat)
Beat 服务使用 Celery Beat 提供定时任务执行功能,用于周期性后台作业。
容器配置:
- 镜像:
langgenius/dify-api:1.14.2api/pyproject.toml:3 - 运行时模式:
MODE: beatdocker/docker-compose-template.yaml:124
Beat 服务只需要 Redis 连接,不处理请求。每个部署应只运行一个 Beat 实例,以避免重复的任务调度。
来源:docker/docker-compose-template.yaml:115-152
Web 服务(web)
Web 服务提供 Next.js 前端应用,用于控制台和最终用户界面。
容器配置:
- 镜像:
langgenius/dify-web:1.14.2web/package.json:4 - 框架:Next.js(通过
next build构建)web/package.json:27 - 端口:
3000(默认) - Node 版本:22.x
api/Dockerfile:55
环境变量映射: Web 容器在运行时将后端环境变量映射到 Next.js 变量,包括 CONSOLE_API_URL 和 APP_API_URL docker/docker-compose-template.yaml:158-159。
来源:web/package.json:1-50, docker/docker-compose-template.yaml:153-182
Sandbox 服务(sandbox)
Sandbox 服务为工作流代码节点和工具操作提供隔离的代码执行环境。
容器配置:
- 镜像:
langgenius/dify-sandbox:0.2.15docker/docker-compose.middleware.yaml:106 - 端口:
8194docker/docker-compose.middleware.yaml:120 - API 认证:
API_KEYdocker/docker-compose.middleware.yaml:114
关键安全参数:
| 变量 | 默认值 | 用途 |
|---|---|---|
API_KEY | dify-sandbox | 认证令牌 docker/docker-compose.middleware.yaml:114 |
WORKER_TIMEOUT | 15 | 最大执行时间(秒)docker/docker-compose.middleware.yaml:116 |
ENABLE_NETWORK | true | 允许网络访问 docker/docker-compose.middleware.yaml:117 |
来源:docker/docker-compose.middleware.yaml:105-128, api/configs/feature/__init__.py:103-116
插件守护进程服务(plugin_daemon)
插件守护进程在隔离环境中管理插件的生命周期、安装和执行。
容器配置:
- 镜像:
langgenius/dify-plugin-daemon:0.6.1-localdocker/docker-compose.middleware.yaml:132 - 端口:
5002docker/docker-compose.middleware.yaml:145 - 数据库:
DB_DATABASEdocker/docker-compose.middleware.yaml:141
来源:docker/docker-compose.middleware.yaml:131-180, docker/.env.example:209-213
---
配置管理
配置层级
Dify 平台使用基于 Pydantic 校验的分层配置系统 api/configs/feature/__init__.py:15-17。
配置类:
| 类 | 文件 | 用途 |
|---|---|---|
SecurityConfig | api/configs/feature/__init__.py:20-76 | 认证、令牌、速率限制 |
AppExecutionConfig | api/configs/feature/__init__.py:78-101 | 执行超时、活跃请求限制 |
CodeExecutionSandboxConfig | api/configs/feature/__init__.py:103-191 | Sandbox 连接、限制 |
关键配置变量
安全:
SECRET_KEY=<openssl rand -base64 42> # 会话签名、加密 [api/configs/feature/__init__.py:25-30]()
数据库:
DB_TYPE=postgresql # [docker/.env.example:72]()
DB_USERNAME=postgres # [docker/.env.example:73]()
DB_PASSWORD=difyai123456 # [docker/.env.example:74]()
DB_HOST=db_postgres # [docker/.env.example:75]()
DB_PORT=5432 # [docker/.env.example:76]()
Redis:
REDIS_HOST=redis # [docker/.env.example:96]()
REDIS_PORT=6379 # [docker/.env.example:97]()
REDIS_PASSWORD=difyai123456 # [docker/.env.example:99]()
来源:docker/.env.example:1-110, api/configs/feature/__init__.py:1-210
---
卷管理
持久化数据卷
Docker Compose 部署使用宿主机挂载卷来实现数据持久化。
卷映射:
| 宿主机路径 | 容器路径 | 服务 | 用途 |
|---|---|---|---|
./volumes/db/data | /var/lib/postgresql/data | db_postgres | 数据库数据 docker/docker-compose.middleware.yaml:24 |
./volumes/app/storage | /app/api/storage | api, worker | 用户文件 docker/docker-compose-template.yaml:217 |
权限初始化: init_permissions 服务确保在应用启动前,挂载卷具有正确的所有权(1001:1001)docker/docker-compose-template.yaml:202-218。
来源:docker/docker-compose-template.yaml:3-220, api/Dockerfile:54-60
---
日志与可观测性
日志配置
| 变量 | 默认值 | 用途 |
|---|---|---|
LOG_LEVEL | INFO | 日志级别 docker/.env.example:43 |
LOG_OUTPUT_FORMAT | text | 文本或 JSON 格式 docker/.env.example:44 |
LOG_FILE | /app/logs/server.log | 日志持久化 docker/.env.example:45 |
OpenTelemetry 集成
Dify 支持通过多个检测包使用 OpenTelemetry 进行分布式追踪和指标收集 api/pyproject.toml:35-41。
来源:docker/.env.example:43-49, api/pyproject.toml:35-41