
Introduction #
Garage est une solution de stockage objet S3 open-source, légère et géo-distribuée, parfaite pour l’auto-hébergement. Dans ce guide, nous allons déployer une instance Garage autonome (single-node) avec Docker Compose, accessible via HTTPS avec Traefik comme reverse proxy.
Ce guide est particulièrement utile si vous souhaitez :
- Héberger vos propres backups Proxmox sur du stockage S3,
- En complément, créer un stockage objet compatible S3 pour vos différentes applications/services,
- Avoir une alternative auto-hébergée à AWS S3 ou MinIO.
Note : Cet article couvre un déploiement single-node. Un prochain article traitera du déploiement en cluster multi-nœuds pour la haute disponibilité.
Architecture réseau #
Ma configuration réseau est la suivante :
- VLAN 10 (10.10.10.x) : Hôtes Proxmox PVE & PBS (clients)
- VLAN 20 (10.10.20.21) : Serveur Garage (LXC-Storage)
- VLAN 99 (10.99.99.10) : Serveur Traefik (LXC-Frontend)
Le réseau est piloté via mon routeur Unifi Dream Router. Pas de Software-Defined Network (SDN) Proxmox. Le VLAN 99 est en plus un réseau isolé (Option Unifi Network).
Le reverse-proxy Traefik gère la terminaison TLS et proxyfie les requêtes HTTPS vers Garage en HTTP.
Prérequis #
- Administration de serveurs sous Linux,
- Docker et Docker Compose installés,
- Un reverse proxy Traefik configuré (ou autre) et pleinement fonctionnel,
- Un certificat SSL valide (ici, configuration entièrement déléguée à Traefik),
- Un nom de domaine (ici,
example.compour la démonstation) et maîtriser la résolution DNS, - Des règles de pare-feu appropriées entre VLANs.
Déploiement sous Docker #
1. Structure des répertoires #
Créez la structure suivante sur votre serveur de stockage :
mkdir -pv /opt/docker/garage-stack/garage/{config,meta,data}
cd /opt/docker/garage-stack
Pensez à donner les droits adéquats à votre dossier :
sudo chown -Rf 1000:1000 /opt/docker/garage-stack
1000:1000étant généralement l’UID et le GID de votre utilisateur par défaut. À vérifier suivant votre distribution Linux. Sinon remplacer1000par votre nom d’utilisateur.
2. Docker Compose #
Créez le fichier /opt/docker/garage-stack/docker-compose.yml :
# /opt/docker/garage-stack/docker-compose.yml
---
services:
garage:
container_name: garage
image: dxflrs/garage:v2.1.0
hostname: garage
restart: unless-stopped
ports:
- 3900:3900 # API S3
- 3901:3901 # RPC
- 3902:3902 # Web S3 (sites statiques)
- 3903:3903 # Admin API
volumes:
- ./garage/config/garage.toml:/etc/garage.toml
- ./garage/meta:/var/lib/garage/meta
- ./garage/data:/var/lib/garage/data
environment:
- RUST_LOG=garage=info # garage=info | garage=debug | garage=trace
networks:
- storage
garage-webui:
container_name: garage-webui
image: khairul169/garage-webui:latest
restart: unless-stopped
ports:
- 3909:3909
volumes:
- ./config/garage.toml:/etc/garage.toml:ro
environment:
API_BASE_URL: "http://10.10.20.21:3903"
S3_ENDPOINT_URL: "http://10.10.20.21:3900"
AUTH_USER_PASS: "${AUTH_USER_PASS}"
networks:
- storage
networks:
storage:
name: storage
driver: bridge
Pensez à remplacer l’adresse IP par la vôtre.
3. Configuration .env #
Créez le fichier /opt/docker/garage-stack/.env :
# /opt/docker/garage-stack/.env
COMPOSE_PROJECT_NAME=garage
# GARAGE
## openssl rand -hex 32
RPC_SECRET = "0fb36c61be25389e1a3c39091d45d67c3515d1c17bb73c1d38d9eee9589719db"
ADMIN_TOKEN = "b0906fded75ce3b9a7ec08b4205e8b384e716237d69d23976597f16c1e53556d"
METRICS_TOKEN = "7e023357fee8bd346e7f2c3d8d092708602375691e00183e978642445eab5b83"
# GARAGE-WEBUI
## https://bcrypt-generator.com/
## password1234 - $2a$12$ptIuyf1CosUQpixdEBvNA.lIpkZ0mb6WtSl8qXXBb8y.KybmS4JEa => Pensez à échapper le $ qui précède une lettre en le doublant $$ - Erreur Docker Compose
AUTH_USER_PASS="myuser:$2a$12$$ptIuyf1CosUQpixdEBvNA.lIpkZ0mb6WtSl8qXXBb8y.KybmS4JEa"
Pensez à échapper le $ qui précède une lettre en le doublant $$ - Erreur Docker Compose
Référez-vous à cette section pour des infos supplémentaires : Sécurité > Authentification renforcée
4. Configuration Garage #
Créez le fichier /opt/docker/garage-stack/garage/config/garage.toml :
# /opt/docker/garage-stack/garage/config/garage.toml
metadata_dir = "/var/lib/garage/meta"
data_dir = "/var/lib/garage/data"
db_engine = "sqlite"
metadata_auto_snapshot_interval = "6h"
replication_factor = 1
compression_level = 2
rpc_bind_addr = "0.0.0.0:3901"
rpc_public_addr = "10.10.20.21:3901"
rpc_secret = "CHANGEZ_CE_SECRET_RPC"
[s3_api]
s3_region = "garage"
api_bind_addr = "0.0.0.0:3900"
# NE PAS définir root_domain pour utiliser le path-style (recommandé)
[s3_web]
bind_addr = "0.0.0.0:3902"
root_domain = ".garage.example.com"
index = "index.html"
[admin]
api_bind_addr = "0.0.0.0:3903"
admin_token = "CHANGEZ_CE_TOKEN_ADMIN"
metrics_token = "CHANGEZ_CE_TOKEN_METRICS"
Important : Changez les adresses IP ou les noms d’host des containers docker
rpc_public_addrsuivant votre configuration/déploiement.
Important : Changez les secrets
rpc_secret,admin_tokenetmetrics_tokenpar des valeurs aléatoires sécurisées.
5. Générer des secrets sécurisés #
# Génération de secrets aléatoires
openssl rand -base64 32 # Pour rpc_secret
openssl rand -base64 32 # Pour admin_token
openssl rand -base64 32 # Pour metrics_token
6. Configuration du reverse proxy Traefik #
Sous la stack frontend, créez le fichier de configuration Traefik (par exemple /opt/docker/frontend-stack/traefik/rules/121-storage.yml) :
http:
routers:
garage-dashboard:
entryPoints:
- websecure
rule: Host(`dashboard.garage.example.com`)
service: garage-dashboard
priority: 100
garage-api-path:
entryPoints:
- websecure
rule: Host(`api.garage.example.com`)
service: garage-api
priority: 25
garage-api-vhosted:
entryPoints:
- websecure
rule: HostRegexp(`^.+\.garage\.example\.com$`)
service: garage-api
priority: 50
# garage-web-bucket:
# entryPoints:
# - websecure
# rule: Host(`proxmox.garage.example.com`)
# service: garage-web-bucket
services:
garage-dashboard:
loadBalancer:
servers:
- url: "http://10.10.20.21:3909"
garage-api:
loadBalancer:
passHostHeader: true
servers:
- url: "http://10.10.20.21:3900"
# garage-web-bucket:
# loadBalancer:
# servers:
# - url: "http://10.10.20.21:3902"
7. Configuration DNS #
Ajoutez ces enregistrements DNS (ou split-horizon DNS interne) :
api.garage.example.com A 10.99.99.10 (Traefik)
dashboard.garage.example.com A 10.99.99.10 (Traefik)
*.garage.example.com A 10.99.99.10 (Traefik - pour sites web statiques)
8. Règles de pare-feu #
Si vous utilisez des VLANs isolés, créez les règles nécessaires :
Unifi Dream Router / Autre pare-feu :
- Source : VLAN des clients (ex: VLAN 10)
- Destination : VLAN Traefik (ex: VLAN 99)
- Port : 443 (HTTPS)
- Action : Accept
Démarrage #
# Démarrer les conteneurs
docker compose up -d
# Vérifier les logs
docker logs -f garage
Configuration initiale de Garage #
1. Créer un alias pour contrôler le démon au sein du conteneur Docker #
On peut également utiliser un alias pour utiliser le binaire Garage dans notre conteneur Docker garage :
Modifiez le fichier /home/<user>/.bashrc et ajoutez :
...
alias garage="docker exec -ti garage /garage"
...
2. Créer le layout du cluster #
- Avec alias
- Sans alias
- Console Web
# Obtenir l'ID du nœud
garage status
# Créer le layout (single-node, replication_factor=1)
garage layout assign -z dc1 -c 1G <NODE_ID>
# Appliquer le layout
garage layout apply --version 1
# Obtenir l'ID du nœud
docker exec -ti garage /garage status
# Créer le layout (single-node, replication_factor=1)
docker exec -ti garage /garage layout assign -z dc1 -c 1G <NODE_ID>
# Appliquer le layout
docker exec -ti garage /garage layout apply --version 1
Console Web
3. Créer une clé d’accès #
# Créer une clé d'accès
docker exec -ti garage /garage key create proxmox-key
# La commande retournera :
# Key ID: GK...
# Secret key: ...
# Conservez précieusement ces informations !
4. Créer un bucket #
# Créer un bucket
docker exec -ti garage /garage bucket create proxmox-backups
# Autoriser la clé à accéder au bucket
docker exec -ti garage /garage bucket allow \
--read --write \
proxmox-backups \
--key proxmox-key
Virtual-hosted-style vs Path-style : Comprendre la différence #
C’est l’un des aspects les plus importants à comprendre lors de la configuration de Garage, car cela impacte directement la façon dont vos clients S3 accèdent aux données et peut causer des problèmes subtils si cela est mal configuré.
Path-style (Recommandé pour la simplicité) #
Exemples d’URLs :
https://api.garage.example.com/bucket-name/object-key
https://api.garage.example.com/proxmox-backups/vm-100.vma.zst
Comment ça fonctionne :
- Un seul endpoint pour toutes les opérations :
api.garage.example.com, - Le nom du bucket fait partie du chemin de l’URL,
- Accès à l’API S3 de Garage :
GET https://api.garage.example.com/, - Accès à un objet :
GET https://api.garage.example.com/my-bucket/objet.
Avantages :
- ✅ Un seul endpoint pour tous les buckets,
- ✅ Pas besoin de wildcard DNS,
- ✅ Configuration simple,
- ✅ Compatible avec la plupart des clients S3,
- ✅ Idéal pour Proxmox et applications internes,
- ✅ Compatible avec l’interface Web de PBS (4.1.0) pendant l’écriture de ce guide.
Configuration Garage : Sans root_domain dans [s3_api]
[s3_api]
s3_region = "garage"
api_bind_addr = "0.0.0.0:3900"
# root_domain = ".garage.example.com" # Pas de root_domain défini
Virtual-hosted-style (Style AWS S3) #
Exemples d’URLs :
https://bucket-name.garage.example.com/object-key
https://proxmox-backups.garage.example.com/vm-100.vma.zst
Comment ça fonctionne :
- Chaque bucket a son propre sous-domaine,
- Le nom du bucket est dans le hostname,
- Accès à l’API S3 de Garage :
GET https://api.garage.example.com/(endpoint principal), - Accès à un objet :
GET https://bucket.garage.example.com/objet.
Avantages :
- ✅ Conforme au comportement AWS S3,
- ✅ Permet des configurations DNS avancées par bucket,
- ✅ Isolation par sous-domaine,
- ✅ Compatible avec Proxmox (mais avec limitations, voir ci-dessous).
Inconvénients :
- ❌ Nécessite un wildcard DNS
*.garage.example.com, - ❌ Nécessite un wildcard SSL,
- ❌ Configuration Traefik plus complexe,
- ❌ Peut causer des erreurs “Bucket not found” si mal configuré,
- ❌ L’interface Web PBS ne peut pas lister les buckets (voir note ci-dessous).
Configuration Garage : Avec root_domain = ".garage.example.com" dans [s3_api]
[s3_api]
s3_region = "garage"
api_bind_addr = "0.0.0.0:3900"
root_domain = ".garage.example.com" # Notez le point au début !
Configuration Traefik pour Path-style & Virtual-hosted-style #
Cette configuration Traefik s’adapate aux 2 styles. Notez l’importance des priorités pour les différentes routes à résoudre. C’est grâce à elles que l’on peut flécher correctement les services que l’on souhaite.
http:
routers:
garage-dashboard:
entryPoints:
- websecure
rule: Host(`dashboard.garage.example.com`)
service: garage-dashboard
priority: 100
garage-api-path:
entryPoints:
- websecure
rule: Host(`api.garage.example.com`)
service: garage-api
priority: 50
garage-api-vhosted:
entryPoints:
- websecure
rule: HostRegexp(`^.+\.garage\.example\.com$`)
service: garage-api
priority: 25
# garage-web-bucket:
# entryPoints:
# - websecure
# rule: Host(`proxmox.garage.example.com`)
# service: garage-web-bucket
services:
garage-dashboard:
loadBalancer:
servers:
- url: "http://10.10.20.21:3909"
garage-api:
loadBalancer:
passHostHeader: true
servers:
- url: "http://10.10.20.21:3900"
# garage-web-bucket:
# loadBalancer:
# servers:
# - url: "http://10.10.20.21:3902"
⚠️ Note importante pour Proxmox Backup Server :
Avec le virtual-hosted-style, l’interface Web de Proxmox Backup Server ne peut pas afficher la liste des buckets disponibles lors de la création d’un datastore.
Pourquoi ? Lorsque Proxmox essaie de lister les buckets, il doit faire une requête à l’endpoint racine de l’API S3. En virtual-hosted-style, chaque sous-domaine est interprété comme un nom de bucket. Si vous configurez proxmox.garage.example.com comme endpoint, Garage pense que vous essayez d’accéder au bucket proxmox au lieu de lister tous les buckets disponibles préalablement créés sous Garage.
Solution 01 : Utilisez la ligne de commande pour créer le datastore en spécifiant le nom du bucket :
# Configuration de l'endpoint (utilisez toujours api.garage.example.com)
proxmox-backup-manager s3 endpoint create garage \
--endpoint api.garage.example.com \
--region garage \
--access-key my_access_key \
--secret-key my_secret_key \
--path-style 0
# Vérifiez que vous pouvez lister les buckets
proxmox-backup-manager s3 endpoint list-buckets garage
# Créez le datastore en ligne de commande en spécifiant le nom du bucket
proxmox-backup-manager datastore create \
garage-s3 \
/mnt/backups/cache/garage \
--backend type=s3,client=garage,bucket=proxmox-backups
Solution 02 :
Forcer l’utilisation de l’API S3 de Garage en spécifiant l’endpoint api.garage.example.com via l’interface Web Proxmox Backup Server :
- Configuration → S3 Endpoints → Add
- Remplissez les informations :

Ajout d’un endpoint S3 de style virtual host dans PBS
Notez que je ne coche pas l’option validant le
Path Style
- Add
Une fois créé en ligne de commande, le datastore apparaîtra normalement dans l’interface Web et fonctionnera parfaitement pour les backups. Proxmox utilisera automatiquement le virtual-hosted-style (proxmox-backups.garage.example.com) pour accéder aux objets.
Comprendre l’interaction entre les deux styles #
Même en virtual-hosted-style, certaines opérations doivent utiliser l’endpoint API principal :
| Opération | Endpoint à utiliser | Exemple |
|---|---|---|
| Accès à l’API S3 de Garage | API principal | GET https://api.garage.example.com/ |
| Opérations S3 globales | API principal | GET https://api.garage.example.com/ |
| Accès à un objet (vhosted) | Sous-domaine du bucket | GET https://mon-bucket.garage.example.com/objet.txt |
| Accès à un objet (path) | API + chemin | GET https://api.garage.example.com/mon-bucket/objet.txt |
Important : En virtual-hosted-style, Proxmox et la plupart des clients S3 modernes utiliseront automatiquement le bon style selon l’opération, tant que vous configurez l’endpoint principal (
api.garage.example.com) et non un sous-domaine spécifique.
Problème courant rencontré #
Si vous configurez root_domain dans [s3_api] mais utilisez un endpoint comme api.garage.example.com, Garage interprétera api comme le nom d’un bucket, causant l’erreur :
minio-client: <ERROR> Unable to list folder. Bucket not found: api
Solution : Supprimez root_domain de la section [s3_api] pour utiliser le path-style.
Tests et validation #
Installation de minio-client #
# Linux
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/
# Vérifier l'installation
mc --version
Configuration de l’alias minio-client #
# Remplacez par vos vraies credentials
mc alias set garage \
https://api.garage.example.com \
my_access_key \
my_secret_key \
--api S3v4
# Vérifier la connexion
mc alias list garage
Tests de base #
# Lister les buckets
mc ls garage
# Créer un bucket de test
mc mb garage/test-bucket
# Uploader un fichier
echo "Hello from Garage S3!" > test.txt
mc cp test.txt garage/test-bucket/
# Lister le contenu du bucket
mc ls garage/test-bucket/
# Télécharger le fichier
mc cp garage/test-bucket/test.txt downloaded.txt
# Supprimer le fichier
mc rm garage/test-bucket/test.txt
# Supprimer le bucket
mc rb garage/test-bucket
Tests avancés #
# Copier un répertoire entier
mc cp --recursive /path/to/local/dir/ garage/test-bucket/backup/
# Synchroniser un répertoire
mc mirror /path/to/local/dir/ garage/test-bucket/sync/
# Obtenir des statistiques
mc du garage/test-bucket/
# Définir une politique d'accès
mc anonymous set download garage/test-bucket/public/
Intégration avec Proxmox Backup Server #
Via la CLI proxmox-backup-manager #
# Sur votre serveur Proxmox Backup Server
# Configurer l'endpoint S3 Path Style
proxmox-backup-manager s3 endpoint create garage \
--endpoint api.garage.example.com \
--region garage \
--access-key my_access_key \
--secret-key my_secret_key \
--path-style 1
# Configurer l'endpoint S3 Vhosted Style
proxmox-backup-manager s3 endpoint create garage \
--endpoint api.garage.example.com \
--region garage \
--access-key my_access_key \
--secret-key my_secret_key \
--path-style 0
# Lister les endpoints configurés
proxmox-backup-manager s3 endpoint list
# Tester la connexion et lister les buckets
proxmox-backup-manager s3 endpoint list-buckets garage
# Créer un datastore S3
proxmox-backup-manager datastore create \
garage-s3 \
/mnt/backups/cache/garage \
--backend type=s3,client=garage,bucket=proxmox-backups \
--comment "Garage S3 Object Storage"
# Supprimer un datastore S3
proxmox-backup-manager datastore remove garage-s3
Via l’interface Web Proxmox Backup Server #
- Vhosted-Style
- Path-Style


Héberger un site web statique #
Garage peut aussi servir des sites web statiques via le service S3 Web.
1. Créer et configurer un bucket #
# Créer un bucket pour le site
docker exec -ti garage /garage bucket create mon-site
docker exec -ti garage /garage bucket allow --read --write mon-site --key proxmox-key
# Activer le mode website
docker exec -ti garage /garage bucket website --allow mon-site
2. Uploader le contenu #
# Créer un fichier index.html
cat > index.html << 'EOF'
<!DOCTYPE html>
<html>
<head>
<title>Mon site sur Garage</title>
</head>
<body>
<h1>Bienvenue sur mon site hébergé avec Garage S3!</h1>
</body>
</html>
EOF
# Uploader
mc cp index.html garage/mon-site/
3. Accéder au site #
Visitez : https://mon-site.garage.example.com
Diagnostic et dépannage #
Problème : Timeout lors de la connexion HTTPS #
Symptôme :
curl: (28) Connection timed out after 5000 milliseconds
Cause : Règles de pare-feu bloquant le trafic inter-VLAN.
Solution :
- Vérifier la connectivité :
ping 10.99.99.10 - Tester le port :
nc -zv 10.99.99.10 443 - Ajouter une règle pare-feu autorisant le trafic du VLAN client vers le VLAN Traefik sur le port 443
Problème : “Bucket not found: api” #
Symptôme :
minio-client: <ERROR> Unable to list folder. Bucket not found: api
Cause : root_domain est défini dans [s3_api], Garage interprète “api” comme un nom de bucket.
Solution :
- Supprimer ou commenter
root_domaindans la section[s3_api], - Redémarrer Garage :
docker restart garage, - Ou utiliser le path-style ou redéfinir les priorités du routeur dans votre configuration Traefik sans passer par la solution 1. et 2.
Problème : DNS résout vers la mauvaise IP #
Symptôme : La requête atteint directement Garage au lieu de Traefik.
Solution :
- Vérifier la résolution DNS :
dig api.garage.example.com - S’assurer que le DNS pointe vers Traefik (10.99.99.10) et non vers l’adresse IP du serveur hébergeant le service Garage (10.10.20.21)
- Vider le cache DNS :
sudo systemd-resolve --flush-caches
Vérifier les logs #
# Logs Garage
docker logs -f garage
# Logs Garage WebUI
docker logs -f garage-webui
# Vérifier le statut du cluster
docker exec -ti garage /garage status
# Vérifier les buckets
docker exec -ti garage /garage bucket list
# Vérifier les clés d'accès
docker exec -ti garage /garage key list
Maintenance et bonnes pratiques #
Sauvegardes #
# Sauvegarder les métadonnées
docker exec garage garage meta snapshot
Monitoring #
Activez les métriques Prometheus :
# Accéder aux métriques (avec le metrics_token)
curl -H "Authorization: Bearer VOTRE_METRICS_TOKEN" \
http://10.10.20.21:3903/metrics
Intégrez avec Prometheus/Grafana pour surveiller :
- Utilisation de l’espace disque,
- Nombre de requêtes S3,
- Latence des opérations,
- État du cluster.
Mises à jour #
docker compose pull
docker compose up -d
# Vérifier
docker logs -f garage
docker exec -ti garage /garage status
Rotation des clés #
# Créer une nouvelle clé
docker exec -ti garage /garage key create nouvelle-cle
# Autoriser l'accès aux buckets
docker exec -ti garage /garage bucket allow \
--read --write \
proxmox-backups \
--key nouvelle-cle
# Mettre à jour vos applications avec les nouvelles credentials
# Supprimer l'ancienne clé (après vérification)
docker exec -ti garage /garage key delete ancienne-cle
Performance et optimisation #
Configuration du replication_factor #
Pour un single-node : replication_factor = 1
Pour un cluster multi-nœuds (prochain article) :
- 3 nœuds →
replication_factor = 3(haute disponibilité) - 5 nœuds →
replication_factor = 3(équilibre performance/résilience)
Compression #
compression_level = 2 # 0 (aucune) à 3 (maximale)
Niveau 2 offre un bon compromis performance/espace.
Base de données #
Pour un single-node, SQLite (db_engine = "sqlite") est suffisant et plus simple.
Pour un cluster, LMDB est recommandé :
db_engine = "lmdb"
lmdb_map_size = "1T"
Sécurité #
Durcissement #
- Changez tous les secrets par défaut
- Utilisez HTTPS uniquement (pas d’exposition HTTP directe)
- Limitez l’accès réseau avec des règles de pare-feu strictes
- Rotation régulière des clés d’accès S3
- Monitoring et alertes sur les accès suspects
- Sauvegardes régulières des métadonnées
Isolation réseau #
# N'exposez que les ports nécessaires
# Ne jamais exposer directement 3901 (RPC) et 3903 (Admin) sur Internet
Authentification renforcée #
Pour l’interface WebUI (garage-webui), configurez l’authentification :
Se rendre sur https://bcrypt-generator.com/ et générer le hashage de votre mote de passe :
- password1234 devient $2a$12$ptIuyf1CosUQpixdEBvNA.lIpkZ0mb6WtSl8qXXBb8y.KybmS4JEa
Pensez à échapper le $ qui précède une lettre en le doublant $$ sinon on s’expose à une erreur d’interprétation de la variable sur Docker Compose
environment:
AUTH_USER_PASS: "myuser:$2a$12$$ptIuyf1CosUQpixdEBvNA.lIpkZ0mb6WtSl8qXXBb8y.KybmS4JEa"
Conclusion #
Vous avez maintenant un serveur Garage S3 fonctionnel, accessible en HTTPS, compatible avec Proxmox et les outils S3 standards !
Récapitulatif #
✅ Garage déployé avec Docker Compose
✅ HTTPS avec Traefik
✅ Path-style S3 pour la simplicité
✅ Tests avec minio-client
✅ Intégration Proxmox Backup Server
✅ Hébergement de sites web statiques
Prochaines étapes #
- Article suivant : Déploiement d’un cluster Garage multi-nœuds pour la haute disponibilité
- Explorer les fonctionnalités avancées : lifecycle policies, versioning, etc.
- Automatiser les sauvegardes avec des scripts
- Mettre en place un monitoring complet avec Prometheus/Grafana
Ressources utiles #
- Documentation officielle Garage
- Garage sur GitHub
- Documentation Traefik
- Documentation minio-client
- Proxmox S3 Storage
Vous avez rencontré des problèmes ou des questions ? N’hésitez pas à consulter la section “Diagnostic et dépannage” ou à laisser un commentaire !
Cet article vous a été utile ? Partagez-le et restez à l’écoute pour le prochain article sur le déploiement en cluster ! 🚀