Which MinIO you can still install
The open-source MinIO repository on GitHub is archived and its README states it is no longer maintained. Its code remains AGPLv3 and had already moved to source-only distribution: the legacy pre-built binaries stay downloadable but receive no updates. What MinIO ships and documents today is AIStor, with three licence tiers.
| Edition | Licence | Topology | Notes |
|---|---|---|---|
| Community (archived) | AGPLv3 | Any | Build from source yourself; no maintained releases |
| AIStor Free | Free, proprietary | Single node only | Commercial production allowed; no modifying or redistributing the software |
| AIStor Enterprise Lite / Enterprise | Paid subscription | Single or multi-node | Adds distributed mode and the features listed below |
AIStor Free needs AIStor Server RELEASE.2025-12-20T04-58-37Z or later and a licence key from MinIO's SUBNET portal. The licence page lists what the Free tier refuses: distributed (multi-node) deployments, site, bucket and batch replication, tiering and lifecycle transitions, version-specific object deletion, profiling, performance tests, background heal status and encryption at rest. A write that asks for server-side encryption returns HTTP 405 XMinioPaidTierLicenseRequired.
AIStor starts without a licence, but in offline mode: every S3 call is blocked until a licence file is in place. Plan the SUBNET step before the maintenance window, not during it.
Drive count sets the parity
MinIO stripes each object into K data and M parity shards across an erasure set of 2 to 16 drives, and a set's parity can go up to half its size. MinIO's storage-class reference states that production deployments must use EC:3 or higher, and calls the defaults it picks for sets of five or fewer drives suitable for development and testing only. Since parity tops out at half the set, EC:3 needs at least six drives in the set. The erasure set layout is fixed when the pool initialises, so buy the drive count up front.
| Drives (one set) | Default parity | Usable share | Drives lost, reads continue | Drives lost, writes continue |
|---|---|---|---|---|
| 4 | EC:2 | 50% | 2 | 1 |
| 6 | EC:3 | 50% | 3 | 2 |
| 8 | EC:4 | 50% | 4 | 3 |
| 12 | EC:4 | 67% | 4 | 4 |
| 16 | EC:4 | 75% | 4 | 4 |
Defaults come from MinIO's storage-class table. The last three columns are our arithmetic from its quorum rules: reads need K healthy shards, writes need K, and K+1 when parity is exactly half the set, which is why 6- and 8-drive sets keep reading after one more failure than they keep writing. You can set MINIO_STORAGE_CLASS_STANDARD lower on an 8-drive set, for example EC:3, to keep more capacity; the change applies only to objects written afterwards.
Hardware: MinIO's numbers and a single node
MinIO's hardware guidelines are set high: per host, a single-socket CPU with 64 or more cores, 100 GbE networking, 30 TB-class NVMe drives and 256 GiB of RAM, with the caveat that running on less risks reliability and performance. For one machine, the points below matter more than those figures.
- Drives. Flash (NVMe or SSD) for every workload, attached directly as JBOD with no RAID or LVM in front, formatted XFS, all the same capacity, make and model. The slowest or smallest drive sets the pace.
- Memory. MinIO allocates up to 75% of host RAM to GET operations at about 2 MiB per request, so memory caps concurrency: its table gives 12,288 concurrent requests at 32 GiB, 24,576 at 64 GiB and 49,152 at 128 GiB.
- Network. Throughput stops at the port. MinIO's table puts 10 Gbps at about 1.25 GB/s and 25 Gbps at about 3.1 GB/s of storage traffic, whatever the drives could do.
- Kernel. MinIO recommends Linux 6.8 or later, such as Ubuntu 24.04 LTS.
Building the machine
A custom dedicated server is specified part by part, and the storage step is where this workload is decided: choose the JBOD controller so every drive reaches Linux on its own, then the drive type and count, up to 24 bays on the largest lines, in SATA-SSD, SAS-SSD or NVMe-SSD up to 30.72 TB. Memory runs from 8 GB to 2 TB of registered ECC. Nobody else runs on the hardware, and you get root.
The port is the other half. It is unshared and unmetered at every speed from 1 Gbps to 100 Gbps, so reads served out of the bucket carry no per-gigabyte line. Builds are handed over 4 to 24 hours after the order is approved, in New York, Miami, San Francisco, Amsterdam or Bucharest; the locations page has a test IP per city. If a racked machine already has the drives you need, instant servers go live about 30 minutes after approval. Memory and drives can be changed after the server is live, but MinIO will not widen an initialised erasure set, so size the drive count for the pool's whole life.
Setting it up on Ubuntu 24.04
- Create the mount points with
sudo mkdir -p /mnt/drive-{1..8}, then format each data drive XFS with a label (mkfs.xfs -L AISTORDRIVE1 /dev/sdXerases that drive: check the device name twice) and mount it from/etc/fstabby label withdefaults,noatime, one line per drive at/mnt/drive-1onwards. Labels let a replacement drive take the old one's place without editing the file. - Install the AIStor package from MinIO's download server and confirm the systemd unit exists with
systemctl status minio. - Put the licence string in
/opt/minio/minio.licenseand giveminio-userownership of/opt/minioand every/mnt/drive-N. - Write
/etc/default/minioas below; the hostname inMINIO_VOLUMESmust resolve to this machine. SetMINIO_ROOT_USERandMINIO_ROOT_PASSWORDbefore the first start: omitted, both default tominioadmin, which MinIO says never to use in production. - Create
/opt/minio/certs, copy in a PEMpublic.crtandprivate.keyvalid for theMINIO_VOLUMEShostname, and runchown -R minio-user:minio-user /opt/minio/certs. The service starts withhttps://volumes and--certs-dir, so the certificate has to be there first. - Run
systemctl enable minio.service && systemctl start minio, then followjournalctl -u miniountil the drives report online.
curl --progress-bar -L dl.min.io/aistor/minio/release/linux-amd64/minio.deb -o minio.deb
sudo dpkg -i minio.deb
# /etc/default/minio -- holds the root password:
# sudo chown root:minio-user /etc/default/minio && sudo chmod 640 /etc/default/minio
MINIO_LICENSE="/opt/minio/minio.license"
MINIO_VOLUMES="https://s3.example.net:9000/mnt/drive-{1...8}/minio"
MINIO_OPTS="--certs-dir /opt/minio/certs --console-address 127.0.0.1:9001"
MINIO_ROOT_USER="replace-with-a-long-random-name"
MINIO_ROOT_PASSWORD="replace-with-a-long-random-secret"
TLS, ports and the console
The S3 API listens on 9000 by default. The web console takes the port you give --console-address; omit the flag and MinIO picks a dynamic port at each start and prints it to the log, which makes firewall rules guesswork. Binding the console to 127.0.0.1 as above keeps the admin login off the internet: reach it with ssh -L 9001:127.0.0.1:9001 and a browser on your own machine.
TLS is already on from the certificate step above: a PEM public.crt and private.key at the root of /opt/minio/certs, owned by minio-user, with --certs-dir pointing at it and https:// in MINIO_VOLUMES. Extra hostnames go in subdirectories, picked by the certificate's SAN list rather than the folder name. PFX bundles are not accepted, and a password-protected key must be PKCS-1 with MINIO_CERT_PASSWD set. On RELEASE.2026-02-02T23-40-11Z and later, a certificate replaced in place is reloaded without a restart.
Running it
- Licence. An AIStor Free licence does not expire:
mc license info ALIASshows its expiry as N/A. The 30-day grace period, then read-only, then no S3 access from day 90 that MinIO's licence page describes applies to paid licences; a trial goes read-only as soon as it lapses. - A second copy. Erasure coding survives drive failures, not the loss of the machine, a bad delete or a compromised key, and the Free tier has no replication. Copy the buckets that matter to storage in another location with any S3 client, on a timer.
- XFS errors. MinIO's storage page supplies a script that sets XFS
max_retriesto 0 for EIO, ENOSPC and default errors, so a failing drive errors out instead of stalling; run it from an@rebootcron entry because the setting does not persist. - Identities. Create named users with scoped policies for each application and keep the root keys for administration.
- Hardware. On the rack and blade lines, the out-of-band console reaches the machine when Linux will not; failed parts are covered by the support terms.
Where one machine is the wrong answer
A single node is a single failure domain: a dead motherboard or power supply takes the bucket offline until the part is replaced, however much parity the drives carry. High availability means multiple nodes, which AIStor Free does not license. Each of our machines also has one connected port and no private VLAN between servers, so a multi-node cluster would carry its inter-node traffic over the public interface. If your applications cannot tolerate an outage while hardware is swapped, the paid AIStor tiers on several machines are the documented design.
Questions
Is MinIO still free for a self-hosted server?
Yes, in two ways with different terms. AIStor Free costs nothing and may run commercial production, but only as a single node, and you may not modify or redistribute it. The archived community code is AGPLv3 and can still be built from source, but it receives no maintained releases.
How many drives should a single MinIO node have?
Six or more if the data matters. MinIO requires parity of EC:3 or higher for production, and parity cannot exceed half the erasure set, so four drives cannot reach it. Eight drives at the default EC:4 keep reading with four drives lost.
Should the drives sit behind hardware RAID?
No. MinIO's storage requirements ask for directly attached drives as JBOD with no RAID or LVM layer, because erasure coding already does that job. Choose the JBOD controller when you specify the server.
Which ports does a MinIO server use?
The S3 API defaults to 9000. The console uses whatever --console-address sets, and a random port each start if you leave it unset. Open 9000 to your clients and keep the console private.
Can I encrypt objects at rest on the free edition?
Not with MinIO's server-side encryption. The AIStor licence page reserves encryption at rest for the paid tiers, and the server answers such requests with HTTP 405. Encrypting before upload in your application is the remaining route.
Does an object store need a fast port?
Only as fast as your clients read. MinIO notes that a 10 Gbps link caps a node near 1.25 GB/s however fast the drives are. Here the port is unmetered at every speed, so you choose it for throughput rather than for a traffic bill.