S3-compatible object storage: MinIO and Garage explained
MinIO and Garage give you an Amazon-S3-compatible object store you run yourself. What object storage is, why it matters, and which of the two to pick.
Object storage stores data as whole "objects" (a file plus its metadata) in flat buckets, reached over HTTP with the S3 API — rather than as files in a hierarchical filesystem on a disk. It is how backups, media libraries, and app uploads are stored at scale, because it is cheap, durable and reached by a URL.
MinIO and Garage are two open-source servers that speak the S3 API, so anything that works with Amazon S3 — backup tools, apps, SDKs — works with them, pointed at your own endpoint.
What it does
Buckets and objects you manage over the S3 API, so every S3-compatible tool (rclone, restic, aws-cli, app SDKs) just works.
HTTP access to objects for serving files, with access keys and policies controlling who can read and write.
Versioning and lifecycle in MinIO — keep old versions, expire old objects automatically.
Scaling and redundancy — MinIO scales across drives/nodes with erasure coding; Garage is built for a distributed cluster across machines.
MinIO vs Garage
MinIO — the most S3-compatible server available, a huge feature set, great performance, and the easiest choice for a single-server object store. Note: recent versions changed licence to AGPL-3.0 (community) and it has become more opinionated about its console/features, so check the current licence and edition against your needs before you commit.
Garage — lighter, designed by a French non-profit for geo-distributed clusters across many small machines. Excellent if you want to spread storage across several cheap nodes and are not chasing maximum single-box performance. Licensed AGPL-3.0.
Where to use it
Backup target — point restic, rclone, Duplicati or your database dumps at an S3 endpoint you control, and copy off-site.
Media and static assets — store images/video and serve them, optionally behind a CDN.
App uploads — many web apps can offload user uploads to S3 instead of filling the web server's disk.
Supabase-style / AI workloads — anything expecting S3 storage works.
A single MinIO server runs well on a 2–4 vCPU, 4 GB VPS with storage sized to your data; add drives or nodes as you grow. Garage shines when you run it as a cluster across several hosts.
How to get running
A VPS with adequate disk (block storage you can grow is ideal), and a domain if you want HTTPS access.
Deploy MinIO or Garage (both have Docker images); set the root/admin credentials and an encryption key.
Create a bucket and a scoped access key for each consumer — never share the root key with an app.
Point your backup tool at the S3 endpoint and test a restore, not just a backup.
Put TLS in front if it is reachable from the internet, and firewall the admin port.
Basics: Object storage basics. Specs: /app-hosting/minio.