RustFS plugin to replace Tutor Minio & Thoughts on Azure Gateway

Hello Open edX Community,

As you know, MinIO has been archived on GitHub. This means tutor-minio needs a long-term direction, and we’d like to agree on one with the community before committing to it.

What tutor-minio currently does

MinIO has been serving two different purposes:

  • Self-hosted S3: running an S3-compatible server on your own hardware.

  • Cloud gateway: using MINIO_GATEWAY to translate S3 requests to Azure, GCS, or other backends.

Our proposal is to split these responsibilities.

Proposed direction

Self-hosted storage → RustFS

Our current proposal is to move the self-hosted S3 functionality to RustFS.

RustFS is an S3-compatible object storage system written in Rust and has now reached its first stable 1.0.0 release. See the RustFS documentation and 1.0.0 release announcement for the full details.

We’ve tested it with a local Tutor installation. The basic Open edX storage workflow works, including bucket creation, policies, presigned URLs, multipart uploads, and persistence across restarts.

One important point: RustFS is API-compatible with MinIO, not storage-compatible. Existing MinIO data directories cannot simply be pointed at RustFS. Migration requires exporting and re-importing the objects. We are also looking at making this process easier through migration tooling.

For deployment and storage requirements, we’d prefer to keep the post short and refer to the RustFS deployment documentation rather than duplicate its guidance here.

External cloud storage → tutor-contrib-s3

For AWS, GCS, Ceph, and other S3-compatible providers, our proposal is to use tutor-contrib-s3, which configures Open edX to communicate directly with the provider rather than going through MinIO.

The plugin already supports configurable endpoints, regions, addressing styles, and signature versions. Its documentation also covers the provider-specific configuration and AWS setup.

The main question is which providers are actually verified to work.

The documentation currently covers AWS and Ceph, but not providers such as Hetzner, Wasabi, Backblaze, or OVH. If you’re using one of these with Open edX, please let us know which provider and configuration you use so we can build a verified compatibility list rather than assuming compatibility.

What about Azure?

This is the area where we most need community input.

Azure Blob Storage does not provide an S3 API. MinIO’s gateway was previously used for this translation, but gateway mode was deprecated and later removed. tutor-minio has continued supporting it by pinning to an old MinIO image.

We don’t think continuing to depend on years-old gateway code is a good long-term solution, but we also don’t want to remove Azure support without understanding who depends on it.

If you currently use MINIO_GATEWAY, we’d particularly like to know:

  • Which backend are you using?

  • Is Azure a hard requirement, or could you move to an S3-compatible provider?

  • Has anyone successfully run an S3-to-Azure translation layer in production?

  • Would anyone be interested in maintaining such a solution?

S3Proxy is one possible candidate, but we have not yet validated it against Open edX’s requirements, particularly around object-level public access and Azure’s different permission model.

Testing and next steps

We plan to test RustFS with a real Open edX installation, including:

  • Throughput and sustained-load testing

  • Recovery behaviour

  • Realistic data volumes

  • MinIO → RustFS migration

  • Kubernetes deployments

The current work exists as a proof of concept within tutor-minio. The intention is to eventually move it into a standalone plugin rather than continue maintaining a plugin named after software it no longer uses.

How you can help

We’d particularly like feedback and testing from people running Open edX in different environments.

If you can help, we’re interested in:

  • Testing RustFS with real Open edX workloads

  • Kubernetes and multi-node deployments

  • Migration testing with realistic data sizes

  • Experience with non-AWS S3 providers

  • Azure / S3 translation solutions

  • Documentation and migration tooling

We’d like your feedback before we commit

At this point, RustFS is our preferred direction for replacing MinIO’s self-hosted storage role. We believe it is the most practical fit for what tutor-minio currently provides, and our initial testing has been encouraging.

However, we don’t want to make that decision in isolation.

If you think RustFS is not the right choice, please suggest an alternative and explain why you think it would be a better long-term fit for Open edX/Tutor.

The goal is to make the right long-term choice for the community, so we’d much rather have that discussion now than after the new direction is already established.

We will be working to making this available in the upcoming tutor-willow release.

Following up on our previous discussions about replacing MinIO, tutor-rustfs is officially ready!

Repo: GitHub - edly-io/tutor-rustfs: A Tutor plugin for object storage in RustFS — successor to tutor-minio · GitHub

RustFS 1.0.0 is now stable, and the plugin is ready for testing.

The TL;DR:

  • What it does: Runs a self-hosted, S3-compatible object store (RustFS) alongside Open edX. It directly replaces tutor-minio for local setups.

  • What it doesn’t do: No gateway mode. If you use external providers (AWS, GCS, Ceph), just use tutor-contrib-s3 directly.

  • The Azure gap: Azure Blob Storage remains unsupported. If this impacts your deployment, please let us know in this thread so we can gauge demand.

Migrating from tutor-minio: In-place migration isn’t possible because RustFS can’t read MinIO’s disk format. The upgrade path is:

  1. mc mirror your buckets out while MinIO is still running.

  2. Disable tutor-minio, enable tutor-rustfs, and rename your MINIO_* settings to RUSTFS_* (defaults and bucket names match).

  3. mc mirror your data back in. (Full step-by-step commands are in the README).

Heads up before you deploy:

  • Test it first: RustFS is genuinely new. Please evaluate it against your specific workloads before trusting it with production course data.

  • Permissions: It runs as a non-root user (UID 10001). On a fresh Linux host, you must chown the bind-mount target before running tutor local start for the first time.

  • Release Target: We’re aiming to include this in the tutor-willow release.

Feedback and testing are highly welcome before the Willow release!