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.