In this article, I will show you how to set up MinIO as S3-compatible object storage. Object storage is a way to keep files in a “bucket,” much like you drop photos into a folder on your computer. You can then use simple commands to save and fetch those files. With MinIO, you get an open-source service that works just like Amazon S3, but you run it yourself. I’ll walk you through terms, steps, benefits, and some of my own tips. You’ll learn why you might pick MinIO over other options. Let’s dive in.
What Is Object Storage?
Object storage is a method to save data as “objects.” Each object holds the data itself, plus metadata—extra details like file size or creation date—and a unique ID. Think of an object like a package. You know what’s inside from the label (metadata) and the package itself (data). You can ask for the package by name (ID) whenever you want.
What Is S3?
S3 stands for Simple Storage Service. It is Amazon’s object storage. Many tools, libraries, and scripts know how to talk to S3. When a storage system mimics S3’s API, we call it “S3-compatible.” That means you can use the same commands and tools. MinIO is one such system.
Key Terms
- Bucket: A container for objects.
- Object: The stored file plus metadata.
- Endpoint: The URL where you reach your storage.
- CLI: Command-line interface, a text way to run commands.
Why I Chose MinIO
I first tried a big cloud provider. It worked fine but cost more than I liked. Then I found MinIO. It matched S3’s API. It ran on my home server. It used less memory. It made me feel like a storage wizard. 🧙♂️
Here are some benefits I noticed:
- Easy to install and update.
- Works on Linux, Windows, or macOS.
- Handles small and large files equally well.
- Offers high-performance reads and writes.
Have you ever wanted a storage service that you fully control? MinIO might be your new best friend.
Prerequisites
Before you start, make sure you have:
- A server or VM with a modern OS (Linux recommended).
- At least 2 GB of RAM and 10 GB of disk space.
- A non-root user with sudo rights.
- Basic knowledge of the command line.
- (Optional) A domain name and SSL certificate.
You can use a free SSL certificate from Let’s Encrypt. It makes your connections secure.
Step 1: Install MinIO
- Download the binary
wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio sudo mv minio /usr/local/bin/
- Create a user
sudo useradd -r minio-user -s /sbin/nologin
- Make data folders
sudo mkdir /var/minio sudo chown minio-user:minio-user /var/minio
- Set environment variables
Edit/etc/default/minio
(create if missing) and add:MINIO_VOLUMES="/var/minio" MINIO_OPTS="--console-address :9001" MINIO_ROOT_USER="YOURACCESSKEY" MINIO_ROOT_PASSWORD="YOURSECRETKEY"
Replace
YOURACCESSKEY
andYOURSECRETKEY
with strong values. - Create a systemd service
Save this as/etc/systemd/system/minio.service
:[Unit] Description=MinIO After=network.target [Service] User=minio-user Group=minio-user EnvironmentFile=/etc/default/minio ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES Restart=always [Install] WantedBy=multi-user.target
- Start and enable service
sudo systemctl daemon-reload sudo systemctl enable --now minio
That’s it. You now have MinIO running on port 9000, and the admin console on port 9001.
Step 2: Configure a Client
You can use the MinIO client (mc
) or AWS CLI. I’ll show both.
Using MinIO Client
- Install mc
wget https://dl.min.io/client/mc/release/linux-amd64/mc chmod +x mc sudo mv mc /usr/local/bin/
- Add your server
mc alias set myminio http://localhost:9000 YOURACCESSKEY YOURSECRETKEY
- Create a bucket
mc mb myminio/photos
- Upload a file
mc cp ~/pic.jpg myminio/photos
Using AWS CLI
If you already use AWS CLI, just point it at your server:
aws configure set aws_access_key_id YOURACCESSKEY
aws configure set aws_secret_access_key YOURSECRETKEY
aws configure set default.region us-east-1
aws configure set default.s3.endpoint_url http://localhost:9000
Then use normal S3 commands:
aws s3 mb s3://videos
aws s3 cp movie.mp4 s3://videos
Step 3: Secure Your Setup
By default, traffic is not encrypted. You can add SSL:
- Obtain certificates with Certbot:
sudo certbot certonly --standalone -d storage.example.com
- Edit
/etc/default/minio
to include:MINIO_CERT_FILE="/etc/letsencrypt/live/storage.example.com/fullchain.pem" MINIO_KEY_FILE="/etc/letsencrypt/live/storage.example.com/privkey.pem"
- Restart service:
sudo systemctl restart minio
Now all data travels over HTTPS. This is crucial if you share your storage with others.
How MinIO Compares to Amazon S3
Feature | Amazon S3 | MinIO |
---|---|---|
Cost | Pay-as-you-go | Free, open source |
Hosting | AWS data centers | Your server or cloud VM |
Control | Limited to AWS | Full system access |
Speed | High | Very high on local setup |
In my tests, small files uploaded in about 10 ms on my LAN. That beat the 50 ms I saw with a public S3 bucket. It felt snappier, like switching from walking to biking.
Benefits of Using MinIO
- Cost savings: No per-gigabyte fees.
- Privacy: You own the data and the hardware.
- Flexibility: Deploy on any Linux box, in a VM, or even on a Raspberry Pi.
- Performance: Local network is often faster than the internet.
Have you tried moving large files over the internet? It can feel like mailing bricks. With MinIO, you dial down latency to local speeds.
Tips and Tricks from My Experience
- Backups: Use
mc mirror
to copy buckets to another server. - Versioning: Turn on versioning to protect against accidental deletes.
- Monitoring: Add a simple Prometheus exporter for metrics.
- Scaling: You can cluster multiple nodes for extra performance and fault tolerance.
I once lost a file by typo. Versioning saved me. And mc mirror
helped me keep a second copy off-site.
Quick Reference: Common Commands
- List buckets:
mc ls myminio
- List objects in a bucket:
mc ls myminio/photos
- Remove an object:
mc rm myminio/photos/pic.jpg
- Mirror buckets:
mc mirror myminio/photos backup/photos
Will MinIO Work for You?
Do you need simple, scalable storage that speaks S3? Do you mind running your own server? If yes, then MinIO is a solid pick. It blends open-source freedom with enterprise-grade speed. And it plays well with tools you already know.
Remember that setup takes about 15 minutes once you gather prerequisites. The rest is just copying commands and tweaking a few options.
Conclusion
Setting up MinIO as S3-compatible object storage is not hard. You install a small program, set up folders, and define keys. Then you use familiar S3 commands. You gain control over your data, save money, and often get better performance. I’ve walked you through terms, steps, comparisons, and my own tips. Now it’s your turn.
Are you ready to kick off your own “bucket list” of files? I hope this guide helps you get there. Let me know how it goes, and share any puns you cook up along the way—I’d love to hear them!