菜单

Docker 部署

相关源文件

本页面提供了使用 Docker 和 Docker Compose 部署 Dify 的详尽文档。Docker 提供了一个隔离且一致的运行 Dify 及其依赖项的环境,是生产环境推荐的部署方式。

概述

Dify 可以通过 Docker Compose 部署为一套 Docker 容器,Docker Compose 会编排多容器应用程序。这种部署方式具有以下优势:

  • 简化安装,依赖少
  • 跨不同操作系统环境一致
  • 易于扩展和更新
  • 服务隔离,提高安全性和资源管理

先决条件

在通过 Docker 部署 Dify 之前,请确保您已安装以下先决条件:

  • Docker Engine(20.10.0 或更高版本)
  • Docker Compose(2.0.0 或更高版本)
  • 最低系统要求
    • 4GB RAM(推荐 8GB)
    • 2 个 CPU 核心(推荐 4 个核心)
    • 20GB 可用磁盘空间

来源:api/README.md1-74 docker/README.md1-16

部署架构

Dify 的 Docker 部署由多个相互连接的服务组成,每个服务都在自己的容器中运行。

来源:docker/docker-compose.yaml473-695 docker/docker-compose-template.yaml1-80

快速入门指南

以下是通过几个简单步骤使用 Docker 启动 Dify 的方法:

  1. 克隆仓库

  2. 创建并配置环境变量

  3. 启动 Dify 服务

  4. 访问 Dify 网页界面:在浏览器中打开 http://:80 (或您配置的主机/端口)

来源:docker/README.md20-35 api/README.md11-30

容器服务概览

Dify 由以下 Docker 服务组成:

服务描述基础镜像端口
api后端 API 服务langgenius/dify-api:1.2.05001
workerCelery worker,用于处理任务langgenius/dify-api:1.2.0-
web前端 Web 应用程序langgenius/dify-web:1.2.03000
dbPostgreSQL 数据库postgres:15-alpine5432
redisRedis 缓存redis:6-alpine6379
sandbox代码执行环境langgenius/dify-sandbox:0.2.118194
plugin_daemon插件系统langgenius/dify-plugin-daemon:0.0.7-local5002/5003
ssrf_proxy安全代理ubuntu/squid:latest3128
nginx反向代理nginx:latest80/443

来源:docker/docker-compose.yaml473-591 docker/docker-compose.middleware.yaml1-181

详细部署选项

基本部署(一体化)

部署所有 Dify 服务

此命令将启动 docker-compose.yaml 文件中定义的所有服务,包括 API、Web 前端、Worker、数据库、Redis 以及默认的向量数据库(Weaviate)。

仅部署中间件

如果您只想运行基础设施服务(数据库、Redis 等),并将应用程序服务分开处理

这对于开发场景很有用,或者当您想在不同的主机上运行应用程序服务时。

来源:docker/docker-compose.middleware.yaml1-182 api/README.md14-19

环境配置

Dify 的行为可以通过 .env 文件中的环境变量进行广泛的自定义。以下是关键的配置类别:

必需的环境变量

类别关键变量描述
安全SECRET_KEY用于安全的 Cookie 签名和加密
INIT_PASSWORD初始管理员密码
URLCONSOLE_API_URL后端 API URL
CONSOLE_WEB_URL前端 Web URL
数据库DB_USERNAME, DB_PASSWORD数据库凭据
DB_HOST, DB_PORT数据库连接详细信息
RedisREDIS_HOST, REDIS_PASSWORDRedis 连接详情
向量存储VECTOR_STORE要使用的向量数据库类型
存储STORAGE_TYPE要使用的文件存储类型

完整的配置选项列表可在 .env.example 文件中找到。

来源:docker/.env.example1-100 docker/.env.example100-200 docker/.env.example200-300

向量数据库选择

Dify 支持多种向量数据库用于存储嵌入。您可以通过设置 VECTOR_STORE 环境变量来选择要使用的数据库。

支持的向量数据库包括:

数据库设置值包含在 Docker Compose 中
Weaviateweaviate
Qdrantqdrant
Milvusmilvus
PGVectorpgvector
PGVecto-RSpgvecto-rs
Chromachroma
ElasticSearchelasticsearch
OpenSearchopensearch
TiDB Vectortidb_vector
还有许多其他语言查看文档可变

每个向量数据库在 .env 文件中都有其特定的配置参数。

来源:docker/.env.example390-450 api/core/rag/datasource/vdb/vector_type.py1-29

存储配置

Dify 需要存储各种文件,包括上传的文档和模型文件。可以通过 STORAGE_TYPE 环境变量配置存储,

支持的存储选项包括:

存储类型设置值描述
OpenDALopendal默认存储抽象层
本地本地本地文件系统存储(已弃用)
S3s3Amazon S3 或兼容服务
Azure Blobazure-blobMicrosoft Azure Blob 存储
Google Storagegoogle-storageGoogle Cloud Storage
Aliyun OSSaliyun-oss阿里云 OSS
以及其他查看文档各种云存储提供商

每种存储类型在 .env 文件中都有其特定的配置参数。

来源:docker/.env.example297-386 api/extensions/ext_storage.py22-72

网络与安全配置

SSL/TLS 配置

Dify 支持通过 Nginx 进行 SSL/TLS 的 HTTPS 连接。您可以通过设置来启用 HTTPS:

您可以提供自己的 SSL 证书,或使用 Certbot 进行自动 SSL 证书管理。

使用 Certbot 获取 SSL 证书

Dify 包含一个 Certbot 容器,用于自动颁发和续订 SSL 证书。

  1. .env 中配置 Certbot 设置。

    CERTBOT_EMAIL=your_email@example.com
    CERTBOT_DOMAIN=your_domain.com
    
  2. 启动 Certbot 服务

  3. 执行证书颁发

来源:docker/docker-compose.yaml679-697 docker/docker-compose.yaml392-400

SSRF 代理

Dify 包含一个 SSRF(服务器端请求伪造)代理,以增强出站请求的安全性。

SSRF 代理已自动配置,无需额外设置。

来源: docker/docker-compose.yaml661-677 docker/docker-compose.middleware.yaml121-147

卷管理

Dify 使用 Docker 卷来持久化数据。创建了以下卷:

卷路径目的
./volumes/db/dataPostgreSQL 数据库文件
./volumes/redis/dataRedis 数据
./volumes/app/storage应用程序存储(上传的文件等)
./volumes/plugin_daemon插件存储
./volumes/sandbox沙盒文件和依赖项
./volumes/weaviateWeaviate 向量数据库(如果使用)
./volumes/certbotSSL 证书及相关文件

您可能需要定期备份这些卷以防止数据丢失。

来源: docker/docker-compose.yaml496-497 docker/docker-compose.yaml523-524 docker/docker-compose.yaml567-568 docker/docker-compose.yaml576-579

性能调优

数据库性能

可以使用以下环境变量调整 PostgreSQL 的性能

API 服务器工作进程

可以调整 API 服务器工作进程的数量以获得更好的性能

Celery 工作进程

Celery 工作进程可以配置用于并行任务处理

来源: docker/.env.example203-231 docker/.env.example126-171

升级 Dify

要将 Dify 升级到新版本

  1. 拉取最新的 docker-compose 配置

  2. 更新镜像

  3. 重启服务

这将保留您的数据,同时将应用程序更新到最新版本。

来源: docker/README.md70-80

故障排除

常见问题

  1. 数据库连接问题

    • 检查 PostgreSQL 容器是否正在运行: docker compose ps
    • 验证 .env 文件中的数据库凭据
    • 检查数据库日志: docker compose logs db
  2. 向量数据库问题

    • 确保所选的向量数据库已正确配置
    • 检查向量数据库容器是否正在运行
    • 查看向量数据库日志: docker compose logs weaviate(或其他向量数据库)
  3. Web 访问问题

    • 验证 Nginx 是否正在运行: docker compose ps nginx
    • 检查 Nginx 日志: docker compose logs nginx
    • 确保端口 80/443 可访问且未被防火墙阻止
  4. 资源限制

    • 监控 Docker 资源使用情况: docker stats
    • 如有必要,在 Docker 设置中增加资源限制

有关更详细的故障排除,请检查特定服务的日志

来源: docker/README.md85-100

高级主题

使用外部数据库

如果您希望使用外部 PostgreSQL 或 Redis 实例而不是容器化版本

  1. .env 文件中配置外部数据库详细信息

    DB_HOST=your-external-db-host
    DB_PORT=5432
    DB_USERNAME=your-username
    DB_PASSWORD=your-password
    
  2. 启动 Dify 时不包含数据库容器

自定义域名设置

要将 Dify 与自定义域名一起使用

  1. .env 文件中更新您的域名

    CONSOLE_API_URL=https://api.yourdomain.com
    CONSOLE_WEB_URL=https://yourdomain.com
    SERVICE_API_URL=https://api.yourdomain.com
    APP_WEB_URL=https://app.yourdomain.com
    
  2. 使用您的域名配置 Nginx

    NGINX_SERVER_NAME=yourdomain.com
    
  3. 如前所述设置 SSL 证书

来源: docker/.env.example8-42 docker/.env.example387-402

生产环境扩展

对于负载较高的生产部署

  1. 增加工作进程数量

    SERVER_WORKER_AMOUNT=8  # Adjust based on CPU cores
    CELERY_WORKER_AMOUNT=4  # Or use auto-scaling
    
  2. 调整 PostgreSQL 以获得更好的性能

    POSTGRES_SHARED_BUFFERS=1GB  # 25% of RAM
    POSTGRES_WORK_MEM=16MB       # Increase for complex queries
    
  3. 考虑使用托管的向量数据库服务,而不是容器化版本

  4. 设置适当的监控和日志记录解决方案

来源: docker/.env.example126-144 docker/.env.example203-231

结论

Docker 部署提供了一种灵活、可复现的方式,可在各种环境中运行 Dify。通过遵循本指南,您应该能够成功部署 Dify 并根据您的具体需求进行自定义。

有关特定组件的更多详细信息,请参阅: