Un stockage S3 en local – MinIO

, ,
minio s3 local

Dans un contexte où les applications web modernes manipulent des volumes importants de données (images, vidéos, backups, logs…), disposer d’un stockage objet performant, souverain et facile à intégrer devient stratégique. Si Amazon S3 reste une référence, il existe aujourd’hui des alternatives open source, auto-hébergées et compatibles S3 : c’est le cas de MinIO.

Dans cet article, nous allons explorer comment déployer MinIO dans un environnement Docker, le mettre derrière Traefik v3 pour le routage et le chiffrement TLS automatique, et l’exploiter avec Supabase, une plateforme open source d’API backend qui supporte les stockages S3 pour le service de fichiers.


Pourquoi choisir MinIO ?

MinIO est un serveur de stockage objet compatible avec l’API S3 d’AWS. Il se distingue par :

  • une architecture légère,
  • une installation rapide via Docker,
  • une compatibilité totale avec les clients S3 (WinScp, AWS CLI, rclone, Supabase…),
  • un chiffrement natif,
  • une haute performance grâce à l’optimisation en Go.

Architecture cible

Notre objectif est de mettre en place :

  • un conteneur MinIO sécurisé,
  • exposé via Traefik v3,
  • interfacé avec Supabase pour le service de stockage.
[client web/mobile] → [Traefik v3] → [MinIO] ← [Supabase Storage Backend]

Pré-requis

  • Ubuntu 24.04 LTS (mais aussi Debian, RHEL, …)
  • Docker + Docker Compose
  • Traefik v3
  • DNS configuré pour minio.exemple.com
  • Supabase auto-hébergé (ou projet Supabase cloud)

1. Créer les Docker secrets

echo "minioadmin" | docker secret create minio_access_key -
echo "minioadmin123" | docker secret create minio_secret_key -

⚠️ En production, utilisez bien sûr des mots de passe complexe


2. Fichier docker-compose.yml

services:
  minio:
    image: minio/minio:latest
    command: server /data --console-address ":9001"
    ports:
      - "9000:9000"
      - "9001:9001"
    networks:
      - traefik
    secrets:
      - minio_access_key
      - minio_secret_key
    environment:
      MINIO_ROOT_USER_FILE: /run/secrets/minio_access_key
      MINIO_ROOT_PASSWORD_FILE: /run/secrets/minio_secret_key
    volumes:
      - minio_data:/data
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.minio.rule=Host(`minio.exemple.com`)"
      - "traefik.http.routers.minio.entrypoints=websecure"
      - "traefik.http.routers.minio.tls.certresolver=letsencrypt"
      - "traefik.http.services.minio.loadbalancer.server.port=9000"
      # Console MinIO (port 9001)      - "traefik.http.routers.minio-console.rule=Host(`minio-console.exemple.com`)"      - "traefik.http.routers.minio-console.service=minio-console"
      - "traefik.http.services.minio-console.loadbalancer.server.port=9001"
networks:
  traefik:
    external: true

secrets:
  minio_access_key:
    external: true
  minio_secret_key:
    external: true

volumes:
  minio_data:

3. Configuration de Traefik v3 (extrait traefik.yml)

entryPoints:
  websecure:
    address: ":443"

certificatesResolvers:
  letsencrypt:
    acme:
      email: admin@exemple.com
      storage: /letsencrypt/acme.json
      httpChallenge:
        entryPoint: web

4. Lien avec Supabase

Supabase propose un service Storage qui utilise nativement un backend compatible S3. Vous pouvez ainsi connecter votre MinIO auto-hébergé en définissant les variables d’environnement suivantes dans Supabase :

STORAGE_BACKEND=s3
STORAGE_S3_BUCKET=public
STORAGE_S3_ENDPOINT=minio.exemple.com
STORAGE_S3_FORCE_PATH_STYLE=true
STORAGE_S3_REGION=eu-west-3
STORAGE_S3_ACCESS_KEY_ID_FILE=/run/secrets/minio_access_key
STORAGE_S3_SECRET_ACCESS_KEY_FILE=/run/secrets/minio_secret_key

⚠️ En production, utilisez bien sûr des mots de passe complexe


5. Sécurisation et bonnes pratiques

  • Utilisez HTTPS avec Traefik et Let’s Encrypt (inclus ci-dessus)
  • Utilisez des secrets Docker ou un vault (Hashicorp, AWS Secrets Manager…)
  • Activez les logs d’audit dans MinIO
  • Définissez des politiques IAM précises sur les buckets et objets
  • Monitorer l’activité avec Prometheus/Grafana

Avantages de l’intégration Supabase + MinIO

  • Stockage entièrement souverain
  • Compatible avec les clients S3 existants
  • Intégration fluide dans les APIs Supabase (auth, storage, edge functions)
  • Déploiement rapide dans un cluster Docker ou Kubernetes
  • Évolutif horizontalement via la configuration distributed de MinIO

Conclusion

Intégrer MinIO dans un environnement DevOps moderne avec Docker, Traefik et Supabase offre une solution robuste, performante et souveraine de stockage objet. MinIO devient ainsi un composant clé dans la construction d’infrastructures cloud-native résilientes, interopérables et compatibles avec les standards S3.


Liens externes


Liens internes