Dify私有化部署需对接MinIO对象存储以解决高并发、版本管理与跨节点共享问题;配置MinIO容器并创建公开Bucket,修改Dify的STORAGE_TYPE为minio及5项必要参数,验证storage服务健康状态及文件URL前缀是否正确。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在Dify私有化部署中,当用户上传PDF、Word等文件构建知识库时,系统默认将原始文件和切片后的文本存入PostgreSQL或本地磁盘,但这种方式无法支撑高并发文件读写、版本管理与跨节点共享,必须对接专业对象存储服务。MinIO作为兼容S3协议的开源对象存储,是企业级Dify部署中附件管理的事实标准组件。
配置MinIO服务并创建公开Bucket
启动MinIO容器,映射管理端口9001和API端口9000,使用固定账号密码并挂载本地持久化目录:
docker run -d \
-p 9000:9000 \
-p 9001:9001 \
-e "MINIO_ROOT_USER=minioadmin" \
-e "MINIO_ROOT_PASSWORD=minioadmin" \
--restart=always \
-v /opt/minio-data:/data \
minio/minio server /data --console-address ":9001"
访问 http://localhost:9001,用 minioadmin/minioadmin 登录后台;点击“Create Bucket”,输入名称如 【dify-knowledge-files】;在Bucket设置中关闭“Object Locking”,勾选“Make bucket public”——这一步不可跳过,否则Dify前端无法直链访问上传的PDF封面图或文档缩略图。
记录下该Bucket的完整路径:http://localhost:9000/dify-knowledge-files
修改Dify环境变量启用MinIO后端
进入Dify部署目录(如 dify/docker),编辑 .env 文件,找到 STORAGE_TYPE 配置项:
STORAGE_TYPE=minio
紧接着补充以下5项关键参数,全部必须填写,缺一不可:
MINIO_ENDPOINT=localhost:9000
MINIO_BUCKET=dify-knowledge-files
MINIO_ACCESS_KEY=minioadmin
MINIO_SECRET_KEY=minioadmin
MINIO_SECURE=false
【MINIO_SECURE=false 是本地单机部署的必需设置】,若设为 true,Dify会强制走HTTPS协议,而本地MinIO未配置TLS证书时将导致所有文件上传失败且无明确报错,仅在worker日志中显示“connection refused”。
验证MinIO集成是否生效
重启Dify服务使配置生效:
docker-compose down → docker-compose up -d
等待1分钟后,执行健康检查命令:
curl -s http://localhost:5001/health | jq '.services.storage'
正常响应应为 【"ok"】;若返回 "failed",请立即检查MinIO容器是否运行(docker ps | grep minio)、.env中MINIO_ENDPOINT地址是否误写为 http://localhost:9000(应去掉http://前缀)。
登录Dify Web UI(http://localhost:3000),进入“知识库”→“新建知识库”→点击“上传文件”,选择任意PDF文件;上传成功后,打开浏览器开发者工具(F12),切换到Network标签页,筛选 xhr 请求,找到形如 /api/knowledge-bases/{id}/document 的响应,查看 response.data.file_url 字段——其值应以 http://localhost:9000/dify-knowledge-files/ 开头,而非 /files/ 或 /api/files/。

















