Aller au contenu
medium

MinIO : stockage objet S3-compatible

14 min de lecture

Logo MinIO

MinIO est un serveur de stockage objet haute performance, compatible avec l’API Amazon S3. Il permet de stocker des fichiers (objets) dans des buckets, accessibles via HTTP. Ce guide vous accompagne de l’installation à la configuration avancée.

MinIO est un système de stockage objet conçu pour être :

  • Compatible S3 : toute application utilisant l’API Amazon S3 fonctionne avec MinIO
  • Performant : écrit en Go, optimisé pour du matériel moderne (NVMe, 100GbE)
  • Simple : un seul binaire, déploiement en quelques minutes
  • Sécurisé : chiffrement, TLS, gestion fine des accès

Les cas d’usage typiques incluent :

UsageDescription
Backend TerraformStocker les états .tfstate de manière centralisée
SauvegardesCible S3 pour Restic, Velero, Duplicati
Artefacts CI/CDCache de builds, images Docker, packages
Data LakeStockage de données brutes pour analytics

Si vous démarrez un nouveau projet, considérez ces alternatives :

SolutionTypeLicencePoints forts
AIStor FreeOfficielle MinIOPropriétaire gratuitSupport officiel, standalone
AIStor EnterpriseOfficielle MinIOCommercialFonctionnalités avancées, SLA
Ceph RGWOpen sourceLGPLÉcosystème mature, object + block
SeaweedFSOpen sourceApache 2.0Simple, performant, actif
GarageOpen sourceAGPL v3Léger, Rust, axé simplicité
RustFSFork MinIOAGPL v3Fork communautaire récent

Pour la majorité des usages (sauvegardes, états Terraform), MinIO reste fonctionnel. Pour des déploiements critiques, évaluez Ceph ou SeaweedFS.

Avant l’installation, comprenez les concepts fondamentaux :

  • Bucket : conteneur logique pour regrouper des objets (similaire à un répertoire racine)
  • Objet : fichier stocké avec ses métadonnées (nom, taille, type MIME, version)

MinIO protège les données via l’Erasure Coding (codage par effacement) :

  • Les données sont divisées en blocs de données et blocs de parité
  • Permet de reconstruire les données en cas de perte de disques
  • Configuration typique : 4 données + 4 parité = 8 disques minimum

Pour la haute disponibilité, MinIO supporte le mode distribué :

  • Plusieurs nœuds forment un cluster
  • Réplication automatique des données
  • Tolérance aux pannes de nœuds

Trois méthodes sont disponibles. Choisissez selon votre contexte.

La méthode recommandée depuis le passage en mode maintenance. Nécessite Go 1.24+.

  1. Vérifier Go

    Fenêtre de terminal
    go version
    # go version go1.25.6 linux/amd64

    Si Go n’est pas installé, utilisez votre gestionnaire de paquets ou mise.

  2. Installer MinIO

    Fenêtre de terminal
    go install github.com/minio/minio@latest

    Le binaire est installé dans ~/go/bin/minio.

  3. Vérifier l’installation

    Fenêtre de terminal
    ~/go/bin/minio --version
    # minio version DEVELOPMENT.GOGET
    # Runtime: go1.25.6 linux/amd64
    # License: GNU AGPLv3
  4. Ajouter au PATH (optionnel)

    Fenêtre de terminal
    echo 'export PATH="$HOME/go/bin:$PATH"' >> ~/.bashrc
    source ~/.bashrc

Une fois MinIO installé, configurez et démarrez le serveur.

  1. Créer le répertoire de données

    Fenêtre de terminal
    sudo mkdir -p /data/minio
    sudo chown $USER:$USER /data/minio
  2. Définir les identifiants

    Les variables MINIO_ROOT_USER et MINIO_ROOT_PASSWORD définissent le compte administrateur :

    Fenêtre de terminal
    export MINIO_ROOT_USER=admin
    export MINIO_ROOT_PASSWORD=motdepasse123 # Minimum 8 caractères
  3. Démarrer le serveur

    Fenêtre de terminal
    minio server /data/minio --console-address ":9001"

    Le serveur écoute sur :

    • Port 9000 : API S3
    • Port 9001 : Console web
  4. Vérifier le fonctionnement

    Fenêtre de terminal
    curl http://127.0.0.1:9000/minio/health/live
    # (réponse vide = OK)
  5. Accéder à la console

    Ouvrez http://127.0.0.1:9001 dans votre navigateur. Connectez-vous avec les identifiants définis.

Pour un démarrage automatique, créez un fichier systemd :

Fenêtre de terminal
sudo tee /etc/systemd/system/minio.service > /dev/null << 'EOF'
[Unit]
Description=MinIO Object Storage
After=network.target
[Service]
User=minio
Group=minio
Environment="MINIO_ROOT_USER=admin"
Environment="MINIO_ROOT_PASSWORD=motdepasse123"
ExecStart=/usr/local/bin/minio server /data/minio --console-address ":9001"
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now minio

mc (MinIO Client) permet de gérer MinIO en ligne de commande.

Fenêtre de terminal
go install github.com/minio/mc@latest

Vérifiez l’installation :

Fenêtre de terminal
mc --version
# mc version DEVELOPMENT.GOGET
# Runtime: go1.25.6 linux/amd64

Un alias associe un nom à un serveur MinIO :

Fenêtre de terminal
mc alias set local http://127.0.0.1:9000 admin motdepasse123
# Added `local` successfully.

Listez les alias configurés :

Fenêtre de terminal
mc alias list

Créez un bucket :

Fenêtre de terminal
mc mb local/mon-bucket
# Bucket created successfully `local/mon-bucket`.

Listez les buckets :

Fenêtre de terminal
mc ls local/
# [2026-02-10 09:45:18 CET] 0B mon-bucket/

Uploadez un fichier :

Fenêtre de terminal
echo "Contenu de test" > test.txt
mc cp test.txt local/mon-bucket/
# test.txt: 16 B / 16 B

Listez les objets d’un bucket :

Fenêtre de terminal
mc ls local/mon-bucket/
# [2026-02-10 10:00:00 CET] 16B STANDARD test.txt

Téléchargez un objet :

Fenêtre de terminal
mc cp local/mon-bucket/test.txt downloaded.txt
cat downloaded.txt
# Contenu de test

Supprimez un objet :

Fenêtre de terminal
mc rm local/mon-bucket/test.txt

MinIO supporte une gestion fine des accès via des utilisateurs et des politiques.

Fenêtre de terminal
mc admin user add local alice motdepasse456
# Added user `alice` successfully.

Listez les utilisateurs :

Fenêtre de terminal
mc admin user list local
# enabled alice

Les politiques prédéfinies incluent :

PolitiquePermissions
readonlyLecture seule sur tous les buckets
readwriteLecture et écriture
writeonlyÉcriture seule
diagnosticsAccès aux métriques

Attachez une politique à un utilisateur :

Fenêtre de terminal
mc admin policy attach local readwrite --user alice
# Attached Policies: [readwrite]
# To User: alice

Vérifiez les politiques d’un utilisateur :

Fenêtre de terminal
mc admin user info local alice
# AccessKey: alice
# Status: enabled
# PolicyName: readwrite

Le versioning conserve l’historique des modifications d’un objet.

Activez le versioning sur un bucket :

Fenêtre de terminal
mc version enable local/mon-bucket
# local/mon-bucket versioning is enabled

Vérifiez le statut :

Fenêtre de terminal
mc version info local/mon-bucket
# local/mon-bucket versioning is enabled

Chaque mise à jour d’un objet crée une nouvelle version. Listez les versions :

Fenêtre de terminal
mc ls --versions local/mon-bucket/

Pour sécuriser les communications, activez TLS.

  1. Générer les certificats

    Avec mkcert pour un environnement local :

    Fenêtre de terminal
    mkcert -key-file private.key -cert-file public.crt minio.local
  2. Placer les certificats

    Fenêtre de terminal
    mkdir -p ~/.minio/certs
    mv private.key public.crt ~/.minio/certs/
  3. Redémarrer MinIO

    MinIO détecte automatiquement les certificats au démarrage :

    Fenêtre de terminal
    minio server /data/minio --console-address ":9001"
  4. Vérifier

    Accédez à https://minio.local:9001. Le navigateur doit afficher une connexion sécurisée.

Stockez les états Terraform dans MinIO :

terraform {
backend "s3" {
endpoints = {
s3 = "http://127.0.0.1:9000"
}
bucket = "terraform-states"
key = "mon-projet/terraform.tfstate"
region = "main"
access_key = "admin"
secret_key = "motdepasse123"
skip_credentials_validation = true
skip_metadata_api_check = true
skip_region_validation = true
skip_requesting_account_id = true
use_path_style = true
}
}

Créez le bucket au préalable :

Fenêtre de terminal
mc mb local/terraform-states

Configurez Restic pour sauvegarder vers MinIO :

Fenêtre de terminal
export AWS_ACCESS_KEY_ID=admin
export AWS_SECRET_ACCESS_KEY=motdepasse123
restic -r s3:http://127.0.0.1:9000/backups init
restic -r s3:http://127.0.0.1:9000/backups backup /home/user/documents

Obtenez des détails sur l’état du serveur :

Fenêtre de terminal
mc admin info local
# ● 127.0.0.1:9000
# Uptime: 1 hour
# Version: DEVELOPMENT.GOGET
# Network: 1/1 OK
# Drives: 1/1 OK

Vérifiez que le port 9000 n’est pas déjà utilisé :

Fenêtre de terminal
ss -tlnp | grep 9000

Vérifiez les permissions sur le répertoire de données :

Fenêtre de terminal
ls -la /data/minio

Vérifiez que l’alias mc utilise les bons identifiants :

Fenêtre de terminal
mc alias list local

Recréez l’alias si nécessaire :

Fenêtre de terminal
mc alias set local http://127.0.0.1:9000 admin motdepasse123

Testez la connectivité réseau :

Fenêtre de terminal
curl -v http://127.0.0.1:9000/minio/health/live

Vérifiez les logs du serveur pour identifier l’erreur.

  • MinIO est un serveur de stockage objet compatible S3, simple et performant
  • Depuis fin 2025, l’édition Community est en mode maintenance (source uniquement)
  • Pour de nouveaux projets critiques, évaluez AIStor, Ceph ou SeaweedFS
  • mc est le client CLI pour gérer buckets, objets et utilisateurs
  • Les variables MINIO_ROOT_USER et MINIO_ROOT_PASSWORD définissent l’administrateur
  • Le versioning conserve l’historique des objets
  • MinIO s’intègre comme backend Terraform ou cible de sauvegarde

Sauvegardes avec Restic

Configurez des sauvegardes incrémentales vers MinIO. Lire le guide

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.