MinIO Deployment and Usage Guide
Prerequisites
- Go Runtime: Minimum version 1.24 (download)
- Operating System: Linux, macOS, or Windows
- Disk Space: Minimum 1GB free space for object storage
- Network: Port 9000 (S3 API) and 9001 (Console) accessible
Installation
Install from Source
# Install the latest MinIO binary
go install github.com/minio/minio@latest
# Verify installation
minio version
Build Docker Image
# Clone the repository
git clone https://github.com/minio/minio.git
cd minio
# Build the Docker image
docker build -t myminio:minio .
# Verify the image
docker image ls | grep myminio
Configuration
Environment Variables
| Variable | Default | Description |
|---|---|---|
MINIO_ROOT_USER | minioadmin | Root access key |
MINIO_ROOT_PASSWORD | minioadmin | Root secret key |
MINIO_DOMAIN | localhost | Domain for browser access |
MINIO_REGION_NAME | us-east-1 | Default region name |
Default Credentials
- Access Key:
minioadmin - Secret Key:
minioadmin
Configuration Files
MinIO uses a built-in configuration system. No external config files are required for basic operation. For advanced configuration, use the MinIO Client (mc) tool:
# Set up mc alias
mc alias set local http://localhost:9000 minioadmin minioadmin
# Configure server settings
mc admin config set local <setting> <value>
Build & Run
Local Development
# Start MinIO server with default settings
minio server /data
# Start with custom credentials
MINIO_ROOT_USER=myuser MINIO_ROOT_PASSWORD=mypassword minio server /data
# Start with custom port and console address
minio server /data --console-address ":9001"
Production Deployment
# Start with multiple drives for erasure coding
minio server /disk1/data /disk2/data /disk3/data /disk4/data
# Start with specific storage class
minio server /data --storage-class STANDARD,REDUCED_REDUNDANCY
Docker Run
# Run MinIO with persistent storage
docker run -p 9000:9000 -p 9001:9001 \
-v /mnt/data:/data \
minio/minio server /data --console-address ":9001"
# Run with custom credentials
docker run -p 9000:9000 -p 9001:9001 \
-e MINIO_ROOT_USER=myuser \
-e MINIO_ROOT_PASSWORD=mypassword \
minio/minio server /data --console-address ":9001"
Deployment
Platform Recommendations
Docker/Kubernetes
# Kubernetes deployment (example)
kubectl create deployment minio --image=minio/minio:latest
kubectl expose deployment minio --port=9000 --type=LoadBalancer
Cloud Platforms
- AWS EC2: Deploy as standalone instance with EBS volumes
- Google Cloud: Use Compute Engine with persistent disks
- Azure: Deploy on Virtual Machines with managed disks
Bare Metal
# Production bare metal setup
minio server http://host{1...4}/export{1...4}
High Availability Setup
# Distributed setup with 4 nodes
minio server http://host{1...4}/data{1...4}
Troubleshooting
Common Issues
Port Already in Use
# Check running processes
lsof -i :9000
# Kill conflicting process
kill -9 <PID>
Permission Denied
# Set proper permissions
chmod 755 /data
chown -R minio:minio /data
Connection Refused
# Check firewall rules
sudo ufw status
sudo ufw allow 9000
# Verify MinIO is running
ps aux | grep minio
Health Checks
# Check server status
curl http://localhost:9000/minio/health/live
# Check console status
curl http://localhost:9001/minio/health/live
Log Analysis
# View MinIO logs
journalctl -u minio.service -f
# Check for specific errors
grep -i "error" /var/log/minio.log
Performance Issues
# Check disk I/O
iostat -x 1
# Monitor memory usage
free -h
# Check network bandwidth
iftop -n
Recovery Procedures
# Restart MinIO service
sudo systemctl restart minio
# Rebuild metadata (if corrupted)
minio fs heal /data --recursive
Security Best Practices
# Change default credentials
mc admin user add local newuser newpassword
# Enable HTTPS
mc admin config set local tls key=/path/to/key cert=/path/to/cert
# Set up access policies
mc admin policy add local readwrite /path/to/policy.json