Prendre rendez-vous
  1. Accueil
  2. /
  3. Blog
  4. /
  5. Garage : un object store S3 conçu pour la géo-réplication

Stockage
Infrastructure
Cloud

Garage : un object store S3 conçu pour la géo-réplication

9 mai 2026

11 min de lecture

Sommaire
Plan de l'article
Qu'est-ce que Garage
Architecture : leaderless, Dynamo, CRDT
Modèle de réplication géographique
Compatibilité S3 : ce qui marche, ce qui ne marche pas
IAM Garage vs ACL S3
Déploiement d'un cluster
Comparaison Garage vs MinIO
Cas d'usage pertinents
Licence AGPLv3 : ce que ça implique
Perspectives complémentaires
Sources
Conclusion

MinIO reste le réflexe quand on cherche un object store S3-compatible self-hosted, mais son design vise avant tout la performance dans un même datacenter. Pour des cas d'usage qui imposent une réplication entre plusieurs sites distants, avec de la latence et des liens parfois capricieux, l'approche atteint vite ses limites.

Garage propose une autre stratégie : un object store distribué leaderless, taillé pour la géo-réplication, basé sur les principes du papier Dynamo et sur des CRDT pour gérer les conflits sans coordinateur central. Cet article détaille l'architecture, le déploiement, la compatibilité S3 réelle et les cas où Garage prend l'avantage sur les alternatives plus connues.

Plan de l'article

  • Qu'est-ce que Garage
  • Architecture : leaderless, Dynamo, CRDT
  • Modèle de réplication géographique
  • Compatibilité S3 : ce qui marche, ce qui ne marche pas
  • IAM Garage vs ACL S3
  • Déploiement d'un cluster
  • Comparaison Garage vs MinIO
  • Cas d'usage pertinents
  • Licence AGPLv3 : ce que ça implique

Qu'est-ce que Garage

Garage est un object store S3-compatible open source développé par Deuxfleurs, un collectif français d'hébergement associatif. Le projet existe depuis 2020 et est utilisé en production par Deuxfleurs et plusieurs autres acteurs du fédiverse pour héberger Mastodon, PeerTube, Matrix, Nextcloud.

La dernière version stable au moment de la rédaction est la v2.3.0, publiée le 16 avril 2026. Le code est distribué sous licence AGPLv3.

Le positionnement diffère nettement de MinIO ou Ceph RGW :

  1. Géo-distribution comme cas d'usage prioritaire : Garage est pensé d'emblée pour des clusters dont les nœuds sont répartis sur plusieurs sites physiques distants, avec de la latence (jusqu'à 200 ms) et des liens à 50 Mbps minimum.
  2. Leaderless, sans coordinateur : aucun nœud n'est maître. Le routage des requêtes et la cohérence reposent sur du hashing cohérent et des CRDT, à la manière de Dynamo et Cassandra.
  3. Empreinte minimale : un binaire Rust unique, démarrant sur 1 Go de RAM et 16 Go de disque, capable d'absorber des téraoctets en production.

Architecture : leaderless, Dynamo, CRDT

Garage s'inspire directement du papier Dynamo (Amazon, 2007) et du modèle Cassandra. Trois choix de design structurent le système.

Hashing cohérent pour le routage. Chaque objet est identifié par une clé qui, hashée, désigne les nœuds responsables de son stockage. Aucun service de coordination type ZooKeeper ou etcd. Les nœuds connaissent la topologie du cluster et calculent localement quelle machine doit recevoir l'écriture.

CRDT pour les métadonnées. Les opérations qui modifient les métadonnées (création de bucket, gestion des clés d'accès, listes d'objets) reposent sur des Conflict-Free Replicated Data Types. Deux nœuds qui reçoivent des modifications concurrentes en partition réseau peuvent fusionner leurs états une fois la connexion rétablie, sans conflit ni coordinateur.

Cohérence configurable. Le paramètre replication_factor détermine le nombre de copies (3 recommandé). Les niveaux de cohérence sont ajustables selon les besoins, mais le défaut vise un compromis lecture/écriture qui reste disponible même si certains nœuds sont injoignables.

                 ┌──── Site Toulouse ────┐
                 │  ┌──────┐  ┌──────┐   │
                 │  │ G1   │  │ G2   │   │
                 │  └──────┘  └──────┘   │
                 └───────────┬───────────┘
                             │
        ┌────────────────────┼────────────────────┐
        │                    │                    │
┌───── Site Lyon ─────┐  WAN/VPN  ┌──── Site Bordeaux ───┐
│  ┌──────┐  ┌──────┐ │           │  ┌──────┐  ┌──────┐  │
│  │ G3   │  │ G4   │ │           │  │ G5   │  │ G6   │  │
│  └──────┘  └──────┘ │           │  └──────┘  └──────┘  │
└─────────────────────┘           └──────────────────────┘

         replication_factor = 3, une copie par site

Modèle de réplication géographique

Le cœur de la valeur ajoutée de Garage est sa gestion des zones. Chaque nœud déclare sa zone (typiquement un site physique). Garage répartit les copies de chaque objet de manière à ce que les replication_factor copies soient sur des zones différentes, automatiquement.

Concrètement, avec replication_factor=3 et trois zones (Toulouse / Lyon / Bordeaux), chaque objet existe en trois exemplaires, un par zone. La perte d'une zone entière laisse encore deux copies disponibles. La lecture peut s'effectuer depuis n'importe quelle zone, sans surcharge réseau interzone.

Le système tolère :

  • La perte d'un nœud dans une zone (le second nœud de la zone prend le relais).
  • La perte d'une zone entière (les deux autres zones restent en service).
  • Un partitionnement réseau temporaire : les nœuds isolés continuent de servir les lectures locales et fusionnent les écritures à la reconnexion via les CRDT.

Cette résilience est obtenue sans bascule manuelle ni élection de leader. C'est ce qui distingue Garage des solutions où un site primaire et un site secondaire sont définis explicitement.

Compatibilité S3 : ce qui marche, ce qui ne marche pas

Garage implémente un sous-ensemble de l'API S3, documenté précisément dans la page S3 compatibility status. À jour de la v2.3.0 :

Fonctionnalité S3Statut
Multipart Upload (Create/Complete/Abort/List/UploadPart)Supporté
Presigned URLsSupporté
Bucket Lifecycle (Expiration, AbortIncompleteMultipartUpload)Partiel
Object VersioningNon supporté
Bucket ACLs et PoliciesNon supporté (IAM Garage à la place)
Server-Side Encryption (SSE-S3, SSE-KMS)Non supporté
Object Lock (legal hold, retention)Non supporté
Storage classesNon supporté
API K2V (key/value)Expérimental

Cette liste mérite d'être lue avant toute décision. L'absence de versioning est le point qui élimine Garage pour certains workflows (sauvegarde S3 avec rétention par version, conformité réglementaire qui impose l'immuabilité). L'absence de chiffrement côté serveur est compensée par le chiffrement côté client (la doc renvoie vers un aws s3 cp --sse ou un chiffrement applicatif).

À l'inverse, les fonctionnalités présentes (multipart, presigned URLs, lifecycle minimal) couvrent largement les cas d'usage des applications fédérées : Nextcloud, Mastodon, PeerTube, Matrix fonctionnent sans modification.

IAM Garage vs ACL S3

Là où S3 expose un système ACL/Policies par bucket, Garage propose son propre modèle : une matrice d'autorisation par clé d'accès et par bucket. Trois permissions élémentaires : read, write, owner.

# Créer une clé d'accès
garage key create my-app-key

# Créer un bucket
garage bucket create photos

# Donner les droits à la clé sur le bucket
garage bucket allow --read --write --key my-app-key photos

Pas de notion de policy JSON, pas d'utilisateurs IAM imbriqués, pas de rôles. C'est volontairement minimaliste. Les bucket aliases permettent à plusieurs utilisateurs d'avoir un bucket nommé identiquement sans collision (chaque alias est local à un utilisateur).

Le contrepoint : si une application S3 attend des policies (par exemple un outil de gestion de droits déclaratifs), il faudra adapter le workflow ou utiliser un autre object store.

Déploiement d'un cluster

Garage se déploie soit en binaire natif, soit en container. Voici un docker-compose minimal pour un nœud :

services:
  garage:
    image: dxflrs/garage:v2.3.0
    container_name: garage
    restart: unless-stopped
    network_mode: host
    volumes:
      - ./garage.toml:/etc/garage.toml:ro
      - ./meta:/var/lib/garage/meta
      - ./data:/var/lib/garage/data

Configuration minimale dans garage.toml :

metadata_dir = "/var/lib/garage/meta"
data_dir = "/var/lib/garage/data"
db_engine = "lmdb"

replication_factor = 3
consistency_mode = "consistent"

rpc_bind_addr = "[::]:3901"
rpc_public_addr = "10.0.1.10:3901"
rpc_secret = "<random hex 64 chars>"

[s3_api]
api_bind_addr = "[::]:3900"
s3_region = "garage"
root_domain = ".s3.garage.example.com"

[s3_web]
bind_addr = "[::]:3902"
root_domain = ".web.garage.example.com"
index = "index.html"

[admin]
api_bind_addr = "[::]:3903"
admin_token = "<random hex 32 chars>"

Une fois trois nœuds démarrés, on les relie et on assigne les zones :

# Sur le noeud 1, récupérer son ID
garage node id

# Sur le noeud 2 et 3, les connecter au noeud 1
garage node connect <node1-id>@10.0.1.10:3901

# Définir le layout : 3 noeuds, 3 zones, 100 Go par noeud
garage layout assign <node1-id> -z toulouse -c 100G -t toulouse-1
garage layout assign <node2-id> -z lyon     -c 100G -t lyon-1
garage layout assign <node3-id> -z bordeaux -c 100G -t bordeaux-1

# Appliquer le layout
garage layout show
garage layout apply --version 1

Le cluster est opérationnel. L'endpoint S3 est disponible sur le port 3900 de chaque nœud.

Comparaison Garage vs MinIO

Les deux projets sont S3-compatibles et open source, mais leurs cibles diffèrent.

CritèreGarageMinIO
Cible principaleGéo-distribution multi-DCPerformance dans un DC
ArchitectureLeaderless, CRDT, DynamoErasure coding, distribution synchrone
Latence WAN toléréeJusqu'à 200 msFaible (intra-DC)
Object versioningNonOui
Server-side encryptionNonOui (SSE-S3, SSE-KMS, SSE-C)
Policies S3Non (IAM propre)Oui (compatibles AWS)
Erasure codingNon (réplication entière)Oui
Empreinte mémoire~1 Go par nœudVariable, plus exigeant
LicenceAGPLv3AGPLv3 (commercial alt.)
Cas d'usage typeFederated apps multi-siteS3 datacenter, big data, AI/ML

Pour un usage multi-DC, Garage est plus simple à opérer et plus tolérant aux liens réseau imparfaits. Pour un usage intensif en lecture/écriture dans un même rack, MinIO offre plus de fonctionnalités et une meilleure densité grâce à l'erasure coding.

Cas d'usage pertinents

Garage prend tout son sens dans plusieurs contextes.

Stockage souverain multi-sites

Pour une organisation qui dispose de plusieurs salles ou datacenters distribués sur le territoire et qui veut un object store S3-compatible sans dépendre d'un cloud provider, Garage est la voie la plus simple. La géo-réplication native évite de construire une couche au-dessus d'un MinIO + DNS failover ou d'un Ceph RGW multi-site.

Backend pour applications fédérées

Mastodon, PeerTube, Matrix Synapse, Nextcloud fonctionnent nativement sur Garage. Pour un acteur qui héberge ces services en interne ou pour ses clients, Garage offre un stockage durable sans surdimensionnement.

Backups 3-2-1 chez plusieurs hébergeurs

Le scénario classique : un cluster Garage à trois nœuds, un par hébergeur (par exemple Asolta, Scaleway, OVH), avec replication_factor=3 et une zone par hébergeur. Chaque écriture est répliquée chez les trois fournisseurs simultanément. La perte d'un fournisseur entier n'entraîne aucune perte de donnée et le service reste disponible. Combiné à Restic ou rclone côté client, on obtient une stratégie de sauvegarde géographiquement diversifiée sans verrou propriétaire.

Object store pour hébergement web mutualisé

Pour un hébergeur qui veut proposer un endpoint S3 à ses clients pour leurs assets, leurs backups WordPress, ou leurs CDN d'origine, Garage présente l'avantage d'une opération simple. Le multi-tenancy via clés d'accès et bucket aliases couvre l'isolation des clients sans complexité IAM.

Licence AGPLv3 : ce que ça implique

Garage est sous AGPLv3, licence copyleft à propagation réseau. Implications concrètes :

  • Usage interne sans modification : aucune obligation, aucun engagement.
  • Modification de Garage : si vous modifiez le code et que vous l'utilisez pour fournir un service accessible en réseau à des tiers (clients, utilisateurs), vous devez publier vos modifications sous AGPLv3.
  • Inclusion dans un produit propriétaire : à éviter sans audit légal préalable.

Pour la majorité des déploiements (usage interne, hébergeur qui n'a pas modifié le code), l'AGPLv3 ne change rien à l'opération quotidienne. Pour un projet qui envisage de patcher Garage et de le commercialiser sous une autre forme, c'est une étude juridique à mener.

Perspectives complémentaires

  • MinIO sur Kubernetes : object store S3-compatible
  • Stratégie de sauvegarde 3-2-1
  • Lifecycle S3 et archivage
  • Sauvegardes Restic vers MinIO via Rclone
  • Cloud souverain : enjeux et options

Sources

  • Garage HQ (site officiel Deuxfleurs) présentation, architecture
  • Documentation Garage, déploiement, configuration, opération
  • S3 compatibility status, liste exhaustive des endpoints supportés
  • Forge Deuxfleurs (releases) version v2.3.0, changelog
  • Dépôt miroir GitHub, code source

Conclusion

Garage occupe un créneau bien défini : object store S3-compatible leaderless et géo-distribué, là où la majorité des alternatives sont conçues pour un seul datacenter. Le compromis assumé est une compatibilité S3 partielle (pas de versioning, pas de SSE, pas de policies) en échange d'une opération radicalement plus simple sur des clusters multi-sites. Pour des charges qui réclament toute la richesse de l'API S3 ou de très hautes performances dans un même rack, MinIO ou Ceph RGW restent les bonnes options. Pour de la résilience géographique sans coordinateur ni complexité opérationnelle, Garage est une réponse difficile à battre.

Besoin d'aide sur ce sujet ?

Notre équipe d'experts est là pour vous accompagner dans vos projets d'infrastructure et d'infogérance.

Contactez-nous

Articles similaires

Stockage objet S3 : lifecycle policies et stratégies d'archivage
Stockage
Cloud
Infrastructure

Stockage objet S3 : lifecycle policies et stratégies d'archivage

Maîtrisez les lifecycle policies S3 pour automatiser l'archivage, optimiser les coûts de stockage et garantir la conformité RGPD de vos données.

26 févr. 2026

Lire plus

Stratégie de migration cloud : les 7R et les pièges à éviter
Cloud
Infrastructure
Entreprise

Stratégie de migration cloud : les 7R et les pièges à éviter

Réussir sa migration cloud avec la méthode des 7R de Gartner. Stratégies, planning, gestion des coûts et retours d'expérience pour une transition maîtrisée.

26 févr. 2026

Lire plus

OpenStack : déployer un cloud privé open-source en 2026
Cloud
Infrastructure

OpenStack : déployer un cloud privé open-source en 2026

Guide complet pour déployer OpenStack en cloud privé. Services core, déploiement Kolla-Ansible, cas d'usage et dimensionnement pour votre infrastructure.

25 févr. 2026

Lire plus


SHPV, votre partenaire de confiance en infrastructure et infogérance informatique en France.

SHPV
Prendre rendez-vousNous contacter
Expertise
InfrastructureDatacenterInfogéranceCloudHébergementTransit IP
Légales
Conditions Générales de VenteCPS - Contrat de ServicesCPS - Hébergement CloudCPS - Microsoft 365Accord sous-traitance RGPDTarifs interventions

SHPV © 2026 - Tous droits réservés

Mentions légalesPolitiques de confidentialité
SHPV FRANCE - SAS au capital de 16 000 € - 52 Rue Romain Rolland, 71230 Saint-Vallier - SIRET n°80886287400035 - R.C.S. Chalon-sur-Saône. Par téléphone 09 72 310 818 - Email: support@shpv.fr