Dify

把 Dify 的上传文件、知识库文档和系统状态存进 RustFS 桶。

本指南将开源 LLM 应用平台 Dify 通过其 OpenDAL 存储后端连接到 RustFS。你将把文件存储从本地磁盘切换到 RustFS 桶,启动栈,向知识库上传文档,并在桶中确认对象。整个流程使用 Dify 1.18.0(Docker Compose)验证通过。

你需要 Docker Compose。本部署用于本地集成测试,不适用于生产环境。

架构

Dify 通过配置的存储后端持久化上传文档、知识库文件和引导密钥(.dify_secret_key、工作区密钥)。后端是桶时,这些都不再落在容器磁盘上。

为 RustFS 配置存储

在 docker/.env(从 .env.example 复制)里把 OpenDAL 切到 S3 scheme:

docker/.env
STORAGE_TYPE=opendal
OPENDAL_SCHEME=s3
OPENDAL_S3_ENDPOINT=http://<your-rustfs-endpoint>:9000
OPENDAL_S3_BUCKET=dify
OPENDAL_S3_ACCESS_KEY_ID=<your-access-key>
OPENDAL_S3_SECRET_ACCESS_KEY=<your-secret-key>
OPENDAL_S3_REGION=us-east-1
OPENDAL_S3_ENABLE_PATH_STYLE=true
OPENDAL_S3_ROOT=/

启动栈前先建桶:

aws s3 mb s3://dify --endpoint-url http://<your-rustfs-endpoint>:9000

把 RustFS 接入 Compose 网络

Compose 栈在自己的 bridge 网络里,而 Docker 会隔离不同 bridge——http://172.17.0.2:9000 这类端点在 api 容器里会连接超时。把 RustFS 容器以别名接入 Compose 网络,端点主机用别名:

docker network connect --alias rustfs <compose-network> <rustfs-container>

修改 .env 后要重建整个栈——docker compose restart 不会重读环境变量。

启动栈并初始化

cd dify/docker
docker compose up -d

等 api 健康检查通过,在 Web UI(http://localhost:80)创建管理员账号。Dify 会立刻把引导状态写进桶:

aws s3 ls s3://dify/ --recursive \
  --endpoint-url http://<your-rustfs-endpoint>:9000
2026-11-01 14:31:00         65 .dify_secret_key
2026-11-01 14:33:06       1674 privkeys/<tenant-id>/private.pem

密钥与工作区私钥现在都在 RustFS——容器里没有值得保留的状态。

上传知识库文档

在 UI 里创建知识库,然后上传文档。上传会落到桶的 upload_files/<tenant-id>/ 下:

aws s3 ls s3://dify/upload_files/ --recursive \
  --endpoint-url http://<your-rustfs-endpoint>:9000
2026-11-01 15:25:53        128 upload_files/<tenant-id>/0ae369a1-70ed-40e8-b3d9-0f12d0b7c699.txt

上传完成的瞬间对象即出现——索引流程直接针对桶内副本运行。

RustFS 控制台中的 Dify 上传文件

停止或重置

保留桶内对象并拆除栈:

docker compose down

删除 Dify 数据:

aws s3 rm s3://dify --recursive \
  --endpoint-url http://<your-rustfs-endpoint>:9000

重置时记得清 bind mount

Dify 的 Compose 文件把数据库和存储 bind-mount 在 docker/volumes/ 下。docker compose down -v 不会删除 bind mount——需要干净环境时显式删除 docker/volumes/,否则旧管理员账号和加密状态会残留。

故障排查

启动日志对桶报 tcp connect error: Connection timed out

栈到不了 RustFS 地址——Docker bridge 之间的网络隔离。按第 1 步把 RustFS 以别名接入 Compose 网络。

登录报 Invalid encrypted data

管理员密码字段由前端做 Base64 编码;直接给 console API 发明文会失败。账号与密码操作请走 Web UI,或按前端方式编码字段。

创建文档报 Default model not found for text-embedding

high-quality 索引模式需要在 Dify 里配置 embedding 模型供应商。纯存储测试用 economy 索引,或先配置模型供应商。

上传仍落在本地磁盘

api 和 worker 容器还是 .env 修改前的旧实例。用 docker compose up -d --force-recreate 重建整个栈,让每个服务都读到新存储配置。

下一步

本页目录