Syncthing

À la recherche d'une alternative à dropbox pour partager mes dossiers entre mes divers appareils, je teste Syncthing.

Notes prises au fur et à mesure, pour repartager si c'est utile.

Syncthing existe sur tous les OS, un bon point. Il est dans les dépôts d'Archlinux et Debian. Installer le paquet syncthing suffit pour tester, il y a un “gui” via une adresse web. Il y a aussi des versions graphiques, pas testé encore.

À noter qu'il existe en français, entre autre, pour l'interface.

L'installer sur un serveur permet de synchroniser entre les appareils sans avoir besoin de les allumer en même temps.

pour Archlinux :

yaourt -S syncthing

Pour Debian, ajouter le dépôt comme indiqué ici (faut ptet installer curl, aussi).

Une fois le paquet installé, il faut lancer syncthing pour qu'il créé le dossier.

syncthing

Une page web s'ouvre à l'adresse http://localhost:8384/ ou 8384 : c'est l'interface pour gérer le truc. On peut aussi modifier la configuration en modifiant le fichier /home/user/.config/syncthing/config.xml

Il faut sans doute lancer syncthing automatiquement au démarrage ?

En ajoutant un répertoire (où qu'il soit sur l'ordi), on va indiquer à Syncthing qu'on pourra potentiellement le partager.

Il faut aussi sélectionner les machines amies (Ajouter un périphérique). Il faut pour ça l'ID des machines qui vont se connecter ensemble. En haut, dans la configuration “montrer l'ID”. C'est pas court à partager… Lorsque l'ID de la machine A est ajouté sur la machine B, la machine A reçoit en retour automatiquement une demande pour synchroniser aussi, puis l'accord pour partager certains dossiers.

Synchronisation via un serveur

Avec l'option de base, pour synchroniser ses dossiers il faut avoir tous ses appareils allumés.

On peut aussi se simplifier tout ça en installant Syncthing sur un serveur (toujours allumé), nos divers appareils se synchronisant dessus.

Installer Syncthing sur le serveur (installer en root, mais lancer la première session en user !).

Modifier le fichier /home/user/.config/syncthing/config.xml : à la place

<gui enabled="true" tls="false">
        <address>127.0.0.1:8384</address>

Mettre :

    <gui enabled="true" tls="false" debugging="false">
        <address>0.0.0.0:8384</address>
  • 0.0.0.0 indique d'utiliser l'adresse ip.
  • tls=“false” parce que c'est apache qui gère le chiffrement
  • On peut changer le port, ou pas, suivant si on craint que ça scanne là.

Taper l'adresse du serveur suivi de 8384 (http://153.81.158.610:8384/ par exemple). Aller dans la configuration, mettre un nom pour Utilisateur autorisé GUI et un mot de passe à Mot de passe d'authentification GUI. En cas d'oubli, il suffira de rééditer /home/user/.config/syncthing/config.xml et d'enlever les deux lignes sous <address>0.0.0.0:8080</address>, puis de remettre un mot de passe.

Ajouter les ID des divers appareils. Sur chaque appareil, ajouter uniquement l'ID du serveur. Synchroniser les dossiers nécessaire.

Derrière un proxy

Cas particulier : mon proxy est configuré en ssl passthrough (cela reste la VM de Syncthing qui gère le certificat ssl), donc côté proxy c'est comme n'importe quel autre site.

Ensuite, j'utilise un sous-domaine spécifiquement pour Syncthing. Donc dans le virtualhost:443 sur la machine, ce sont les déclarations habituelles (dont le certificat ssl), et ceci :

    ProxyPass / http://localhost:8384/
    ProxyPassReverse / http://localhost:8384/
    # Forcer Syncthing à utiliser le bon domaine/HTTPS
    RequestHeader set X-Forwarded-Proto "https"
    # WebSocket 
    RewriteEngine on
    RewriteCond %{HTTP:Upgrade} websocket [NC]
    RewriteCond %{HTTP:Connection} upgrade [NC]
    RewriteRule ^/?(.*) "ws://localhost:8384/$1" [P,L]

    # Sécurité : en-têtes et restrictions
    ProxyRequests Off
    <Proxy *>
        Require all granted
    </Proxy>    
</VirtualHost>

Allumer au démarrage

Avec SystemD, taper les commandes suivantes devrait suffire ?

systemctl enable syncthing@user.service
systemctl start syncthing@user.service

Remplacer “user” par le nom de l'utilisateur qui lance le service !

Sur les anciens systèmes où le démarrage se fait toujours via init.d, copier ce fichier (en adaptant au début les variables) dans /etc/init.d/syncthing (source : https://forum.syncthing.net/t/keeping-syncthing-running-systemd-regular-etc-init-d/402

#!/bin/sh
### BEGIN INIT INFO
# Provides: syncthing
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Multi-user daemonized version of syncthing.
# Description: Starts the syncthing daemon for all registered users.
### END INIT INFO

# Replace with users you want to run syncthing clients for
syncthing_USERS="nom_de_l'utilisateur"
DAEMON=/usr/bin/syncthing

startd() {
  for stuser in $syncthing_USERS; do
    HOMEDIR=$(getent passwd $stuser | awk -F: '{print $6}')
    if [ -f $config ]; then
      echo "Starting syncthiing for $stuser"
      start-stop-daemon -b -o -c $stuser -S -u $stuser -x $DAEMON
    else
      echo "Couldn't start syncthing for $stuser (no $config found)"
    fi
  done
}

stopd() {
  for stuser in $syncthing_USERS; do
    dbpid=$(pgrep -fu $stuser $DAEMON)
    if [ ! -z "$dbpid" ]; then
      echo "Stopping syncthing for $stuser"
      start-stop-daemon -o -c $stuser -K -u $stuser -x $DAEMON
    fi
  done
}

status() {
  for stuser in $syncthing_USERS; do
    dbpid=$(pgrep -fu $stuser $DAEMON)
    if [ -z "$dbpid" ]; then
      echo "syncthing for USER $stuser: not running."
    else
      echo "syncthing for USER $stuser: running (pid $dbpid)"
    fi
  done
}

case "$1" in
  start) startd
    ;;
  stop) stopd
    ;;
  restart|reload|force-reload) stopd && startd
    ;;
  status) status
    ;;
  *) echo "Usage: /etc/init.d/syncthing {start|stop|reload|force-reload|restart|status}"
     exit 1
   ;;
esac

exit 0

Rendre le script executable :

chmod a+x /etc/init.d/syncthing

Pour lancer le service :

/etc/init.d/syncthing start

Application android

Éviter que ça tourne tout le temps (et n'importe où)

En fait, y'a de quoi gérer, mais c'est pas évident.

Dans les paramètres, conditions d'exécution : tout décocher, sauf Exécuter en wifi (paramétrer aussi les réseaux où la synchro est acceptable) et Sauvegarde batterie selon les réglages.

Puis retourner dans le menu et faire Quitter. Tuer l'appli ou l'enlever de la liste des appli ne suffit pas, elle tournera en arrière plan et se relancera après un kill. Il faut bien cliquer sur Quitter pour qu'elle cesse de tourner.

Et voilà. Plus qu'à l'activer quand c'est le bon moment !

CC Attribution-Noncommercial-Share Alike 4.0 International Driven by DokuWiki 🏳️‍🌈
pratique/informatique/syncthing.txt · Dernière modification : 15/07/2025 08:16 de Zatalyz