本页面提供了使用 Docker 和 Docker Compose 部署 Dify 的详尽文档。Docker 提供了一个隔离且一致的运行 Dify 及其依赖项的环境,是生产环境推荐的部署方式。
Dify 可以通过 Docker Compose 部署为一套 Docker 容器,Docker Compose 会编排多容器应用程序。这种部署方式具有以下优势:
在通过 Docker 部署 Dify 之前,请确保您已安装以下先决条件:
来源:api/README.md1-74 docker/README.md1-16
Dify 的 Docker 部署由多个相互连接的服务组成,每个服务都在自己的容器中运行。
来源:docker/docker-compose.yaml473-695 docker/docker-compose-template.yaml1-80
以下是通过几个简单步骤使用 Docker 启动 Dify 的方法:
克隆仓库
创建并配置环境变量
启动 Dify 服务
访问 Dify 网页界面:在浏览器中打开 http://:80 (或您配置的主机/端口)
来源:docker/README.md20-35 api/README.md11-30
Dify 由以下 Docker 服务组成:
| 服务 | 描述 | 基础镜像 | 端口 |
|---|---|---|---|
api | 后端 API 服务 | langgenius/dify-api:1.2.0 | 5001 |
worker | Celery worker,用于处理任务 | langgenius/dify-api:1.2.0 | - |
web | 前端 Web 应用程序 | langgenius/dify-web:1.2.0 | 3000 |
db | PostgreSQL 数据库 | postgres:15-alpine | 5432 |
redis | Redis 缓存 | redis:6-alpine | 6379 |
sandbox | 代码执行环境 | langgenius/dify-sandbox:0.2.11 | 8194 |
plugin_daemon | 插件系统 | langgenius/dify-plugin-daemon:0.0.7-local | 5002/5003 |
ssrf_proxy | 安全代理 | ubuntu/squid:latest | 3128 |
nginx | 反向代理 | nginx:latest | 80/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 | 初始管理员密码 | |
| URL | CONSOLE_API_URL | 后端 API URL |
| CONSOLE_WEB_URL | 前端 Web URL | |
| 数据库 | DB_USERNAME, DB_PASSWORD | 数据库凭据 |
| DB_HOST, DB_PORT | 数据库连接详细信息 | |
| Redis | REDIS_HOST, REDIS_PASSWORD | Redis 连接详情 |
| 向量存储 | VECTOR_STORE | 要使用的向量数据库类型 |
| 存储 | STORAGE_TYPE | 要使用的文件存储类型 |
完整的配置选项列表可在 .env.example 文件中找到。
来源:docker/.env.example1-100 docker/.env.example100-200 docker/.env.example200-300
Dify 支持多种向量数据库用于存储嵌入。您可以通过设置 VECTOR_STORE 环境变量来选择要使用的数据库。
支持的向量数据库包括:
| 数据库 | 设置值 | 包含在 Docker Compose 中 |
|---|---|---|
| Weaviate | weaviate | 是 |
| Qdrant | qdrant | 是 |
| Milvus | milvus | 是 |
| PGVector | pgvector | 是 |
| PGVecto-RS | pgvecto-rs | 是 |
| Chroma | chroma | 是 |
| ElasticSearch | elasticsearch | 是 |
| OpenSearch | opensearch | 是 |
| TiDB Vector | tidb_vector | 是 |
| 还有许多其他语言 | 查看文档 | 可变 |
每个向量数据库在 .env 文件中都有其特定的配置参数。
来源:docker/.env.example390-450 api/core/rag/datasource/vdb/vector_type.py1-29
Dify 需要存储各种文件,包括上传的文档和模型文件。可以通过 STORAGE_TYPE 环境变量配置存储,
支持的存储选项包括:
| 存储类型 | 设置值 | 描述 |
|---|---|---|
| OpenDAL | opendal | 默认存储抽象层 |
| 本地 | 本地 | 本地文件系统存储(已弃用) |
| S3 | s3 | Amazon S3 或兼容服务 |
| Azure Blob | azure-blob | Microsoft Azure Blob 存储 |
| Google Storage | google-storage | Google Cloud Storage |
| Aliyun OSS | aliyun-oss | 阿里云 OSS |
| 以及其他 | 查看文档 | 各种云存储提供商 |
每种存储类型在 .env 文件中都有其特定的配置参数。
来源:docker/.env.example297-386 api/extensions/ext_storage.py22-72
Dify 支持通过 Nginx 进行 SSL/TLS 的 HTTPS 连接。您可以通过设置来启用 HTTPS:
您可以提供自己的 SSL 证书,或使用 Certbot 进行自动 SSL 证书管理。
Dify 包含一个 Certbot 容器,用于自动颁发和续订 SSL 证书。
在 .env 中配置 Certbot 设置。
CERTBOT_EMAIL=your_email@example.com
CERTBOT_DOMAIN=your_domain.com
启动 Certbot 服务
执行证书颁发
来源:docker/docker-compose.yaml679-697 docker/docker-compose.yaml392-400
Dify 包含一个 SSRF(服务器端请求伪造)代理,以增强出站请求的安全性。
SSRF 代理已自动配置,无需额外设置。
来源: docker/docker-compose.yaml661-677 docker/docker-compose.middleware.yaml121-147
Dify 使用 Docker 卷来持久化数据。创建了以下卷:
| 卷路径 | 目的 |
|---|---|
./volumes/db/data | PostgreSQL 数据库文件 |
./volumes/redis/data | Redis 数据 |
./volumes/app/storage | 应用程序存储(上传的文件等) |
./volumes/plugin_daemon | 插件存储 |
./volumes/sandbox | 沙盒文件和依赖项 |
./volumes/weaviate | Weaviate 向量数据库(如果使用) |
./volumes/certbot | SSL 证书及相关文件 |
您可能需要定期备份这些卷以防止数据丢失。
来源: docker/docker-compose.yaml496-497 docker/docker-compose.yaml523-524 docker/docker-compose.yaml567-568 docker/docker-compose.yaml576-579
可以使用以下环境变量调整 PostgreSQL 的性能
可以调整 API 服务器工作进程的数量以获得更好的性能
Celery 工作进程可以配置用于并行任务处理
来源: docker/.env.example203-231 docker/.env.example126-171
要将 Dify 升级到新版本
拉取最新的 docker-compose 配置
更新镜像
重启服务
这将保留您的数据,同时将应用程序更新到最新版本。
数据库连接问题
docker compose ps.env 文件中的数据库凭据docker compose logs db向量数据库问题
docker compose logs weaviate(或其他向量数据库)Web 访问问题
docker compose ps nginxdocker compose logs nginx资源限制
docker stats有关更详细的故障排除,请检查特定服务的日志
如果您希望使用外部 PostgreSQL 或 Redis 实例而不是容器化版本
在 .env 文件中配置外部数据库详细信息
DB_HOST=your-external-db-host
DB_PORT=5432
DB_USERNAME=your-username
DB_PASSWORD=your-password
启动 Dify 时不包含数据库容器
要将 Dify 与自定义域名一起使用
在 .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
使用您的域名配置 Nginx
NGINX_SERVER_NAME=yourdomain.com
如前所述设置 SSL 证书
来源: docker/.env.example8-42 docker/.env.example387-402
对于负载较高的生产部署
增加工作进程数量
SERVER_WORKER_AMOUNT=8 # Adjust based on CPU cores
CELERY_WORKER_AMOUNT=4 # Or use auto-scaling
调整 PostgreSQL 以获得更好的性能
POSTGRES_SHARED_BUFFERS=1GB # 25% of RAM
POSTGRES_WORK_MEM=16MB # Increase for complex queries
考虑使用托管的向量数据库服务,而不是容器化版本
设置适当的监控和日志记录解决方案
来源: docker/.env.example126-144 docker/.env.example203-231
Docker 部署提供了一种灵活、可复现的方式,可在各种环境中运行 Dify。通过遵循本指南,您应该能够成功部署 Dify 并根据您的具体需求进行自定义。
有关特定组件的更多详细信息,请参阅: