Syncthing, un outil pour synchroniser vos fichiers

Docker mars 22, 2021 7 min de lecture

Vous connaissez tous Dropbox, Microsoft OneDrive, Google Drive ... comme solutions permettant de synchroniser vos fichiers depuis une machine vers le cloud ou vice-versa. Mais les données sont hébergées par un tiers, et vous n'avez pas un contrôle total sur leur localisation ou leur confidentialité.

Syncthing est un logiciel open-source qui permet de synchroniser des répertoires et fichiers entre plusieurs machines à travers une connexion P2P privée et sécurisée.
Comme son principal concurrent, Resilio Sync (anciennement BitTorrent Sync), il permet de mettre en place cette synchronisation sur vos propres machines, que ce soit des ordinateurs, smartphones ou serveurs.

Les points forts de Syncthing sont nombreux :

  • Les transferts sont signés et chiffrés en AES-128.
  • Les transferts sont effectués via la méthode P2P, les fichiers sont récupérés depuis plusieurs sources pour accélérer les synchronisations.
  • Il n'est pas nécessaire d'ouvrir des ports.
  • Chaque périphérique ajouté doit être approuvé, il n'y a pas de risque qu'un intrus accède à vos fichiers.
  • Il n'y a pas de limite de nombre de périphériques pour une synchronisation.
  • Un client existe pour un grand nombre de systèmes, que ce soit Windows, Mac OS, Linux, BSD, Solaris, Android ... (ils sont disponibles au téléchargement sur cette page)

Nous allons donc voir ensemble comment mettre en place une synchronisation de fichiers entre un serveur et un ordinateur. Pour cela, et vous devez vous en douter, nous mettrons en place un conteneur Docker sur le serveur. Syncthing fournit une image officielle, mais j'ai choisi d'utiliser celle de LSIO.

Ci-dessous le contenu du fichier docker-compose.yaml :

version: "3.8"
services:
  syncthing:
    image: ghcr.io/linuxserver/syncthing
    container_name: syncthing
    environment:
      - PUID=1000  # ID de l'utilisateur
      - PGID=1000  # ID du groupe de l'utilisateur
      - TZ=Europe/Paris
    volumes:
      - /docker/syncthing/config:/config  # Pour stocker les fichiers de configuration
      - /path/to/data1:/data1  # Dossier 1 à monter pour synchronisation
      - /path/to/data2:/data2  # Dossier 2 à monter pour synchronisation
    ports:
      - 8384:8384  # Port pour l'interface web
      - 22000:22000  # Port d'écoute
      - 21027:21027/udp  # Port udp pour la découverte
    restart: unless-stopped

Les paramètres d'environnement PUID et PGID sont les identifiants de l'utilisateur qui va lancer la stack, afin d'éviter des problèmes de droits sur les fichiers du conteneur. Vous les obtiendrez avec la commande id -a en étant connecté avec cet utilisateur.

userdocker@debian:/docker/homebridge$ id -a
uid=1000(userdocker) gid=1000(userdocker) groupes=1000(userdocker),998(docker)

Modifiez également les chemins /path/to/data1 et /path/to/data2 pour monter les chemins des répertoires que vous souhaitez partager à travers Syncthing. (Au moins 1 doit être présent)

On lance le compose avec la commande docker-compose up -d, ce qui va télécharger l'image définie, puis lance le conteneur. Vous pouvez ensuite vous rendre avec votre navigateur sur l'adresse https://IP.DE.VOTRE.MACHINE:8384. Un bandeau vous fera remarquer qu'il n'y a pas d'authentification configurée, ce que nous allons donc nous empresser de faire en cliquant sur le bouton "Configuration".
Sur l'onglet "Général", vous pouvez en profiter pour changer le nom de votre machine. Sur l'onglet "Interface graphique", vous devez renseigner un nom d'utilisateur ainsi que son mot de passe (et je vous conseille d'utiliser Bitwarden pour générer et stocker ces identifiants) et enfin cliquez sur "Enregistrer".

L'interface de Syncthing vous apparaît maintenant, avec sur la partie gauche les partages définis, sur la partie droite le détail de la machine sur laquelle Syncthing est installé, et sur la partie basse la liste des autres appareils qui sont en lien avec cette instance de Syncthing.

Nous allons maintenant ajouter un dossier sur lequel la synchronisation se fera. Pour cela, cliquez sur "+ Ajouter un partage", donnez lui un nom et spécifiez le chemin du partage (dans notre cas, nous avions monté le dossier /data1 du conteneur). Dans l'onglet "Avancé", vous pouvez modifier quelques options de la synchronisation, notamment l'intervalle d'analyse du partage ou le type de partage ("Envoi et réception" pour un synchronisation bi-directionnelle, "Envoi" pour que notre partage source soit le seul qui puisse mettre à jour les fichiers vers les autres machines, ou bien "Réception seulement" pour que notre partage soit mis à jour par les autres machines, mais que les modifications que nous pourrions faire ne soit pas répercutées sur les autres machines). Enfin, enregistrez ce partage, et vous pourrez observer son état sur la page d'accueil.

Passons maintenant à l'installation et la configuration de Syncthing sur l'ordinateur sur lequel nous voulons synchroniser un dossier sur notre serveur. J'ai pris le client en version Windows 64 bits, pour lequel il suffit de décompresser le fichier syncthing-windows-amd64-v1.14.0.zip puis d'exécuter syncthing.exe. Une invite de commande se lance et configure les services nécessaires au bon fonctionnement de Syncthing, et une fois l'initialisation terminée, votre navigateur s'ouvre sur l'adresse http://127.0.0.1:8384/.

Nous créons également un partage, qui doit avoir le même ID que le partage sur le serveur (le nom du partage peut être différent lui) et spécifions le chemin du partage. Sur ce pc, nous choisissons type de partage en envoi et enregistrons.

Pour connecter nos 2 services Syncthing distants, nous devons récupérer sur l'instance du serveur son ID en cliquant sur "Actions" puis "Afficher mon ID". Un QR code ainsi que l'identifiant sous forme d'une chaine de caractères sont affichés, copiez ce dernier.
Rendez-vous sur l'instance Syncthing du pc, cliquez sur "+ Ajouter un appareil" et collez l'identifiant du serveur. Dans l'onglet "Partages", choisissez quel partage vous souhaitez synchroniser avec l'instance Syncthing distante et enregistrez.

L'instance Syncthing du serveur apparaît maintenant dans les appareils de l'instance Syncthing du pc, comme déconnecté.

Rendons-nous sur l'instance Syncthing du serveur, et vous devriez avoir un encart qui est apparu vous informant de la demande de connexion d'un périphérique distant. Vérifiez qu'il s'agit bien de l'instance Syncthing du pc et approuvez l'ajout de l'appareil.Dans l'onglet "Partages", choisissez le partage local qui sera utilisé pour la synchronisation et enregistrez.

Vous devriez également avoir une demande d'autorisation de synchronisation du partage, que vous acceptez bien entendu (c'est bien le but de ce tutorial non ?).

Si vous ajoutez des fichiers dans le répertoire sur le pc, il vous suffit d'attendre quelques minutes pour que ceux-ci soient synchronisés vers le serveur, et vous pourrez voir sur chacune des 2 instances Syncthing l'état de la synchronisation, le nombre de fichiers et dossiers ainsi que le poids du partage.
Pour chaque instance, vous retrouvez le type de partage, en réception uniquement pour le serveur et en envoi pour le pc.

Vous pouvez configurer autant de partages et d'appareils que vous souhaitez, synchroniser plusieurs partages vers un seul appareil, ou un même partage vers plusieurs appareils.


Nous voici arrivé à la fin de cet article vous présentant Syncthing en tant que solution de synchronisation de fichiers entre plusieurs machines. Si cela peut vous aider à vous passer de services tels que Dropbox ou Google Drive, j'en serais ravi !

Comme d'habitude, n'hésitez pas à poser vos questions ou vos retours d'expérience en commentaires, ou encore à nous rejoindre sur notre groupe Telegram.

Mots clés