ragflow icon indicating copy to clipboard operation
ragflow copied to clipboard

feat: Add Single Bucket Mode for MinIO/S3

Open arogan178 opened this issue 1 month ago • 7 comments

Overview

This PR adds support for Single Bucket Mode in RAGFlow, allowing users to configure MinIO/S3 to use a single bucket with a directory structure instead of creating multiple buckets per Knowledge Base and user folder.

Problem Statement

The current implementation creates one bucket per Knowledge Base and one bucket per user folder, which can be problematic when:

  • Cloud providers charge per bucket
  • IAM policies restrict bucket creation
  • Organizations want centralized data management in a single bucket

Solution

Added a prefix_path configuration option to the MinIO connector that enables:

  • Using a single bucket with directory-based organization
  • Backward compatibility with existing multi-bucket deployments
  • Support for MinIO, AWS S3, and other S3-compatible storage backends

Changes

  • rag/utils/minio_conn.py: Enhanced MinIO connector to support single bucket mode with prefix paths
  • conf/service_conf.yaml: Added new configuration options (bucket and prefix_path)
  • docker/service_conf.yaml.template: Updated template with single bucket configuration examples
  • docker/.env.single-bucket-example: Added example environment variables for single bucket setup
  • docs/single-bucket-mode.md: Comprehensive documentation covering usage, migration, and troubleshooting

Configuration Example

minio:
  user: "access-key"
  password: "secret-key"
  host: "minio.example.com:443"
  bucket: "ragflow-bucket"      # Single bucket name
  prefix_path: "ragflow"         # Optional prefix path

Backward Compatibility

✅ Fully backward compatible - existing deployments continue to work without any changes

  • If bucket is not configured, uses default multi-bucket behavior
  • If bucket is configured without prefix_path, uses bucket root
  • If both are configured, uses bucket/prefix_path/ structure

Testing

  • Tested with MinIO (local and cloud)
  • Verified backward compatibility with existing multi-bucket mode
  • Validated IAM policy restrictions work correctly

Documentation

Included comprehensive documentation in docs/single-bucket-mode.md covering:

  • Configuration examples
  • Migration guide from multi-bucket to single-bucket mode
  • IAM policy examples
  • Troubleshooting guide

Related Issue: Addresses use cases where bucket creation is restricted or costly

arogan178 avatar Nov 20 '25 10:11 arogan178

Appreciations! Please correct the CI failure.

KevinHuSh avatar Nov 21 '25 02:11 KevinHuSh

Appreciations! Please correct the CI failure.

Fixed

arogan178 avatar Nov 25 '25 14:11 arogan178

@KevinHuSh any updates on the CI failure? As it seems it is timing out on the ES SDK tests

arogan178 avatar Nov 27 '25 10:11 arogan178

@KevinHuSh any updates on the CI failure? As it seems it is timing out on the ES SDK tests

Please remove alterations irrelevant to this PR's feature, such as in docker/service_conf.yaml.template.

KevinHuSh avatar Dec 02 '25 07:12 KevinHuSh

@KevinHuSh any updates on the CI failure? As it seems it is timing out on the ES SDK tests

Please remove alterations irrelevant to this PR's feature, such as in docker/service_conf.yaml.template.

Irrelevant alterations removed.

arogan178 avatar Dec 03 '25 14:12 arogan178

CI failure. Could you correct them?

KevinHuSh avatar Dec 05 '25 11:12 KevinHuSh

CI failure. Could you correct them?

Corrected

arogan178 avatar Dec 10 '25 19:12 arogan178