Synology, Docker et stockage 11 min de lecture

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.be pour l’API et console-s3.exemple.be pour 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.

Les dossiers data et logs du projet RustFS dans File Station en français
Le projet conserve séparément les données et les journaux de RustFS.

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.

Rendre explicites les autorisations héritées dans DSM en français
Rendez les permissions héritées explicites avant de les ajuster.
Éditeur des autorisations DSM en français
Pour la production, préférez un compte ou un groupe dédié plutôt que Everyone.

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
Création du projet RustFS dans Container Manager en français
Créez le projet dans /docker/rustfs et utilisez la configuration actualisée ci-dessus.
Terminal de Container Manager indiquant que RustFS a démarré
Un code de sortie 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:443 vers http://localhost:9000 pour l’API S3.
  • https://console-s3.exemple.be:443 vers http://localhost:9001 pour 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.

Règle de proxy inverse pour la console RustFS en français
Cette règle illustre la console sur le port 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.

Sous-réseau Docker affiché dans Container Manager en français
Relevez le sous-réseau réel du projet avant de modifier le pare-feu.

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.

Page de connexion RustFS entièrement traduite en français
Connectez-vous avec les identifiants conservés dans .env.
Liste des buckets dans la console RustFS en français
Le premier bucket apparaît dans le navigateur d’objets.

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.

Création d’une clé d’accès RustFS avec les secrets masqués
Conservez la clé secrète immédiatement ; les valeurs illustrées sont masquées.
Choix de la politique d’un bucket RustFS en français
Conservez la politique Privé sauf besoin public explicitement validé.

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.

Références

À propos de l’auteur

Jeremy Kraft administre les infrastructures et les services auto-hébergés de l’IBCSC. Ces guides reprennent des configurations réellement déployées, revérifiées avant publication.

Discussion

Commentaires

0

Aucun commentaire pour le moment. Vous pouvez ouvrir la discussion avec une question ou un retour d’expérience.