dify生产环境必须切换为s3/minio对象存储以避免文件丢失、多实例不共享等问题;需创建合规桶名、配置storage_type=s3、s3_endpoint、s3_region=us-east-1、s3_access_key、s3_secret_key,并重启服务验证日志。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要让 Dify 在生产环境中可靠保存用户上传的 PDF、TXT 等知识库文件,必须将默认本地存储切换为 S3 或 MinIO 这类对象存储后端,否则容器重启后文件丢失、多实例无法共享知识库、日志追溯断裂等问题会立刻暴露。
确认 MinIO 已就绪并创建好桶
打开浏览器访问 http://你的服务器IP:9001,用 MinIO 启动时设置的用户名(如 admin)和密码登录控制台。
点击左侧「Buckets」→「Create Bucket」,输入桶名(如 dify-kb),注意:桶名只能含小写字母、数字、连字符(-),不能含下划线或大写字母,否则 Dify 启动时会因 S3 兼容性校验失败而拒绝连接。
创建完成后,不要修改桶的策略——MinIO v1.9+ 默认启用 strict 模式,若手动添加自定义策略反而可能覆盖必需的 s3:GetObject 和 s3:ListBucket 权限,导致知识库预览或解析中断。
修改 Dify 的 .env 配置文件
进入 Dify 项目目录下的 docker/.env 文件(例如路径为 /opt/1panel/docker/compose/dify/dify-main/docker/.env)。
搜索 # S3 配置 或 STORAGE_TYPE,定位到存储配置段。
按顺序完成以下 5 项关键修改:
-
STORAGE_TYPE=s3(原值通常为
opendal或local) - S3_ENDPOINT=http://127.0.0.1:9000(若 MinIO 与 Dify 不在同一宿主机,请替换为真实内网 IP;必须以 http:// 开头,不可加尾部斜杠,不可用 https)
-
S3_REGION=us-east-1(MinIO 不接受
cn-north-1或空值;填错会导致签名不匹配,报signaturedoesnotmatch) - S3_ACCESS_KEY=admin(必须与 MinIO 控制台登录用户名完全一致,区分大小写,复制时警惕不可见 Unicode 空格)
-
S3_SECRET_KEY=admin123456(若密钥含
$或@,在 docker compose 中需用双引号包裹该值)
保存文件。
重启 Dify 服务使配置生效
执行 docker compose down 停止当前服务。
执行 docker compose up -d 后台启动全部容器。
等待约 20 秒后,检查日志:docker compose logs -f dify-api | grep "s3\|storage",若看到 Using S3 storage provider 且无 failed to connect 或 signaturedoesnotmatch 报错,说明配置已成功加载。










