MinIO

Installation

# Pull MinIO image
docker pull minio/minio:latest
 
# Run MinIO container
docker run -d \
  --name minio \
  -p 9000:9000 \
  -p 9001:9001 \
  -e MINIO_ROOT_USER=minioadmin \
  -e MINIO_ROOT_PASSWORD=minioadmin123 \
  -v minio-data:/minio_data \
  minio/minio:latest \
  server /minio_data --console-address ":9001"
 
# View logs
docker logs -f minio

Docker Compose

# Create docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3.8'
 
services:
  minio:
    image: minio/minio:latest
    container_name: minio
    restart: always
    ports:
      - "9000:9000"
      - "9001:9001"
    environment:
      - MINIO_ROOT_USER=minioadmin
      - MINIO_ROOT_PASSWORD=minioadmin123
    volumes:
      - minio-data:/minio_data
    command: server /minio_data --console-address ":9001"
 
volumes:
  minio-data:
EOF
 
# Run compose
docker-compose up -d

Linux Installation

# Download MinIO binary
wget https://dl.min.io/server/minio/release/linux-amd64/minio
 
# Make executable
chmod +x minio
 
# Move to bin
sudo mv minio /usr/local/bin/
 
# Create MinIO user
sudo useradd -m -d /var/minio-data -s /bin/false minio
 
# Create data directory
sudo mkdir -p /var/minio-data
sudo chown -R minio:minio /var/minio-data
 
# Start MinIO
minio server /var/minio-data

Systemd Service

# Create service file
sudo nano /etc/systemd/system/minio.service
 
# Add content
[Unit]
Description=MinIO Object Storage
After=syslog.target network.target
 
[Service]
Type=simple
User=minio
Group=minio
ExecStart=/usr/local/bin/minio server /var/minio-data --console-address ":9001"
Restart=always
RestartSec=10
 
[Install]
WantedBy=multi-user.target
 
# Enable and start
sudo systemctl daemon-reload
sudo systemctl enable minio
sudo systemctl start minio
sudo systemctl status minio

Web Interface Access

# MinIO Console
http://server-ip:9001
 
# Default credentials
username: minioadmin
password: minioadmin123
 
# Change credentials in environment or restart

Service Management

# Docker - Start/Stop
docker start minio
docker stop minio
docker restart minio
 
# Docker - View logs
docker logs -f minio
 
# Systemd - Start/Stop
sudo systemctl start minio
sudo systemctl stop minio
sudo systemctl restart minio
 
# View logs
sudo journalctl -u minio -f

Firewall Configuration

# UFW (Ubuntu)
sudo ufw allow 9000
sudo ufw allow 9001
 
# Firewalld (CentOS)
sudo firewall-cmd --permanent --add-port=9000/tcp
sudo firewall-cmd --permanent --add-port=9001/tcp
sudo firewall-cmd --reload

Bucket Management

Via Console

1. Access Console: http://server-ip:9001
2. Create bucket:
   - Click "Create bucket" button
   - Enter bucket name
   - Click Create
3. Manage access:
   - Set public/private
   - Set access policies

Via MinIO CLI (mc)

# Install MinIO CLI
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/
 
# Configure alias
mc alias set minio http://localhost:9000 minioadmin minioadmin123
 
# List buckets
mc ls minio
 
# Create bucket
mc mb minio/my-bucket
 
# Copy files
mc cp /path/to/file minio/my-bucket/
 
# List bucket contents
mc ls minio/my-bucket

User Management

# Via Console
1. Navigate to: Administration > Identity > Users
2. Create new user
3. Set access keys
4. Assign policies
 
# Set bucket policies
1. Navigate to bucket
2. Click three dots (...) > Edit policy
3. Set access level

Backup & Restore

# Docker volume backup
docker run --rm -v minio-data:/data -v $(pwd):/backup \
  ubuntu tar czf /backup/minio-backup.tar.gz /data
 
# Restore from backup
docker run --rm -v minio-data:/data -v $(pwd):/backup \
  ubuntu tar xzf /backup/minio-backup.tar.gz -C /
 
# File system backup
sudo tar -czf minio-backup.tar.gz /var/minio-data

Configuration

MinIO Environment Variables

# Set credentials
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=secure_password
 
# Set region
export MINIO_REGION=us-east-1
 
# Start with environment
minio server /var/minio-data

Advanced Configuration

# Edit MinIO config
# Docker: mount config volume
# Linux: ~/.minio/config.json
 
# Example config settings
{
  "version": "10",
  "credential": {
    "accessKey": "minioadmin",
    "secretKey": "minioadmin123"
  },
  "region": "us-east-1",
  "api": {
    "requestsMax": 0,
    "requestsDeadline": 10000000000,
    "corsAllowedOrigins": ["*"],
    "corsAllowedMethods": ["GET", "PUT", "HEAD", "DELETE"],
    "corsAllowedHeaders": ["*"],
    "corsExposedHeaders": ["x-amz-request-id", "x-amz-version-id"]
  }
}

Monitoring

# Health check
curl http://localhost:9000/minio/health/live
 
# Metrics endpoint
curl http://localhost:9000/minio/v2/metrics/cluster
 
# Prometheus integration
# Add to Prometheus config
scrape_configs:
  - job_name: 'minio'
    static_configs:
      - targets: ['localhost:9000']
    metrics_path: '/minio/v2/metrics/cluster'

Uninstall

Docker

# Stop and remove container
docker stop minio
docker rm minio
 
# Remove volume (optional)
docker volume rm minio-data

Docker Compose

# Stop and remove
docker-compose down
 
# Remove volumes
docker-compose down -v

Linux/Systemd

# Stop service
sudo systemctl stop minio
 
# Remove binary
sudo rm /usr/local/bin/minio
 
# Remove data
sudo rm -rf /var/minio-data
 
# Remove service
sudo rm /etc/systemd/system/minio.service
sudo systemctl daemon-reload