Skip to content

feat!: replace MinIO with Garage as the S3 backend - #201

Merged
mighty-sponge merged 1 commit into
mainfrom
178-migrate-minio-to-garage
Sep 16, 2026
Merged

mighty-sponge merged 1 commit into
mainfrom
178-migrate-minio-to-garage

Conversation

@mighty-sponge

Copy link
Copy Markdown
Contributor

MinIO declared its open-source edition unmaintained and now points users to its paid product, so any-sync-filenode blob storage moves to Garage v2.3, which is maintained, single-binary and built for self-hosting.

Garage runs with --single-node --default-bucket --default-access-key, so it creates its bucket and access key on first start and the mc-based create-bucket service is gone. Its config is static (garage/garage.toml) and the RPC secret comes from the environment, which keeps garage independent of any-sync-init and therefore available while the migration guard blocks the rest of the stack.

Existing installs are protected by two barriers and a non-destructive migration:

  • an outdated .env fails docker compose immediately via required-variable syntax (GARAGE_VERSION, GARAGE_RPC_SECRET, S3_BUCKET)
  • the new s3-guard service refuses to start the stack while objects remain in storage/minio without a completed-migration marker; any-sync-init depends on it, so nothing else starts either
  • docker compose --profile migrate run --rm s3-migrate (or make migrate) copies every object with rclone, verifies checksums and only then writes the marker; MinIO data is kept as a backup and removed by an explicit make cleanLegacyMinio

The MINIO_* variables are renamed to S3_* (S3_ENDPOINT, S3_BUCKET, S3_REGION, S3_LEGACY_BUCKET), which is what makes the first barrier possible. The MinIO service is retained under the "migrate" profile only.

Migration instructions live in the wiki Upgrade Guide.

BREAKING CHANGE: the MINIO_* variables in .env are replaced by S3_/GARAGE_ and existing installations must run the MinIO -> Garage data migration before the stack will start. See the Upgrade Guide for the steps.

Closes #178


  • I understand that contributing to this repository will require me to agree with the CLA

Description

What type of PR is this? (check all applicable)

  • 🍕 Feature
  • 🐛 Bug Fix
  • 📝 Documentation Update
  • 🎨 Style
  • 🧑‍💻 Code Refactor
  • 🔥 Performance Improvements
  • ✅ Test
  • 🤖 Build
  • 🔁 CI

Related Tickets & Documents

Mobile & Desktop Screenshots/Recordings

Added tests?

  • 👍 yes
  • 🙅 no, because they aren't needed
  • 🙋 no, because I need help

Added to documentation?

  • 📜 README.md
  • 📓 tech-docs
  • 🙅 no documentation needed

[optional] Are there any post-deployment tasks we need to perform?

MinIO declared its open-source edition unmaintained and now points users to
its paid product, so any-sync-filenode blob storage moves to Garage v2.3,
which is maintained, single-binary and built for self-hosting.

Garage runs with --single-node --default-bucket --default-access-key, so it
creates its bucket and access key on first start and the mc-based
create-bucket service is gone. Its config is static (garage/garage.toml) and
the RPC secret comes from the environment, which keeps garage independent of
any-sync-init and therefore available while the migration guard blocks the
rest of the stack.

Existing installs are protected by two barriers and a non-destructive
migration:

- an outdated .env fails `docker compose` immediately via required-variable
  syntax (GARAGE_VERSION, GARAGE_RPC_SECRET, S3_BUCKET)
- the new s3-guard service refuses to start the stack while objects remain in
  storage/minio without a completed-migration marker; any-sync-init depends on
  it, so nothing else starts either
- `docker compose --profile migrate run --rm s3-migrate` (or `make migrate`)
  copies every object with rclone, verifies checksums and only then writes the
  marker; MinIO data is kept as a backup and removed by an explicit
  `make cleanLegacyMinio`

The MINIO_* variables are renamed to S3_* (S3_ENDPOINT, S3_BUCKET, S3_REGION,
S3_LEGACY_BUCKET), which is what makes the first barrier possible. The MinIO
service is retained under the "migrate" profile only.

Migration instructions live in the wiki Upgrade Guide.

BREAKING CHANGE: the MINIO_* variables in .env are replaced by S3_*/GARAGE_*
and existing installations must run the MinIO -> Garage data migration before
the stack will start. See the Upgrade Guide for the steps.

Closes #178
@mighty-sponge
mighty-sponge merged commit b5e4f64 into main Sep 16, 2026
4 checks passed
@mighty-sponge
mighty-sponge deleted the 178-migrate-minio-to-garage branch September 16, 2026 18:56
@github-actions github-actions Bot locked and limited conversation to collaborators Sep 16, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Switch to a MinIO alternative

1 participant