Alternatieven voor MinIO voor lokale S3 op een enkele node

In dit artikel bekijk ik enkele alternatieven voor MinIO. Hoewel MinIO veel meer is dan alleen een tool voor het emuleren van S3 voor demo's, ligt mijn focus hier op wat de eenvoudigste vervanging is.

In de praktijk betekent dit de volgende eisen:

  • Moet een Docker-image hebben. Veel demo's worden geleverd als Docker Compose, en niemand wil eigen Docker-images bouwen tenzij dat echt noodzakelijk is.
  • Moet S3-compatibiliteit bieden. Het hele doel van MinIO in deze demo's is om als vervanger te dienen voor het schrijven naar echte S3-opslag.
  • Moet gratis te gebruiken zijn, met een sterke voorkeur voor een Open Source-licentie (volgens de OSI-definitie), zoals Apache 2.0.
  • Moet eenvoudig te gebruiken zijn voor een single-node implementatie.
  • Moet een duidelijke en actieve community en/of commerciële ondersteuning hebben. Iedereen kan wel wat 'abandon-ware' code schrijven of een project forken in een vlaag van enthousiasme, maar MinIO heeft de tand des tijds doorstaan tot nu toe; we willen dit proces niet over zes maanden opnieuw moeten doen.
  • Bonuspunten voor een uitstekende developer experience (DX), soepele configuratie, goede documentatie, etc.

Ik kijk puur naar de ervaring met lokale S3 op een enkele node. Verschillende van de besproken tools hebben een breed scala aan functies waarvan S3-ondersteuning slechts één is. Anderen bieden alleen S3 en niets meer. Voor mijn doeleinden is beide prima, zolang extra functies de complexiteit of het gewicht van de implementatie niet verhogen.

Ik kijk dus niet naar multi-node implementaties, gedistribueerde opslag, productiekosten, GUI-mogelijkheden en dergelijke. Dit artikel is dus niet bedoeld voor mensen die MinIO gebruikten als zelfbeheerde S3 in een productieomgeving.

Alle code van dit project is te vinden in [deze repo].

MinIO baseline

Mijn startpunt is een zeer eenvoudige Docker Compose-stack: DuckDB om Iceberg-data te lezen en te schrijven die is opgeslagen op S3, in eerste instantie geleverd door MinIO.

De Docker Compose is vrij eenvoudig:

  • DuckDB, samen met de Iceberg REST Catalog.
  • MinIO (lokale S3-opslag).
  • mc, de MinIO CLI, die wordt gebruikt om automatisch een bucket voor de data aan te maken.

Wanneer ik data invoeg in DuckDB:

INSERT INTO cat.test.products VALUES
(1, 'Widget', 9.99),
(2, 'Gadget', 19.99),
(3, 'Doohickey', 14.99);

Dan komt dit in Iceberg-formaat op S3 terecht, hier in MinIO:

$ mc ls minio/warehouse/test/products/data/
[2026-01-12 14:35:55 UTC]   693B STANDARD 019bb2a2-8ad5-7159-968c-3693c3578902.parquet
[2026-01-12 14:35:55 UTC] 2.7KiB STANDARD 188ee032-8576-4f46-9834-1cac6d3080a3-m0.avro
[2026-01-12 14:35:55 UTC] 1.6KiB STANDARD snap-2633370813252912097-95ad4df0-3243-4cfb-a736-8f785aac100c.avro

In elk van de gemaakte voorbeelden kun je test.sh draaien om dit te verifiëren.

Alternatieven voor MinIO

Ik heb geprobeerd het bovenstaande project te implementeren met zo min mogelijk wijzigingen om MinIO te vervangen. Ik heb de MinIO S3-client (mc) laten staan, aangezien dit eenvoudig te vervangen is door s3cmd, de AWS CLI, etc.

S3Proxy

  • Geteste versie: 3.0.0
  • Docker image: Ja (5M+ pulls)
  • Licentie: Apache 2.0
  • S3 compatibiliteit: Ja
  • Gebruiksgemak configuratie: 👍👍

Zeer eenvoudig te implementeren en lijkt een mooie, lichtgewicht optie. Eén opmerking: een van de projecten die S3Proxy gebruikt, jclouds, is in het midden van 2025 verplaatst naar de Apache Attic (is dus gepensioneerd). Dit is waarschijnlijk geen probleem als je alleen lokale opslag gebruikt.

RustFS

  • Geteste versie: 1.0.0-alpha.79
  • Docker image: Ja (100k+ pulls)
  • Licentie: Apache 2.0
  • S3 compatibiliteit: Ja
  • Gebruiksgemak configuratie:

Let op dat er onlangs een ernstig beveiligingslek is gevonden in RustFS, wat sommige mensen heeft afgeschrikt. De website ziet er strak uit, maar verschillende links leiden naar dezelfde pagina, wat het gevoel geeft van een heel nieuw project ("fresh paint"). Dit is minder belangrijk voor demo's, mits het makkelijk te vervangen is. Daarnaast is het project momenteel nog in 'alpha' release. RustFS bevat ook een GUI.

SeaweedFS

  • Geteste versie: 4.06
  • Docker image: Ja (5M+ pulls)
  • Licentie: Apache 2.0
  • S3 compatibiliteit: Ja
  • Gebruiksgemak configuratie: 👍

De quickstart is nuttig om minimale S3-functionaliteit werkend te krijgen. In het algemeen is er niet veel aan te passen; het is een vrij eenvoudige wissel van Docker-images, hoewel de authenticatie een eigen configuratiebestand nodig heeft (dat ik, net als bij Garage, inline in de Docker Compose heb gezet). Update: Het project heeft aangegeven deze extra vereiste te verwijderen, waardoor het nog makkelijker wordt.

SeaweedFS heeft een eigen basis-UI die handig is. De website is verrassend summier en op het eerste gezicht zou je kunnen denken dat het geen OSS-project is, omdat er een "pricing"-optie is en de hoofdpagina "SeaweedFS Enterprise" heet. Het is echter een gevestigd OSS-project met S3-ondersteuning sinds release 0.91 in 2018.

Zenko CloudServer

  • Geteste versie: 9.2.8
  • Docker image: Ja (oudere versies op Docker Hub met 5M+ pulls)
  • Licentie: Apache 2.0
  • S3 compatibiliteit: Ja
  • Gebruiksgemak configuratie: 👍

Voorheen bekend als S3 Server; CloudServer is onderdeel van een toolset genaamd Zenko, gepubliceerd door Scality. Het vervangt MinIO vrij eenvoudig, maar ik vond het in het begin lastig om de verschillende namen (cloudserver/zenko/scality) te ontwarren. Ook voelt het vreemd dat de documentatie linkt naar een verouderde Docker-image.

Garage

  • Geteste versie: 1.0.0
  • Docker image: Ja (1M+ pulls)
  • Licentie: AGPL
  • S3 compatibiliteit: Ja
  • Gebruiksgemak configuratie: 😵

Voor deze implementatie had ik hulp nodig. Naast de Garage-container was er een andere container nodig voor de initiële configuratie, evenals een TOML-configuratiebestand.

Garage werkt, maar het is geen eenvoudige 'drop-in' vervanging. Het vereist andere infrastructuur voor initialisatie en dat is niet simpel. Een voorbeeld: de opgegeven key-ID moet een specifieke Garage key-ID zijn (begint met GK, gevolgd door 12 hex-encoded bytes). Dit is uitstekend voor productiehygiëne, maar overkill en zelfs hinderlijk voor lokale demo's. Garage is een geweldige technologie, maar niet de eenvoudige vervanger die ik zocht.

Apache Ozone

  • Geteste versie: 2.1.0
  • Docker images: Ja (1M+ pulls)
  • Licentie: Apache 2.0
  • S3 compatibiliteit: Ja
  • Gebruiksgemak configuratie: 😵

Ozone is in 2020 voortgekomen uit Apache Hadoop. Hoewel het werkt als vervanging voor MinIO, is het geen lichtgewicht alternatief. Ik kon niet uitzoeken hoe ik het met minder dan vier nodes kon implementeren. Het geeft een zware "Hadoop-vibe" en is ongeschikt voor dit specifieke gebruiksscenario.

Ceph Object Gateway

Na het bekijken van de installatie-instructies heb ik deze direct overgeslagen. Net als Ozone is dit waarschijnlijk geweldig in wat het doet, maar het is geen lichtgewicht container om in een Docker Compose-stack voor lokale demo's te plaatsen.

Vergelijking

NaamGebruiksgemak configLicentieCommercieel/GovernanceDocker pulls¹GH StarsEerste commitBelangrijke committers
S3Proxy👍👍Apache 2.0Enkele contributor5M+2.1k20141
RustFS👍👍Apache 2.0Weinig details over bedrijf100k+19.7k2024~4
SeaweedFS👍Apache 2.0Enkele contributor / Enterprise optie5M+29.5k20121
Zenko CloudServer👍Apache 2.0Scality (commercieel bedrijf)5M+ (oud)1.9k2015~10
Garage😬AGPLNGI/NLnet grants1M+2.5k2020~4
Apache OzonelolApache 2.0Apache Software Foundation1M+1.1k201830+

¹ Docker pulls is een nuttig signaal, maar niet absoluut, aangezien CI/CD-pipelines dit cijfer kunnen vertekenen.

Samenvatting

Welke opties ga ik daadwerkelijk gebruiken voor mijn demo?

  • SeaweedFS: Ja.
  • S3Proxy: Ja.
  • RustFS: Misschien, maar het is een zeer nieuw project in alpha.
  • CloudServer: Ja, misschien. Ik twijfelde omdat het onderdeel is van een suite.
  • Garage: Nee, configuratie is te complex.
  • Apache Ozone: Absoluut niet.

Deze beoordeling is specifiek gericht op mijn use-case (eenvoudige, makkelijk te configureren single-node lokale S3).

Enkele laatste overwegingen bij het kiezen van een vervanger voor MinIO:

  1. Governance: Hoewel alle projecten OSS zijn, is alleen Ozone eigendom van een stichting (ASF). De anderen zouden theoretisch hun licentie op elk moment kunnen wijzigen, zoals MinIO deed.
  2. Community health: Wat is de "bus factor"? Sommige projecten hebben een lange historie maar slechts één hoofdauteur. Als zij het project verlaten, is de vraag of de community het project zal forken en actief zal blijven ontwikkelen.

Addendum

  • 30-01-2026: Justin Cormack heeft geschreven over implementatiedetails en functionaliteit van RustFS en Garage.
  • 02-03-2026: Ruohang Feng heeft MinIO geforkt naar pgsty/minio en belooft een stabiele, CVE-gepatchte distributie te onderhouden.