Minio heberge mon S3 a la maison (et j ai tue mon abonnement AWS)


Vous utilisez S3 pour stocker des fichiers, des backups, des logs ? Moi aussi. Mais payer AWS chaque mois juste pour entreposer des sauvegardes, ça commence à faire mal. Heureusement, Minio existe. C’est un serveur de stockage objet compatible S3 qui tourne sur votre propre matos, chez vous.

Qu’est-ce que Minio ?

Minio, c’est un serveur de stockage objet écrit en Go. Il parle le même protocole qu’Amazon S3 : vos applis qui utilisent le SDK AWS S3 peuvent pointer vers votre Minio sans changer une ligne de code. Mêmes buckets, mêmes clés d’accès, mêmes ACL.

En clair : vous prenez tout ce qui est dans le cloud AWS S3 et vous le mettez chez vous.

Pourquoi c’est utile dans un homelab

Les cas d’usage sont nombreux :

  • Backups : vos sauvegardes vont directement sur Minio au lieu de S3
  • Stockage d’images : vos applis web uploadent leurs médias sur Minio
  • Logs : centraliser les logs de vos containers
  • Terraform state : stocker les états Terraform en remote
  • Docker registry backups : sauvegarder vos images Docker
  • Sync entre sites : Minio supporte le bucket replication vers un autre Minio

L’installation : un docker-compose et c’est plié

version: '3'
services:
  minio:
    image: minio/minio
    ports:
      - 9000:9000   # API S3
      - 9001:9001   # Console web
    environment:
      MINIO_ROOT_USER: admin
      MINIO_ROOT_PASSWORD: votre-mot-de-passe
    volumes:
      - ./data:/data
    command: server /data --console-address :9001

On lance, on ouvre le port 9001, et on a une interface web pour créer des buckets et gérer les clés d’accès.

Compatible S3 : vraiment ?

Oui. Vraiment. Si votre app utilise boto3 (Python), aws-sdk (JS), ou la CLI aws s3, il suffit de changer l’endpoint :

# Avant (AWS)
aws s3 ls s3://mon-bucket

# Après (Minio)
aws s3 ls s3://mon-bucket --endpoint-url http://192.168.1.X:9000

Même chose en Python :

import boto3
client = boto3.client('s3',
    endpoint_url='http://localhost:9000',
    aws_access_key_id='admin',
    aws_secret_access_key='votre-mot-de-passe'
)

Zéro changement de code, zéro dépendance externe.

Minio derrière nginx avec SSL

Pour exposer Minio sur Internet (par exemple pour des backups depuis l’extérieur), on le met derrière nginx avec un certificat Let’s Encrypt :

server {
    listen 443 ssl;
    server_name s3.votredomaine.com;

    location / {
        proxy_pass http://127.0.0.1:9000;
        proxy_set_header Host $host;
    }
}

SSL, auth, et le tour est joué. Votre S3 privé est accessible depuis n’importe où.

Ce que j’en fais concrètement

  • Backups automatiques des bases de données (MariaDB, PostgreSQL) vers Minio via cron
  • Stockage des uploads de mes apps web (plus de fichiers sur le disque local)
  • Sauvegarde des configs Docker et des volumes importants
  • Sync vers un second disque pour la redondance

Le tout tourne depuis des mois sans le moindre problème.

Les limites

Minio n’est pas parfait. Le chiffrement côté serveur (SSE-KMS) nécessite un vault externe. La réplication multi-sites demande une configuration avancée. Et en écriture intensive, les performances dépendent de votre réseau et de vos disques.

Mais pour 99% des usages d’un homelab ou d’une petite PME, Minio est parfait. Gratuit, ouvert, compatible, et increvable.