Stockage compatible S3 sur un NAS Synology avec RustFS
Déployer RustFS dans Container Manager, publier l’API S3 et la console derrière un proxy inverse, puis créer un premier bucket.
RustFS permet de transformer un NAS Synology en stockage objet compatible avec l’API S3. Ce guide installe le service dans Container Manager, sépare correctement l’API de la console Web et publie les deux accès derrière le proxy inverse de DSM.
Qu’est-ce que RustFS ?
RustFS est un serveur de stockage objet open source écrit en Rust et distribué sous licence Apache 2.0. Sa compatibilité S3 permet de l’utiliser avec de nombreux outils de sauvegarde, applications et bibliothèques conçus pour cette API.
Sur un NAS, il peut servir à centraliser des sauvegardes applicatives, des fichiers statiques ou des archives. Il ne remplace toutefois pas une stratégie de sauvegarde : les données RustFS doivent elles-mêmes être copiées vers un autre support ou un autre site.
Avant de commencer
- Installez Container Manager depuis le Centre de paquets DSM.
- Préparez deux noms DNS, par exemple
s3.exemple.bepour l’API etconsole-s3.exemple.bepour l’administration. - Associez un certificat TLS valide à ces deux noms dans DSM.
- Choisissez des identifiants longs et uniques, puis conservez-les dans un gestionnaire de secrets.
- Planifiez une sauvegarde indépendante du dossier de données avant de confier des fichiers importants au service.
Préparer les dossiers
Dans File Station, créez docker/rustfs, puis deux sous-dossiers : data pour les objets et logs pour les journaux. Adaptez le nom du volume si votre installation n’utilise pas volume1.
L’image officielle exécute le service avec l’UID/GID 10001. La solution la plus restrictive consiste à donner l’écriture uniquement à cet utilisateur sur les deux dossiers :
sudo chown -R 10001:10001 /volume1/docker/rustfs/data /volume1/docker/rustfs/logs
sudo chmod -R u+rwX,go-rwx /volume1/docker/rustfs/data /volume1/docker/rustfs/logs
Si vous passez uniquement par l’interface DSM, rendez d’abord explicites les autorisations héritées, puis accordez la lecture et l’écriture au compte ou au groupe utilisé par Container Manager. Les captures suivantes montrent le chemin dans DSM. Évitez d’accorder Everyone en lecture/écriture en production ; si ce réglage est nécessaire pour un test, limitez-le strictement au dossier rustfs.
Créer le projet dans Container Manager
Dans Container Manager → Projet, choisissez Créer, nommez le projet rustfs et sélectionnez le dossier /docker/rustfs. Collez ensuite ce fichier docker-compose.yml :
services:
rustfs:
image: rustfs/rustfs:latest
container_name: rustfs-server
security_opt:
- no-new-privileges:true
ports:
- "9000:9000" # API S3
- "9001:9001" # Console Web
environment:
RUSTFS_VOLUMES: /data/rustfs0
RUSTFS_ADDRESS: 0.0.0.0:9000
RUSTFS_CONSOLE_ADDRESS: 0.0.0.0:9001
RUSTFS_CONSOLE_ENABLE: "true"
RUSTFS_CONSOLE_CORS_ALLOWED_ORIGINS: https://console-s3.exemple.be
RUSTFS_ACCESS_KEY: ${RUSTFS_ACCESS_KEY}
RUSTFS_SECRET_KEY: ${RUSTFS_SECRET_KEY}
volumes:
- ./data:/data/rustfs0
- ./logs:/var/log/rustfs
restart: unless-stopped
Créez à côté un fichier .env. Les valeurs ci-dessous sont volontairement des marqueurs : remplacez-les avant de démarrer le projet et ne publiez jamais ce fichier.
RUSTFS_ACCESS_KEY=CHANGEZ_MOI
RUSTFS_SECRET_KEY=GENEREZ_UN_SECRET_LONG_ET_UNIQUE
/docker/rustfs et utilisez la configuration actualisée ci-dessus.
0 confirme la création du conteneur.Configurer le proxy inverse
Dans Panneau de configuration → Portail de connexion → Avancé → Proxy inverse, créez deux règles distinctes. C’est le point important à ne pas inverser :
https://s3.exemple.be:443vershttp://localhost:9000pour l’API S3.https://console-s3.exemple.be:443vershttp://localhost:9001pour la console Web.
Pour la console, ajoutez les en-têtes WebSocket $http_upgrade et $connection_upgrade. Des délais de 600 secondes conviennent aux transferts longs, mais adaptez-les à votre environnement. Attribuez ensuite le bon certificat TLS aux deux noms d’hôte.
9001. Créez une seconde règle pour l’API sur le port 9000.Adapter le pare-feu DSM
N’exposez pas directement les ports 9000 et 9001 à Internet. Autorisez d’abord HTTPS vers le proxy inverse, puis limitez les ports internes au NAS, au réseau d’administration ou au sous-réseau Docker réellement utilisé.
Pour identifier ce réseau, ouvrez Container Manager → Réseau et développez le réseau du projet. Dans l’exemple, 172.18.0.0/16 correspond au masque 255.255.0.0. Votre valeur peut être différente : recopiez-la exactement et placez la règle d’autorisation avant les règles de refus.
Créer le premier bucket
Ouvrez https://console-s3.exemple.be et connectez-vous avec la clé d’accès et la clé secrète définies dans .env. Dans Navigateur, créez votre premier bucket, par exemple bucket01.
.env.
Créez ensuite une clé d’accès propre à l’application qui utilisera ce bucket. La clé secrète n’est affichée qu’au moment de sa création : exportez-la vers votre gestionnaire de secrets, puis fermez la fenêtre. Les valeurs de la capture ont volontairement été masquées.
Vérifier le service
RustFS expose un contrôle de santé pour chaque interface. Les deux commandes doivent répondre sans erreur :
curl -fsS https://s3.exemple.be/health
curl -fsS https://console-s3.exemple.be/rustfs/console/health
Testez ensuite un envoi et un téléchargement avec le client S3 réellement prévu, puis redémarrez le conteneur afin de confirmer que les données persistent dans docker/rustfs/data.
En résumé
Le déploiement tient dans un seul projet Container Manager, mais trois détails font la différence : des droits limités sur les volumes, des secrets hors du fichier Compose et deux règles de proxy correctement séparées. L’API S3 utilise le port 9000 et la console le port 9001.
Discussion
Commentaires
Aucun commentaire pour le moment. Vous pouvez ouvrir la discussion avec une question ou un retour d’expérience.
La connexion protège les échanges du spam et évite de publier votre adresse e-mail.
Se connecter pour commenter →