Self-hosted S3 storage means running the Amazon S3 API on disks you rent or own, so that backup tools and applications that already speak S3 write to your hardware instead of a cloud bucket. One of the best-known options stopped being maintained this year, and the redundancy model decides how much raw capacity you can use. This guide compares Garage, SeaweedFS, Ceph RGW and MinIO as of November 2026, works through erasure-coding overhead on a 96 TB server, and prices the result against cloud storage.
What self-hosted S3 storage gives you
An S3 endpoint is not a filesystem. It stores objects under keys in buckets and speaks HTTP: PUT, GET, list, multipart upload, presigned URLs. restic, rclone and many applications have an S3 backend built in, so pointing them at your own endpoint is a change of URL and credentials. In return you take on the provider's job: keeping copies, replacing drives and patching software.
The four options in November 2026
|
Garage |
SeaweedFS |
Ceph RGW |
MinIO (community) |
| Licence |
AGPLv3 |
Apache 2.0 |
LGPL 2.1 or 3 |
AGPLv3 |
| Latest release |
v2.5.0, 24 Oct 2026 |
4.53, 8 Nov 2026 |
21.2.0, 28 Oct 2026 |
15 Oct 2025, archived |
| Redundancy |
Full copies |
Copies, then Reed-Solomon 10+4 |
Replicated or erasure-coded pools |
Erasure coding across drives |
| Notable gaps |
No versioning, no Object Lock |
No replication or website config |
Operational complexity |
No further development |
Garage, from the Deuxfleurs collective, targets small, geographically spread clusters. It keeps whole copies on different nodes, and its docs recommend at least three nodes, metadata on SSD and data on HDD, with several drives per server handled natively, without RAID. Its S3 compatibility page is frank: no versioning, no Object Lock, and lifecycle rules limited to expiry and aborting incomplete uploads.
SeaweedFS stores objects in large volume files behind an S3 gateway. Its wiki lists versioning, Object Lock and server-side encryption as supported. Erasure coding is applied after the fact, to volumes that have filled up and gone quiet.
Ceph RGW is the S3 and Swift gateway on top of Ceph's RADOS object store. It does the most and asks the most: monitors, one OSD daemon per disk, placement groups and CRUSH rules, all before the first bucket exists.
What happened to MinIO
MinIO's community edition was the default answer for years. From its own GitHub repository:
- 24 May 2025 — release notes deprecate the embedded web console and move LDAP and OIDC logins to the commercial AIStor product.
- 15 October 2025 — the README says the community edition "is now distributed as source code only". The last release, that day, fixed a privilege-escalation flaw; container users must build their own image.
- 3 December 2025 — maintenance mode: no new features, security fixes case by case.
- 12 February 2026 — the README reads "no longer maintained" and points to AIStor Free and Enterprise. GitHub has shown the repository as archived since April 2026.
The code is still AGPLv3 and existing clusters keep running, but nobody is fixing them. Do not start a new deployment on it, and plan a migration off an existing one.
Erasure coding vs RAID, on one 96 TB server
Erasure coding splits each object into k data pieces and m parity pieces and survives the loss of any m. Ceph's documentation gives the overhead as (k + m) ÷ k. RAID 6 is the same idea at block level, with m = 2. Our storage server has eight 12 TB drives, 96 TB raw:
| Layout |
Overhead |
Usable of 96 TB |
Survives |
| RAID 6, 6 + 2 |
8 ÷ 6 = 1.33 |
72 TB |
any 2 drives |
| SeaweedFS, 10 + 4 |
14 ÷ 10 = 1.4 |
68.6 TB |
any 4 of 14 shards |
| Ceph, k = 4, m = 2 |
6 ÷ 4 = 1.5 |
64 TB |
any 2 failure domains |
| MinIO default on 8 drives, 4 + 4 |
8 ÷ 4 = 2.0 |
48 TB |
any 4 drives |
| Three full copies |
3.0 |
32 TB |
2 copies lost |
Each usable figure is 96 ÷ overhead. What the table hides:
One box is one failure domain. Parity across one server's drives protects against drives, not the motherboard or the server going offline. SeaweedFS's erasure-coding page says so: below four servers, it covers drive failures only.
Spreading needs hosts. Ceph needs at least k + m failure domains, so a 4 + 2 pool spread by host needs six hosts. On three hosts, three copies is the honest option.
Small objects cost more. Ceph warns that erasure-coded pools of very small objects can use far more space than the formula suggests.
If drive-level parity on one server is all you need, RAID 6 or RAIDZ2 under a simple gateway is still a sound design; choosing a RAID level for a storage server covers rebuild times at this drive size.
Single node or several
One server. SeaweedFS fits best: weed server -s3 starts every component, S3 gateway included, in one process. New writes sit in ordinary volumes, protected only by the replication you configure, until a volume fills and is erasure-coded, so keep RAID under it or accept that window. Garage's docs call replication_factor = 1 fit for test deployments only.
Three servers. Garage's design point. With replication_factor = 3 and the default consistent mode, reads and writes each need two of three nodes, so one can be down unnoticed. In different cities, a site outage is survivable too. Three storage servers give 288 TB raw, 96 TB usable.
Six servers and up. Ceph repays its complexity: erasure-coded pools across hosts, rebalancing as capacity grows. It wants whole disks and a fast network between hosts, which is why it lives on bare metal servers.
What it costs against cloud storage
A worked example: 50 TB stored and 20 TB read back each month, in AWS's 1,024 GB terabytes. AWS figures are Frankfurt list rates from its price list API (November 2026), before requests and the 100 GB free allowance.
AWS S3 Standard, Frankfurt
storage 51,200 GB × $0.0245 = $1,254.40
egress 10,240 GB × $0.090 = $921.60
10,240 GB × $0.085 = $870.40
total ≈ $3,046 a month
Cloudflare R2, Standard
storage 51,200 GB × $0.015 = $768.00
egress = $0
One storage server, 96 TB raw, 2 Gbps = €549 a month
Three servers, three copies, 96 TB = €1,647 a month
Against S3, self-hosting wins and the gap is mostly egress; cloud egress fees breaks that charge down. Against R2 it is closer: for 50 TB rarely read, R2 undercuts a three-node cluster. Fill the hardware and it shifts: one server at 10 + 4 holds 68.6 TB, which in R2 is 68,600 GB × $0.015 ≈ $1,029 a month against €549. Three replicated servers hold 96 TB, $1,440 in R2, still a little under €1,647. Self-hosting pulls ahead when reads are heavy or the machines also run the workload; a 2 Gbps unmetered port moves up to 648 TB a month (2 × 324 TB).
Self-hosted S3 storage as a backup target
The commonest use is a backup destination; restic, for one, writes to any S3-compatible endpoint. Check Object Lock before choosing software: it makes a bucket refuse deletes and overwrites until a retention date, so a stolen backup credential cannot erase history. Ceph RGW and SeaweedFS implement it; Garage does not, so there the protection has to come from a second copy the backup client cannot reach.
A backup in the same building as production survives a disk failure, not a fire; an off-site backup server covers the second-copy design.
Our storage servers suit this: eight 12 TB drives plus a 240 GB SSD that can hold Garage's metadata, from €549 a month at 2 Gbps, in Bucharest or Frankfurt, with full root and IPMI. One in each city gives two sites; the storage and seedbox page covers archive and dataset hosting on the same hardware.
Frequently asked questions
Is MinIO still open source?
The code remains under AGPLv3, but MinIO no longer develops the community edition. It stopped publishing binaries and container images in October 2025, entered maintenance mode in December 2025, and its GitHub README has said "no longer maintained" since February 2026. MinIO now directs users to its AIStor Free and Enterprise products.
What is the best self-hosted S3 storage for a single server?
SeaweedFS suits one server best: it runs as a single process, includes an S3 gateway, and erasure-codes sealed volumes at 1.4× overhead. On one machine that protects against drive failures, not server failure. Garage is a better fit from three nodes upward, because it is built to keep whole copies on separate machines.
How much usable space does erasure coding leave?
Divide raw capacity by (k + m) ÷ k. On 96 TB raw, SeaweedFS's 10 + 4 scheme leaves 68.6 TB, Ceph with k = 4 and m = 2 leaves 64 TB, and RAID 6 across eight drives leaves 72 TB. Three full copies leave 32 TB. Erasure coding across hosts needs at least k + m hosts.
Is self-hosted S3 storage cheaper than Amazon S3?
Usually, once egress is counted. Storing 50 TB in S3 Frankfurt costs about $1,254 a month before any downloads, and reading 20 TB back adds about $1,792. One 96 TB storage server costs €549 a month with unmetered traffic. Against Cloudflare R2, which charges no egress, the comparison is much closer.