Syncthing sur Rocky Linux 9
Installation de Syncthing - synchronisation de fichiers décentralisée.
| Composant | Version |
|---|---|
| Rocky Linux | 9.x |
| Syncthing | Latest |
Durée estimée : 15 minutes
Caractéristiques
| Fonction | Description |
|---|---|
| P2P | Pas de serveur central |
| Chiffré | TLS de bout en bout |
| Cross-platform | Linux, Windows, macOS, Android |
| Versioning | Historique des fichiers |
| Open Source | Gratuit et auditable |
1. Installation
Via repository
cat > /etc/yum.repos.d/syncthing.repo << 'EOF'
[syncthing]
name=Syncthing
baseurl=https://yum.syncthing.net/rpm/$basearch/
gpgcheck=1
gpgkey=https://yum.syncthing.net/rpm/gpg.key
enabled=1
EOF
dnf install -y syncthing
Via binaire
cd /tmp
wget https://github.com/syncthing/syncthing/releases/download/v1.27.2/syncthing-linux-amd64-v1.27.2.tar.gz
tar -xzf syncthing-linux-amd64-v1.27.2.tar.gz
mv syncthing-linux-amd64-v1.27.2/syncthing /usr/local/bin/
chmod +x /usr/local/bin/syncthing
2. Créer un utilisateur dédié
3. Service systemd
cat > /etc/systemd/system/syncthing@.service << 'EOF'
[Unit]
Description=Syncthing - Open Source Continuous File Synchronization for %i
Documentation=man:syncthing(1)
After=network.target
[Service]
User=%i
ExecStart=/usr/local/bin/syncthing serve --no-browser --no-restart --logflags=0
Restart=on-failure
RestartSec=10
SuccessExitStatus=3 4
RestartForceExitStatus=3 4
# Hardening
ProtectSystem=full
PrivateTmp=true
SystemCallArchitectures=native
MemoryDenyWriteExecute=true
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now syncthing@syncthing
4. Firewall
firewall-cmd --permanent --add-port=8384/tcp # Web UI
firewall-cmd --permanent --add-port=22000/tcp # Sync protocol
firewall-cmd --permanent --add-port=22000/udp # QUIC
firewall-cmd --permanent --add-port=21027/udp # Discovery
firewall-cmd --reload
5. Accès distant à l'interface Web
Par défaut, l'interface est accessible uniquement en local.
Modifier la configuration
systemctl stop syncthing@syncthing
# Éditer config.xml
vim /home/syncthing/.config/syncthing/config.xml
Modifier la ligne :
6. Accès Web
- URL:
http://IP:8384 - Définir un mot de passe : Actions → Settings → GUI
7. Ajouter un dossier à synchroniser
Via Web UI
- Add Folder
- Folder Path:
/home/syncthing/sync - Folder ID:
default - Share with devices: (sélectionner les appareils)
- Save
Via CLI
8. Connecter des appareils
Obtenir l'ID de l'appareil
Ou via Web UI : Actions → Show ID
Ajouter un appareil distant
- Add Remote Device
- Device ID: (ID de l'appareil distant)
- Device Name: (nom descriptif)
- Introducer: Non
- Auto Accept: selon besoin
- Save
9. Versioning
Types disponibles
| Type | Description |
|---|---|
| Simple | Garde N versions |
| Staggered | Versions par période |
| Trashcan | Poubelle |
| External | Script personnalisé |
Configuration
Edit Folder → File Versioning
10. Ignorer des fichiers
Créer .stignore dans le dossier synchronisé :
# Patterns
*.tmp
*.log
.DS_Store
Thumbs.db
# Dossiers
node_modules
.git
__pycache__
# Regex
(?d).git
11. Configuration avancée
Priorité de sync
Edit Folder → Advanced → Order
random: Aléatoirealphabetic: Par nomsmallestFirst: Plus petits d'abordlargestFirst: Plus grands d'abordnewestFirst: Plus récents d'abordoldestFirst: Plus anciens d'abord
Limitations bande passante
Actions → Settings → Connections
12. Syncthing en tant que service système
Pour exécuter sans utilisateur connecté :
# Service système global
systemctl enable --now syncthing@root
# Ou pour un utilisateur spécifique au démarrage
loginctl enable-linger syncthing
13. Reverse Proxy Nginx
cat > /etc/nginx/conf.d/syncthing.conf << 'EOF'
server {
listen 80;
server_name sync.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name sync.example.com;
ssl_certificate /etc/letsencrypt/live/sync.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/sync.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8384;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
EOF
systemctl reload nginx
14. Docker
docker run -d \
--name syncthing \
--hostname syncthing-server \
-p 8384:8384 \
-p 22000:22000/tcp \
-p 22000:22000/udp \
-p 21027:21027/udp \
-v syncthing_config:/var/syncthing/config \
-v /data/sync:/var/syncthing/Sync \
-e PUID=1000 \
-e PGID=1000 \
syncthing/syncthing:latest
15. Monitoring
API REST
# Status
curl -H "X-API-Key: YOUR_API_KEY" http://localhost:8384/rest/system/status
# Connexions
curl -H "X-API-Key: YOUR_API_KEY" http://localhost:8384/rest/system/connections
# Dossiers
curl -H "X-API-Key: YOUR_API_KEY" http://localhost:8384/rest/config/folders
Prometheus metrics
Activer dans Settings → Usage Reporting
Endpoint : http://localhost:8384/metrics
Commandes CLI
# Status
syncthing cli show system
# Pause un dossier
syncthing cli operations pause --folder mydata
# Resume
syncthing cli operations resume --folder mydata
# Lister les dossiers
syncthing cli config folders list
# Lister les appareils
syncthing cli config devices list
# Logs
journalctl -u syncthing@syncthing -f
Dépannage
# Logs
journalctl -u syncthing@syncthing -f
tail -f /home/syncthing/.config/syncthing/syncthing.log
# Conflits
find /path/to/folder -name "*.sync-conflict-*"
# Reset database
syncthing cli operations shutdown
rm -rf /home/syncthing/.config/syncthing/index-*
systemctl start syncthing@syncthing
Changelog
| Date | Modification |
|---|---|
| 2024-12 | Création initiale |