Skip to main content
MinIO is a high-performance, S3-compatible object storage system that you can self-host. It’s an excellent alternative to Amazon S3 for organizations that want full control over their data storage.

Overview

MinIO provides:
  • S3-compatible API (works with Evolution API’s S3 integration)
  • Self-hosted deployment (full data sovereignty)
  • High performance and scalability
  • Simple installation and configuration
  • SSL/TLS support for secure connections

Installation

Docker Deployment

The easiest way to deploy MinIO is using Docker:
1

Create MinIO directories

Create directories for MinIO data and configuration:
2

Run MinIO container

Start MinIO using Docker:
3

Access MinIO Console

Open your browser and navigate to http://localhost:9001 to access the MinIO web console.Login with:
  • Username: minioadmin
  • Password: minioadmin123
4

Create a bucket

In the MinIO console, create a new bucket named evolution for storing Evolution API media files.
5

Create access credentials

Generate access keys in the MinIO console:
  1. Go to “Access Keys” in the left sidebar
  2. Click “Create access key”
  3. Save the Access Key and Secret Key

Docker Compose Deployment

For production deployments, use Docker Compose:
docker-compose.yaml
Start the service:

Evolution API Configuration

Basic Configuration

Configure Evolution API to use MinIO by setting these environment variables:
.env

SSL/TLS Configuration

For production deployments, enable SSL/TLS on MinIO:
1

Generate SSL certificates

Create SSL certificates for MinIO:
2

Configure MinIO with certificates

Create the certificate directory and add your certificates:
3

Update Docker Compose configuration

Mount the certificates directory:
4

Update Evolution API configuration

Enable SSL in your Evolution API configuration:

Environment Variables

Required Variables

boolean
required
Enable S3 storage integration.
string
required
MinIO access key ID created in the MinIO console.
string
required
MinIO secret key corresponding to the access key.
string
required
The name of the MinIO bucket for storing media files.
string
required
MinIO server endpoint URL (without http:// or https://).Examples:
  • Local: localhost:9000
  • Domain: minio.yourdomain.com
  • IP: 192.168.1.100:9000

Optional Variables

boolean
Enable SSL/TLS for secure connections to MinIO.Default: true
number
The port MinIO is running on.Default: 443 (with SSL) or 9000 (without SSL)
string
MinIO region identifier. MinIO uses us-east-1 by default.Default: us-east-1

Configuration Examples

Complete Docker Compose Setup

Here’s a complete docker-compose.yaml with Evolution API and MinIO:
docker-compose.yaml
Corresponding .env file:
.env

Bucket Configuration

Access Policy

Set appropriate access policies for your MinIO bucket:
Only make objects publicly accessible if necessary. Evolution API can work with private buckets using signed URLs.

Versioning

Enable versioning to protect against accidental deletions:

Lifecycle Rules

Set up lifecycle rules to manage storage:

Monitoring and Management

MinIO Console

Access the MinIO console at http://your-server:9001 to:
  • Monitor bucket usage and statistics
  • Manage access keys and users
  • Configure bucket policies and lifecycle rules
  • Browse and download files
  • View server health and performance metrics

Using MinIO Client (mc)

Install and configure the MinIO client for command-line management:

Troubleshooting

If Evolution API cannot connect to MinIO:
  1. Verify MinIO is running: docker ps | grep minio
  2. Check that the endpoint is accessible: curl http://localhost:9000/minio/health/live
  3. If using Docker networks, ensure both containers are on the same network
  4. Verify firewall rules allow traffic on port 9000
If you receive access denied errors:
  1. Verify the access key and secret key are correct
  2. Check bucket permissions in the MinIO console
  3. Ensure the bucket exists: mc ls myminio/evolution
  4. Verify the MinIO user has read/write permissions on the bucket
For SSL/TLS issues:
  1. Verify certificates are correctly mounted in the Docker container
  2. Check certificate file permissions: chmod 644 public.crt and chmod 600 private.key
  3. Ensure certificate paths are correct: /root/.minio/certs/
  4. For self-signed certificates, you may need to add them to your system’s trust store
To improve MinIO performance:
  1. Use SSD storage for the data volume
  2. Increase Docker memory allocation if running locally
  3. Enable erasure coding for large deployments
  4. Use MinIO’s distributed mode for high availability
  5. Monitor disk I/O and network bandwidth

High Availability Setup

For production deployments, consider MinIO’s distributed mode:
Distributed MinIO requires at least 4 drives across multiple servers for high availability.

Security Best Practices

  1. Change default credentials - Never use minioadmin/minioadmin123 in production
  2. Enable SSL/TLS - Always use HTTPS for production deployments
  3. Use strong passwords - Generate secure passwords for root and access keys
  4. Restrict network access - Use firewall rules to limit access to MinIO ports
  5. Regular backups - Implement backup strategies for MinIO data
  6. Monitor access logs - Enable and review MinIO audit logs
  7. Update regularly - Keep MinIO updated to the latest stable version

Next Steps

Amazon S3

Learn about using Amazon S3 instead of self-hosted MinIO

Docker Deployment

Complete guide to deploying Evolution API with Docker