Skip to content

MinIO Role

S3-compatible object storage for testing backup workflows and object storage integrations without AWS costs.

Features

  • Rootless Podman deployment
  • S3-compatible API
  • Web-based management console
  • Versioning support
  • Policy-based access control
  • Multi-user support

Quick Start

./manage-svc.sh minio prepare
./manage-svc.sh minio deploy
./svc-exec.sh minio verify

Configuration

Key Variables

minio_state: present
minio_data_dir: "~/minio-data"
minio_api_port: 9000
minio_console_port: 9001
minio_root_user: "minioadmin"
minio_root_password: "your_secure_password"

Usage

Access

  • S3 API: http://localhost:9000
  • Web Console: http://localhost:9001

Web Console

  1. Open http://localhost:9001
  2. Login with root credentials
  3. Create buckets
  4. Manage users and policies
  5. Upload/download files

AWS CLI Integration

# Configure AWS CLI
aws configure --profile minio
# AWS Access Key ID: minioadmin
# AWS Secret Access Key: your_password
# Default region: us-east-1
# Default output format: json

# Create bucket
aws --profile minio --endpoint-url http://localhost:9000 \
  s3 mb s3://mybucket

# Upload file
aws --profile minio --endpoint-url http://localhost:9000 \
  s3 cp file.txt s3://mybucket/

# List objects
aws --profile minio --endpoint-url http://localhost:9000 \
  s3 ls s3://mybucket/

MC Client (MinIO Client)

# Install mc
curl -O https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc

# Add alias
./mc alias set minio http://localhost:9000 minioadmin your_password

# Create bucket
./mc mb minio/mybucket

# Upload file
./mc cp file.txt minio/mybucket/

# List buckets
./mc ls minio/

Python boto3 Example

import boto3

s3 = boto3.client('s3',
    endpoint_url='http://localhost:9000',
    aws_access_key_id='minioadmin',
    aws_secret_access_key='your_password'
)

# Create bucket
s3.create_bucket(Bucket='mybucket')

# Upload file
s3.upload_file('file.txt', 'mybucket', 'file.txt')

# List objects
response = s3.list_objects_v2(Bucket='mybucket')

Use Cases

  • S3 integration testing
  • Backup workflow testing
  • Object storage development
  • Multi-cloud compatibility testing
  • Data lake prototyping
  • File upload/download testing

Bucket Management

Versioning

# Enable versioning
./mc version enable minio/mybucket

# Check versioning status
./mc version info minio/mybucket

Policies

# Set public read policy
./mc anonymous set download minio/mybucket

# Set custom policy
./mc policy set policy.json minio/mybucket

Lifecycle Rules

# Add expiration rule
./mc ilm add --expiry-days 30 minio/mybucket

User Management

Create User

# Via mc
./mc admin user add minio newuser password123

# Set policy
./mc admin policy attach minio readwrite --user newuser

Performance

Benchmark

# Test write performance
./mc admin speedtest minio --bucket mybucket --size 100M

# Continuous benchmark
./mc support perf object minio/mybucket

Backup

# Backup entire data directory
tar czf minio-backup-$(date +%Y%m%d).tar.gz ~/minio-data

# Mirror buckets
./mc mirror minio/source-bucket minio/backup-bucket

Troubleshooting

Cannot Access Console

  1. Check service running:

    systemctl --user status minio-pod
    

  2. Verify ports:

    podman port minio-svc
    

  3. Check logs:

    podman logs minio-svc
    

S3 API Errors

  1. Verify credentials
  2. Check endpoint URL
  3. Review bucket policies
  4. Check region settings

Service Management

# Status
systemctl --user status minio-pod

# Logs
podman logs minio-svc

# Restart
systemctl --user restart minio-pod

Removal

# Keep data
./manage-svc.sh minio remove

# Delete all
./manage-svc.sh minio remove -e minio_delete_data=true

License

MIT

Author

Created by jackaltx and Claude.