← Back to minio/minio

How to Deploy & Use minio/minio

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

VariableDefaultDescription
MINIO_ROOT_USERminioadminRoot access key
MINIO_ROOT_PASSWORDminioadminRoot secret key
MINIO_DOMAINlocalhostDomain for browser access
MINIO_REGION_NAMEus-east-1Default 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