(Déclassé) Réplication de dépôts avec Syncthing

Indication

La synchronisation des dépôts WAPT est désormais native dans WAPT Enterprise.

Vous pouvez trouver la nouvelle documentation ici : Répliquer un dépôt pour préserver la bande passante des sites secondaires.

Avertissement

Cette partie de la documentation n’est plus maintenue. Vous pouvez l’utiliser comme source d’idées pour faire votre réplication tout en utilisant la version Community.

Présentation de Syncthing

This feature is deprecated

Syncthing est un logiciel open-source multiplateforme de synchronisation de fichiers pair à pair.

Il permet de synchroniser des répertoires sur plusieurs machines en garantissant la sécurité et l’intégrité des fichiers.

La documentation officielle de Syncthing est disponible en ligne <https://docs.syncthing.net/>_.

Mettre en place de la réplication

Indication

La documentation suivante concerne des dépôts et serveurs WAPT basés sur Linux Debian ou CentOS / RedHat.

Installer le dépôt WAPT distant

Linux Debian

echo  "deb  https://wapt.tranquil.it/debian/  ./  "  > /etc/apt/sources.list.d/wapt.list
apt update
apt upgrade -y
apt install tis-waptrepo

Linux CentOS / RedHat

Le dépôt WAPT distant est installé, on doit mettre en place la réplication Syncthing.

Configurer le service web Apache

a2enmod ssl
a2ensite default-ssl.conf
  • modifier ensuite les fichiers de configuration Apache afin d’indiquer les racines correcte aux VirtualHosts :

/etc/apache2/sites-available/default-ssl.conf
/etc/apache2/sites-available/000-default.conf
  • modifier la valeur de DocumentRoot dans chaque fichier de configuration :

- DocumentRoot /var/www/html
+ DocumentRoot /var/www
  • redémarrer Apache afin de prendre en compte la configuration :

/etc/init.d/apache2 restart

Note

Il est préférable d’indiquer dans la configuration Apache des certificats SSL valides pour les dépôts distants.

  • vider le contenu des dossiers /var/www/wapt et /var/www/wapt-host, Syncthing ira peupler ces dossiers avec les données du dépôt principal :

rm -rf /var/www/wapt/*
rm -rf /var/www/wapt-host/*

Installer Syncthing sur les dépôts

Note

Cette procédure est à appliquer sur le dépôt principal et sur les dépôts secondaires.

## Debian
apt update
apt install sudo curl apt-transport-https
curl -s https://syncthing.net/release-key.txt | apt-key add -
echo "deb https://apt.syncthing.net/ syncthing stable" | tee /etc/apt/sources.list.d/syncthing.list
apt update
apt install syncthing

## CentOS 7
wget https://github.com/mlazarov/syncthing-centos/releases/download/v0.14.7/syncthing-0.14.7-0.el7.centos.x86_64.rpm --no-check-certificate
yum install syncthing-0.14.7-0.el7.centos.x86_64.rpm

Configurer Syncthing

Opérations à effectuer :

  • ajout du service dans systemd ;

  • modifier le port d’écoute du service sur 0.0.0.0 ;

  • création d’un compte utilisateur administrateur et définition d’un mot de passe fort ;

  • activation du protocole https pour l’accès Web ;

  • créer le fichier de définition du service waptsync en éditant /etc/systemd/system/waptsync.service :

    [Unit]
    Description=WAPT respository sync with syncthing
    Documentation=http://docs.syncthing.net/
    After=network.target
    ;Wants=syncthing-inotify@.service
    
    [Service]
    User=wapt
    ExecStart=/usr/bin/syncthing -logflags=0 -home=/opt/wapt/.config/syncthing/ -no-restart
    Restart=on-failure
    SuccessExitStatus=3 4
    RestartForceExitStatus=3 4
    
    [Install]
    WantedBy=multi-user.target
    
  • créer l’arborescence nécessaire au lancement du service :

mkdir /opt/wapt/.config/
mkdir /opt/wapt/.config/syncthing/
  • changer le propriétaire de cette arborescence de fichiers :

chown -R wapt:www-data /opt/wapt/.config/
  • activer le service puis le lancer, les fichiers de configuration vont apparaître dans le dossier /opt/wapt/.config/syncthing/ :

systemctl enable waptsync
systemctl start waptsync
systemctl stop waptsync
  • modifier le port d’écoute dans le fichier /opt/wapt/.config/syncthing/config.xml :

<gui enabled="true" tls="true" debugging="false">
    <address>0.0.0.0:8384</address>
    <apikey>4jvEiL24UbFddsdsAQxqsfixNaLt</apikey>
    <theme>default</theme>
</gui>
  • démarrer le service :

systemctl start waptsync

Configurer le service Web de Syncthing

L’interface Web Syncthing est maintenant accessible à l’adresse http://srvwapt.mydomain.lan:8384.

Opérations à effectuer :

  • modifier le nom de l’appareil ;

  • ajouter un Utilisateur autorisé GUI ;

  • ajouter un mot de passe d’authentification pour l”Utilisateur autorisé GUI ;

  • cocher « utiliser l’HTTPS pour le GUI » ;

  • cliquer sur Enregister ;

  • en ssh sur le serveur, redémarrer le service Syncthing :

systemctl restart waptsync

L’interface Web Syncthing est maintenant uniquement accessible en https à l’adresse : https://srvwapt.mydomain.lan:8384.

  • dans la liste des partages, supprimer le répertoire par défaut : Modifier ‣ Enlever ;

  • configurer la réplication :

    Note

    Ces actions sont à effectuer sur le serveur WAPT.

    Dans la liste des dossiers partagés (Partages) :

    • ajouter un répertoire partagé avec Ajouter un appareil ;

    • renseigner le chemin du dossier à partager, ex : /var/www/wapt/ ;

    • dans le menu déroulant Type de partage ‣ Envoyer seulement ;

    • dans le menu déroulant Ordre de récupération des fichiers ‣ Les plus anciens en premier ;

    • recommencer l’opération pour wapt-host: /var/www/wapt-host/ ;

    • ajouter la machine distante :

      Une fois Syncthing installé sur les deux appareils, récupérer l’ID de l’appareil distant (Actions ‣ afficher mon ID).

      Cet identifiant unique est de la forme

      DSINDDC-23ORDNM-PAK6FCL-ZJAKNCH-61GWXAT-77PC3JM-RZ4PPYP-K1QERAV
      

      Sur le serveur maître, dans la liste des appareils (Autres appareils) :

      • Ajouter un appareil ;

      • renseigner l’ID du dépôt distant ;

      • cocher les partages wapt et wapt-host ;

      Sur le dépôt distant effectuer les actions suivantes :

      • l’appareil distant reçoit une notification d’approbation d’ajout par l’appareil maître ;

      • le client reçoit ensuite une popup pour accepter les partage wapt et wapt-host ;

    La réplication est maintenant mise en place.

  • sécuriser la réplication :

Par défaut, les paramètres suivant sont activés pour Syncthing :

Paramètres Syncthing

Options

Description

Activer la translation d’adresses (NAT)

Utiliser un mappage de port UPnP pour les connexions de synchronisation entrantes.

Découverte locale

Syncthing fonctionnera alors avec un system de broadcast pour s’annoncer auprès des autres Syncthing.

Découverte globale

Syncthing s’inscrit sur un serveur mondial, et peut utiliser celui-ci pour rechercher d’autres périphériques.

Relais possible

L’utilisation de relais permet d’utiliser des serveurs externes pour relayer la communication. Le relais est activé par défaut mais ne sera utilisé que si deux périphériques ne peuvent pas communiquer directement entre eux.

Ce mode de fonctionnement permet une mise en place facilitée mais ce n’est pas le mode de fonctionnement le plus conseillé pour la sécurité.

  • décocher toutes les cases dans la configuration réseau ;

  • définir le port d’écoute du protocole (par défaut 22000) ;

  • remplacer default par *tcp://0.0.0.0:22000 ;

Se rendre ensuite sur l’interface de dépôts distants, cliquer sur Modifier, puis définir l’adresse de la machine distante :

  • remplacer dynamic par tcp://ip-du-syncthing-distant:22000

Cette configuration permet de limiter les connexions externes du service Synthing.

Configurer les agents WAPT

Les clients des sites distants doivent maintenant être configurés pour pointer vers leurs dépôts les plus proches.

Deux solutions existent :

  • utiliser la détection automatique via les champs SRV DNS ;

  • modifier le champs repo_url dans le wapt-get.ini des agents WAPT manuellement ou à l’aide d’un paquet WAPT de configuration ;

Exemple de configuration de l’agent WAPT - dépôt local renseigné :

[global]
waptupdate_task_period=120
waptserver=https://srvwapt.mydomain.lan
repo_url=https://localrepo.mydomain.lan/wapt/
use_hostpackages=1

Exemple de paquet pour modifier le champ repo_url de wapt-get.ini :

# -*- coding: utf-8 -*-
from setuphelpers import *

uninstallkey = []

def install():
  print('Modifier la configuration agent pour le site de Colmar')
  inifile_writestring(WAPT.config_filename,'global','repo_url',
                    'https://wapt.city02.mydomain.lan/wapt/')