Minio as Aws S3 alternative. Minio overview and install.

Overview and installing Minio

Page content

MinIO is an open-source, high-performance, distributed object storage system designed to be fully compatible with the Amazon S3 API.

It can be deployed on-premises, in the cloud, or at the edge, and is optimized for speed, scalability, and security. MinIO is widely used in modern data workloads, including AI/ML, analytics, backup, and hybrid cloud environments.

aws-s3 vs minio

Minio is very easy to use

  • Simple Deployment: MinIO is known for its straightforward installation and configuration process. It is considered much easier to set up and manage than more complex self-hosted solutions like Ceph.
  • S3 API Compatibility: Its strict adherence to the S3 API means applications and tools built for AWS S3 can work with MinIO without modification, simplifying migration and integration.
  • User Experience: MinIO provides both a web-based UI and a CLI, both of which are praised for their simplicity and ease of use.
  • Documentation and Community: While MinIO has a growing community and decent documentation, it may not match the extensive resources available for AWS S3.

Comparison: MinIO vs AWS S3

Feature MinIO AWS S3
Deployment Self-hosted/on-premises/cloud/edge Fully managed by AWS
Scalability Manual/horizontal scaling Automatic, virtually unlimited
API Compatibility S3 compatible Native S3
Customization Highly customizable Limited (within AWS ecosystem)
Integration Broad (any S3-compatible tool) Deep integration with AWS services
Compliance User-managed AWS-managed, certified for standards
Performance Optimized for speed, hardware-dependent Varies by region/tier
Support Community/commercial support AWS enterprise support
Cost No licensing fees, runs on commodity HW Usage-based, pay-as-you-go

Installing Minio as Systemd service

Recommended to download deb package and install it with dpkg - this will also create a minio systemd service file.

wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio_20250422221226.0.0_amd64.deb -O minio.deb
sudo dpkg -i minio.deb

How to Install Dockerised MinIO

MinIO can be quickly deployed using Docker with just a single command. Below are the step-by-step instructions for a basic single-node, single-drive setup.

1. Prepare a Data Directory

Create a directory on your host system to persist MinIO data:

mkdir -p ~/minio/data

This ensures your data is retained even if the container is removed or restarted.

2. Run MinIO with Docker

Use the following command to start MinIO:

docker run -p 9000:9000 -p 9001:9001 \
  --name minio1 \
  -e "MINIO_ROOT_USER=minioadmin" \
  -e "MINIO_ROOT_PASSWORD=minioadmin" \
  -v ~/minio/data:/data \
  minio/minio server /data --console-address ":9001"
  • -p 9000:9000: Exposes the MinIO API on port 9000.
  • -p 9001:9001: Exposes the MinIO web console on port 9001.
  • --name minio1: Names your container for easy management.
  • -e "MINIO_ROOT_USER=minioadmin" and -e "MINIO_ROOT_PASSWORD=minioadmin": Set the root user and password (change these for production).
  • -v ~/minio/data:/data: Mounts your local data directory to the container for persistent storage.
  • minio/minio server /data --console-address ":9001": Starts the MinIO server and enables the web console.

3. Access the MinIO Console

  • Open your browser and go to http://localhost:9001
  • Log in with the credentials you set above (minioadmin / minioadmin by default).

4. (Optional) Using Docker Compose

For more advanced setups or development, you can use Docker Compose. Example Compose files and instructions are available in community repositories.

5. (Optional) Install the MinIO Client

To interact with your MinIO server via CLI, install the MinIO client (mc):

curl -O https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/mc

Then configure it to connect to your MinIO server:

mc alias set local http://127.0.0.1:9000 minioadmin minioadmin

This setup gives you a fully functional, S3-compatible object storage server running locally via Docker. For production deployments, consult the official MinIO documentation for advanced configuration, security, and scaling options.

Steps to Configure MinIO Using Docker Compose

1. Prepare a Data Directory

Create a directory on your host machine to persist MinIO data:

mkdir -p ~/minio/data

This directory will be mounted into the container to ensure data persists across restarts.


2. Create a Docker Compose File

In your working directory, create a file named docker-compose.yml and add the following content (customize as needed):

version: '3.7'

services:
  minio:
    image: minio/minio
    container_name: minio
    ports:
      - "9000:9000"
      - "9001:9001"
    environment:
      MINIO_ROOT_USER: minioadmin
      MINIO_ROOT_PASSWORD: minioadmin
    volumes:
      - ~/minio/data:/data
    command: server /data --console-address ":9001"
  • Change MINIO_ROOT_USER and MINIO_ROOT_PASSWORD to secure values for production use.
  • Adjust the volume path if you are using a different directory.

3. Start the MinIO Service

Run the following command in the same directory as your docker-compose.yml:

docker-compose up -d

This command will pull the MinIO image if not present, create the container, and start the service in detached mode.


4. Verify the Service

Check that MinIO is running:

docker-compose ps

You can also view logs to ensure there are no errors:

docker-compose logs minio

5. Access the MinIO Console

  • Open your browser and go to http://localhost:9001
  • Log in using the credentials you set (minioadmin / minioadmin by default).

Summary Table

Step Description
Prepare Directory mkdir -p ~/minio/data
Compose File Create and edit docker-compose.yml
Start Service docker-compose up -d
Verify docker-compose ps and docker-compose logs
Access Console Visit http://localhost:9001 in browser

For more advanced setups (e.g., distributed mode, custom configs), refer to the official MinIO Compose documentation or community guides.

Advantages of MinIO

  • Cost-Effective: No licensing fees; runs on commodity hardware, which can significantly reduce total cost of ownership compared to managed cloud storage.
  • Open Source: Fully open-source, allowing for customization and transparency.
  • S3 API Compatibility: Seamless migration for S3-based applications; works with existing S3 tools and workflows.
  • Performance: Optimized for high throughput and low latency, especially on modern hardware; often outperforms AWS S3 in certain workloads.
  • Deployment Flexibility: Can be deployed anywhere-on-premises, in any cloud, or at the edge-enabling hybrid and multi-cloud strategies.
  • Data Control: Organizations retain full control over data location and access, which is critical for data sovereignty and security.

Challenges of MinIO

  • Manual Scalability: Scaling requires manual configuration and management, unlike AWS S3’s automatic scaling.
  • Compliance Burden: Compliance with standards (e.g., GDPR, HIPAA) is the responsibility of the deploying organization, not MinIO itself.
  • Support: While MinIO offers commercial support, the breadth and depth of support may not match AWS’s enterprise-level offerings.
  • Operational Overhead: As a self-hosted solution, MinIO requires ongoing maintenance, monitoring, and updates by the user.
  • Feature Gaps: Some advanced features and integrations available in AWS S3 may not be present or as mature in MinIO.

Minio vs ASW S3 Pricing

  • MinIO: Free to use under an open-source license (AGPL v3). Costs are primarily those of the underlying infrastructure (servers, storage, network) and any optional commercial support contracts.
  • AWS S3: Pay-as-you-go pricing based on storage used, data transfer, and API requests. Offers multiple storage classes with varying costs, enabling cost optimization for different use cases.

Summary

MinIO is a powerful, open-source alternative to AWS S3, offering S3 API compatibility, high performance, and deployment flexibility at a lower cost-especially for organizations that prefer or require self-hosted storage. It is easy to use and integrates well with existing S3-compatible tools. However, it requires more hands-on management, particularly for scaling and compliance, and lacks the deep integration and support ecosystem of AWS S3. The choice between MinIO and AWS S3 depends on your specific needs for control, cost, scalability, compliance, and operational overhead.