+
*
delphi
+
android
%
mocha
+
+
express
choo
vue
+
terraform
vue
android
raspbian
+
mocha
+
+
+
+
+
c#
+
+
php
!!
graphdb
&
+
nomad
+
+
php
+
+
+
play
+
c++
[]
+
+
+
numpy
+
+
+
+
axum
react
+
intellij
+
+
jenkins
vercel
+
elasticsearch
+
~
+
nomad
elementary
neo4j
perl
terraform
wsl
+
+
k8s
+
+
scala
+
=
+
+
+
+
+
==
0x
#
Back to Blog
☁️ MinIO S3-Compatible Object Storage on AlmaLinux: Your Private Cloud Storage
minio s3 object-storage

☁️ MinIO S3-Compatible Object Storage on AlmaLinux: Your Private Cloud Storage

Published Aug 29, 2025

Build your own S3-compatible storage with MinIO on AlmaLinux! Learn installation, configuration, buckets, policies, and integration. Perfect beginner's guide!

5 min read
0 views
Table of Contents

☁️ MinIO S3-Compatible Object Storage on AlmaLinux: Your Private Cloud Storage

Welcome to the world of object storage! 🚀 Ready to build your own Amazon S3-compatible storage system? MinIO is like having AWS S3 in your own data center - powerful, scalable, and completely under your control! It’s perfect for storing files, backups, images, videos, and any data you can imagine! 💾✨

🤔 Why is MinIO Important?

MinIO brings enterprise-grade object storage to everyone! 🌟 Here’s why it’s revolutionary:

  • 💰 Cost Savings - No cloud storage fees, own your data!
  • 🚀 Blazing Fast - Handles 183 GB/s on standard hardware!
  • 🔄 S3 Compatible - Works with any S3 application instantly
  • 🛡️ Data Protection - Erasure coding keeps data safe
  • 📈 Infinitely Scalable - From laptop to petabyte clusters
  • 🔒 Enterprise Security - Encryption, versioning, and compliance

Think of MinIO as your personal Amazon S3 - but faster, cheaper, and completely yours! 🏆

🎯 What You Need

Before building your storage empire, ensure you have:

  • ✅ AlmaLinux server (8 or 9)
  • ✅ Root or sudo access
  • ✅ At least 4GB RAM (more for production)
  • ✅ 20GB+ disk space for storage
  • ✅ Basic terminal skills
  • ✅ Enthusiasm to learn! 🎓

📝 Step 1: Installing MinIO - Your Storage Foundation!

Let’s get MinIO up and running! 🏗️

First, download the MinIO binary:

# Download MinIO server binary
wget https://dl.min.io/server/minio/release/linux-amd64/minio

# Make it executable
chmod +x minio

# Move to system location
sudo mv minio /usr/local/bin/

# Verify installation
minio --version

You should see:

minio version RELEASE.2024-XX-XX

Now create a dedicated user for MinIO:

# Create minio user (security best practice!)
sudo useradd -r minio -s /sbin/nologin

# Create data directory
sudo mkdir -p /data/minio

# Set ownership
sudo chown -R minio:minio /data/minio

# Create config directory
sudo mkdir /etc/minio
sudo chown -R minio:minio /etc/minio

Great! MinIO is installed! 🎉

🔧 Step 2: Configuring MinIO - Setting Up Your Storage Server!

Time to configure your object storage server! 🎯

Create environment file for MinIO:

# Create MinIO environment file
sudo nano /etc/default/minio

Add this configuration (customize as needed!):

# Volume(s) to use for MinIO storage
MINIO_VOLUMES="/data/minio"

# Access Key (like AWS Access Key ID)
MINIO_ROOT_USER="minioadmin"

# Secret Key (like AWS Secret Access Key) - CHANGE THIS!
MINIO_ROOT_PASSWORD="changeme123456"

# MinIO server URL for console
MINIO_SERVER_URL="http://your-server-ip:9000"

# Region (optional, defaults to us-east-1)
MINIO_REGION="us-east-1"

# Enable browser/console
MINIO_BROWSER="on"

# Console address
MINIO_CONSOLE_ADDRESS=":9001"

⚠️ IMPORTANT: Change MINIO_ROOT_PASSWORD to something secure!

Set proper permissions:

# Secure the configuration
sudo chmod 600 /etc/default/minio
sudo chown minio:minio /etc/default/minio

🌟 Step 3: Creating Systemd Service - Making MinIO Persistent!

Let’s make MinIO start automatically! 🚀

Create systemd service file:

# Create service file
sudo nano /etc/systemd/system/minio.service

Add this configuration:

[Unit]
Description=MinIO Object Storage Server
Documentation=https://docs.min.io
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
WorkingDirectory=/usr/local/
User=minio
Group=minio
EnvironmentFile=/etc/default/minio
ExecStart=/usr/local/bin/minio server $MINIO_VOLUMES
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
SyslogIdentifier=minio
TimeoutStartSec=0

# Hardening
PrivateTmp=yes
NoNewPrivileges=yes
PrivateDevices=yes
RemoveIPC=yes
ProtectSystem=strict
ReadWritePaths=/data/minio

[Install]
WantedBy=multi-user.target

Start MinIO:

# Reload systemd
sudo systemctl daemon-reload

# Start MinIO
sudo systemctl start minio

# Enable on boot
sudo systemctl enable minio

# Check status
sudo systemctl status minio

Configure firewall:

# Open MinIO ports
sudo firewall-cmd --permanent --add-port=9000/tcp
sudo firewall-cmd --permanent --add-port=9001/tcp
sudo firewall-cmd --reload

Visit http://your-server-ip:9001 - MinIO Console is ready! 🎊

✅ Step 4: Creating Buckets - Your Storage Containers!

Let’s create your first storage bucket! 🪣

Install MinIO Client (mc):

# Download MinIO Client
wget https://dl.min.io/client/mc/release/linux-amd64/mc

# Make executable
chmod +x mc

# Move to system location
sudo mv mc /usr/local/bin/

# Verify
mc --version

Configure mc to connect to your MinIO:

# Add your MinIO server
mc alias set myminio http://localhost:9000 minioadmin changeme123456

# List buckets (should be empty initially)
mc ls myminio

Create buckets:

# Create a bucket for backups
mc mb myminio/backups

# Create a bucket for media files
mc mb myminio/media

# Create a bucket for documents
mc mb myminio/documents

# List all buckets
mc ls myminio

You’ll see:

[2024-XX-XX 10:00:00 UTC]     0B backups/
[2024-XX-XX 10:00:05 UTC]     0B media/
[2024-XX-XX 10:00:10 UTC]     0B documents/

Perfect! Your buckets are ready! 🎯

🔒 Step 5: Setting Up Access Policies - Security First!

Let’s secure your storage with policies! 🛡️

Create a read-only policy:

# Create policy file
nano /tmp/readonly-policy.json

Add this policy:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::media/*",
        "arn:aws:s3:::media"
      ]
    }
  ]
}

Apply the policy:

# Set public read policy on media bucket
mc anonymous set public myminio/media

# Or use custom policy
mc admin policy add myminio readonly /tmp/readonly-policy.json

# Create a user
mc admin user add myminio john johnspassword

# Attach policy to user
mc admin policy set myminio readonly user=john

Create access keys for applications:

# Generate access key
mc admin user svcacct add myminio john

# You'll get output like:
# Access Key: AKIAIOSFODNN7EXAMPLE
# Secret Key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

📤 Step 6: Uploading and Managing Files - Using Your Storage!

Time to use your object storage! 📁

Upload files using mc:

# Upload a single file
mc cp /path/to/file.pdf myminio/documents/

# Upload entire directory
mc cp --recursive /path/to/photos/ myminio/media/

# Mirror a directory (sync)
mc mirror /local/backup/ myminio/backups/

# Check upload
mc ls myminio/documents/

Set lifecycle policies:

# Delete old files automatically after 30 days
mc ilm add --expiry-days 30 myminio/backups

# Transition to cheaper storage after 7 days
mc ilm add --transition-days 7 --storage-class COLD myminio/media

Enable versioning:

# Enable versioning on important bucket
mc version enable myminio/documents

# List versions
mc ls --versions myminio/documents/

🎮 Quick Examples

Example 1: Using MinIO with S3 CLI

Use AWS CLI with MinIO:

# Install AWS CLI
sudo dnf install -y awscli

# Configure for MinIO
aws configure --profile minio
# Enter:
# Access Key: minioadmin
# Secret Key: changeme123456
# Region: us-east-1
# Output: json

# Use with MinIO
aws --endpoint-url http://localhost:9000 --profile minio s3 ls
aws --endpoint-url http://localhost:9000 --profile minio s3 cp file.txt s3://backups/

Example 2: Python Application Integration

Use MinIO from Python:

# Install: pip install boto3
import boto3

# Connect to MinIO
s3 = boto3.client(
    's3',
    endpoint_url='http://your-server:9000',
    aws_access_key_id='minioadmin',
    aws_secret_access_key='changeme123456'
)

# Upload file
s3.upload_file('local-file.jpg', 'media', 'uploaded-file.jpg')

# List objects
response = s3.list_objects_v2(Bucket='media')
for obj in response.get('Contents', []):
    print(obj['Key'])

Example 3: Distributed MinIO Setup

Create a 4-node cluster for high availability:

# On each node, set environment
sudo nano /etc/default/minio

# Add:
MINIO_VOLUMES="http://node{1...4}.example.com:9000/data/minio"

# Start on all nodes
sudo systemctl start minio

# They'll automatically form a cluster!

🚨 Fix Common Problems

Problem 1: Cannot Access Console

Symptom: Can’t reach MinIO console 😰

Fix:

# Check if MinIO is running
sudo systemctl status minio

# Check logs
sudo journalctl -u minio -n 50

# Verify ports are open
sudo firewall-cmd --list-ports

# Test locally
curl http://localhost:9001

# Check console is enabled
grep MINIO_BROWSER /etc/default/minio

Problem 2: Permission Denied Errors

Symptom: Can’t write to buckets 🚫

Fix:

# Check directory ownership
ls -la /data/minio/

# Fix permissions
sudo chown -R minio:minio /data/minio
sudo chmod -R 755 /data/minio

# Restart MinIO
sudo systemctl restart minio

# Check SELinux
sudo setenforce 0  # Temporary disable to test

Problem 3: Slow Performance

Symptom: Uploads/downloads are slow 🐌

Fix:

# Use multiple drives for better performance
# Edit /etc/default/minio:
MINIO_VOLUMES="/data/minio1 /data/minio2 /data/minio3 /data/minio4"

# Enable caching
mc admin config set myminio cache drives="/cache1,/cache2"

# Optimize kernel parameters
echo "net.core.rmem_max = 134217728" | sudo tee -a /etc/sysctl.conf
echo "net.core.wmem_max = 134217728" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

📋 Simple Commands Summary

CommandWhat It DoesWhen to Use
mc alias setConfigure connectionInitial setup
mc mbMake bucketCreate storage
mc cpCopy filesUpload data
mc mirrorSync directoriesBackup
mc lsList objectsBrowse storage
mc rmRemove objectsDelete files
mc admin infoServer infoCheck status
mc admin user addCreate userAccess control
mc version enableEnable versioningData protection
mc ilm addLifecycle rulesAutomate cleanup

💡 Tips for Success

🚀 Performance Optimization

Make MinIO super fast:

# Use NVMe SSDs for best performance
# Mount with optimal settings
sudo mount -o noatime,nodiratime /dev/nvme0n1 /data/minio

# Use erasure coding for reliability
# 4 drives minimum for EC:2 (can lose 2 drives)
MINIO_VOLUMES="http://server{1...4}/data{1...4}"

# Enable kernel optimizations
echo "vm.swappiness = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

🔒 Security Best Practices

Keep your storage ultra-secure:

  1. Use TLS/SSL - Encrypt all connections! 🔐
  2. Strong passwords - Minimum 16 characters! 💪
  3. Regular key rotation - Change credentials monthly! 🔄
  4. Enable audit logs - Track all access! 📝
  5. Bucket encryption - Encrypt data at rest! 🛡️
# Enable encryption
mc encrypt set sse-s3 myminio/sensitive

# Enable audit logs
mc admin config set myminio audit_webhook:primary endpoint="http://splunk:8088"

📊 Monitoring Your Storage

Keep an eye on everything:

# Real-time metrics
mc admin info myminio

# Prometheus metrics
curl http://localhost:9000/minio/v2/metrics/cluster

# Disk usage
mc du myminio

# Watch events
mc admin trace myminio

🏆 What You Learned

You’re now a MinIO expert! 🎓 You’ve successfully:

  • ✅ Installed MinIO object storage
  • ✅ Configured S3-compatible server
  • ✅ Created and managed buckets
  • ✅ Set up security policies
  • ✅ Integrated with applications
  • ✅ Learned troubleshooting
  • ✅ Mastered MinIO Client (mc)

You have your own private cloud storage! ☁️

🎯 Why This Matters

MinIO gives you incredible capabilities! With your object storage, you can:

  • 💾 Replace expensive cloud storage - Save thousands per month!
  • 🎬 Stream media files - Build your own Netflix!
  • 🗄️ Archive data forever - Immutable backups!
  • 🚀 Scale infinitely - From GB to PB!
  • 🤖 Power AI/ML workloads - Store training data!

You’re not just storing files - you’re building a foundation for modern applications, data lakes, and cloud-native infrastructure! Your data is now yours, scalable, and S3-compatible! 🌟

Keep building, keep storing, and remember - with MinIO, the sky’s the limit! ⭐

May your storage be infinite and your costs be minimal! 🚀☁️🙌