必须将默认本地存储替换为独立s3服务,否则容器重启后文件丢失、多实例间知识库不同步、预览失败等问题会立即出现;需确认s3服务可用、创建合规存储桶(如dify-media)、配置storage_type=s3、s3_endpoint、s3_region=us-east-1、s3_access_key、s3_secret_key,并通过日志验证“using s3 storage provider”无报错。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要让Dify稳定保存用户上传的PDF、TXT、图片等媒体文件,必须将默认本地存储替换为独立S3服务,否则容器重启后文件丢失、多实例间知识库不同步、预览失败等问题会立即出现。
确认S3服务可用并创建合规存储桶
打开浏览器访问你的S3兼容服务地址(如MinIO控制台 http://192.168.1.100:9001),用管理员账号登录。
点击左侧「Buckets」→「Create Bucket」,输入桶名(例如 【dify-media】)——注意:桶名只能含小写字母、数字、连字符(-),不能含下划线、大写字母或点号,否则Dify启动时因S3签名校验失败直接退出。
创建完成后,不要手动修改桶策略。MinIO v1.9+ 默认启用 strict 模式,自定义策略极易覆盖必需的 s3:GetObject 和 s3:ListBucket 权限,导致文档预览或解析中断。
修改Dify的.env配置启用S3存储
进入Dify项目目录,编辑 docker/.env 文件(常见路径如 /opt/dify/docker/.env)。
找到 STORAGE_TYPE 配置段,按顺序完成以下5项修改:
① STORAGE_TYPE=s3(原值通常为 local 或 opendal)
② S3_ENDPOINT=http://192.168.1.100:9000(若S3与Dify不在同一宿主机,必须填真实内网IP;必须以 http:// 开头,不可加尾部斜杠,不可用 https)
③ S3_REGION=us-east-1(MinIO仅接受此值;填错会导致 signaturedoesnotmatch 报错)
④ S3_ACCESS_KEY=admin(必须与S3控制台登录用户名完全一致,区分大小写;复制时警惕不可见 Unicode 空格)
⑤ S3_SECRET_KEY=admin123456(若密钥含 $ 或 @,在 docker compose 中需用双引号包裹该值)
验证S3配置是否生效
执行 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 报错,说明配置已成功加载。











