Guide de déploiement

Héberger Garage sur un VPS : votre stockage objet compatible S3

Déployer sur un VPS Cloud →

Self-hosting6 min de lecture

Héberger Garage sur un VPS : votre stockage objet compatible S3

Vous voulez une adresse S3 à vous — pour vos sauvegardes restic, les fichiers d'une application, ou l'origine d'un site statique — sans ouvrir de compte chez un fournisseur de cloud. Garage, développé par le collectif Deuxfleurs, fait exactement cela : un seul binaire Rust qui expose une API S3, assez sobre pour cohabiter avec le reste de votre serveur. Ce guide part de zéro et va jusqu'au premier fichier déposé.

Ce que Garage est, et ce qu'il n'est pas

Garage est un magasin d'objets compatible S3 pensé pour les déploiements auto-hébergés de petite taille, éventuellement répartis sur plusieurs sites. Il tient dans un conteneur, n'a pas besoin d'un serveur de base de données à côté, et sur un déploiement mono-nœud il consomme quelques mégaoctets de mémoire au repos.

Ce qu'il n'est pas, il faut le dire tout de suite : Garage n'a pas de console web. L'administration passe par l'outil en ligne de commande garage et par une interface d'administration HTTP. Ce n'est pas une fonction oubliée, c'est un choix : le service reste petit et sa surface d'exploitation étroite. Des projets communautaires proposent une interface dans le navigateur par-dessus l'interface d'administration si vous y tenez.

Si vous cherchiez ce point précis parce que MinIO a retiré sa console de l'édition communautaire en 2025 — puis cessé de publier ses images Docker communautaires — la réponse honnête est que Garage ne vous rendra pas cette console. Il vous rend en revanche un projet dont la licence AGPLv3 ne réserve aucune fonction à une édition payante.

Préparer le serveur

Garage se déploie en conteneur. Sur un VPS Debian ou Ubuntu à jour, l'essentiel est d'avoir Docker et le plugin Compose :

curl -fsSL https://get.docker.com | sh

Côté dimensionnement, Garage lui-même est frugal : c'est le volume de données que vous stockez qui décide, pas le service. Un VPS d'entrée de gamme suffit à faire tourner le daemon ; prévoyez le disque en fonction de ce que vous comptez y déposer, et gardez à l'esprit qu'un nœud unique conserve une seule copie de vos objets.

La configuration minimale

Garage lit un fichier garage.toml. Pour un nœud unique, l'essentiel tient en quelques lignes — notez le replication_factor = 1, qui dit explicitement qu'il n'y a pas de réplication :

metadata_dir = "/var/lib/garage/meta"
data_dir = "/var/lib/garage/data"
db_engine = "sqlite"
replication_factor = 1

rpc_bind_addr = "[::]:3901"
rpc_public_addr = "127.0.0.1:3901"
rpc_secret = "<64 caractères hexadécimaux>"

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

[admin]
api_bind_addr = "[::]:3903"
admin_token = "<jeton d'administration>"

Le rpc_secret doit faire 32 octets, soit 64 caractères hexadécimaux : openssl rand -hex 32.

Démarrer, et obtenir ses identifiants S3

Depuis la version 2.3, Garage sait monter une grappe d'un seul nœud et créer son premier compartiment tout seul, à partir de variables d'environnement. C'est ce qui évite la séquence manuelle layout assign / layout apply / bucket create / key create :

services:
  garage:
    image: dxflrs/garage:v2.3.0
    restart: unless-stopped
    command: ["/garage", "-c", "/etc/garage/garage.toml", "server", "--single-node", "--default-bucket"]
    environment:
      GARAGE_DEFAULT_BUCKET: mon-compartiment
      GARAGE_DEFAULT_ACCESS_KEY: GK...
      GARAGE_DEFAULT_SECRET_KEY: ...
    ports:
      - "127.0.0.1:3900:3900"
    volumes:
      - ./config:/etc/garage
      - garage-meta:/var/lib/garage/meta
      - garage-data:/var/lib/garage/data

Deux pièges valent d'être signalés, parce qu'ils coûtent une demi-heure chacun. L'image est distroless : elle n'a pas de shell, et son entrypoint est vide — la commande doit donc nommer le binaire en chemin absolu (/garage) et le fichier de configuration (-c), faute de quoi le conteneur boucle sur No such file or directory. Et la clé d'accès S3 doit avoir la forme attendue par Garage : le préfixe GK suivi de 30 caractères hexadécimaux.

Vérifier que ça marche

Un appel anonyme sur l'API S3 doit répondre 403, avec le message Garage does not support anonymous access yet. C'est le bon signe : le service est vivant et refuse une requête non signée.

curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:3900/
# 403 → l'API répond

L'interface d'administration, elle, répond 200 avec le jeton :

curl -H "Authorization: Bearer $ADMIN_TOKEN" http://127.0.0.1:3903/v2/ListBuckets

À partir de là, n'importe quel client S3 fonctionne : aws --endpoint-url, mc, rclone, ou directement restic pour vos sauvegardes.

Ce qu'il faut garder en tête

Un nœud unique n'est pas de la redondance. Garage sait répliquer entre plusieurs machines, éventuellement sur des sites différents — c'est même sa raison d'être. Mais tant que vous n'avez qu'un nœud, vos objets existent en un seul exemplaire, sur un seul disque. Gardez la discipline de sauvegarde que vous auriez de toute façon.

Exposez l'API derrière un domaine et du TLS, pas sur une IP nue : publiez le port sur la boucle locale et laissez nginx faire le proxy et le certificat. C'est ce que fait l'installation en un clic du Marketplace.

La compatibilité S3 porte sur la surface courante, pas sur chaque extension propre à AWS. Les clients, bibliothèques et outils de sauvegarde standard fonctionnent sans modification ; si vous dépendez d'un appel inhabituel, vérifiez-le dans la documentation du projet avant de migrer.

Garage en un clic sur votre VPS

Le Marketplace ServOrbit installe Garage, crée son compartiment et vos identifiants S3 au premier démarrage. Vous n'avez plus qu'à brancher votre client.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou écrivez à notre équipe — support en français, anglais et arabe.