Non tutto il self-hosting richiede un server sempre acceso con un'interfaccia web. Syncthing è un programma open source che sincronizza cartelle direttamente tra i dispositivi, senza un servizio centrale che custodisca i file. Il portatile, il PC fisso, il telefono e un eventuale NAS si scambiano le modifiche tra loro, in modo cifrato, ogni volta che si trovano connessi.
Il modello di funzionamento
Ogni installazione di Syncthing genera un ID del dispositivo, una lunga stringa derivata dal suo certificato. Per collegare due dispositivi bisogna aggiungere reciprocamente i rispettivi ID: non esistono account, password o registrazioni. La comunicazione avviene con TLS, e ogni parte verifica l'identità dell'altra tramite il certificato.
Per trovarsi, i dispositivi usano:
- la scoperta locale, che li individua sulla stessa rete domestica;
- i server di scoperta globali, che indicano a quale indirizzo è raggiungibile un ID;
- i relay, usati solo quando una connessione diretta non è possibile, per esempio dietro NAT restrittivi. I dati passano dal relay già cifrati.
Chi preferisce non dipendere da alcuna infrastruttura pubblica può disattivare scoperta globale e relay, e indicare a mano gli indirizzi dei dispositivi, oppure ospitare un proprio server di scoperta e un proprio relay.
Tipi di cartella
La scelta più importante, per ogni cartella condivisa, è il suo tipo:
| Tipo | Comportamento | Esempio d'uso |
|---|---|---|
| Invia e ricevi | le modifiche vanno in entrambe le direzioni | documenti di lavoro tra PC e portatile |
| Solo invio | il dispositivo pubblica ma ignora le modifiche altrui | la cartella fotocamera del telefono |
| Solo ricezione | il dispositivo riceve ma non propaga le proprie modifiche | la copia sul NAS |
Una configurazione molto solida per le foto del telefono è: telefono in «solo invio», NAS in «solo ricezione». Se sul NAS qualcosa viene modificato per errore, la modifica non torna sul telefono; dall'interfaccia si può poi ripristinare lo stato originale.
Versioni dei file
Syncthing non è un backup, ma le versioni dei file offrono una rete di sicurezza contro cancellazioni e sovrascritture provenienti da altri dispositivi. Si configurano per cartella:
- cestino semplice: i file cancellati o sostituiti vengono spostati in una cartella
.stversions, eventualmente con una durata massima; - semplice: conserva un numero fisso di versioni precedenti;
- scaglionata: conserva più versioni recenti e via via meno versioni man mano che invecchiano;
- esterna: delega a un comando personalizzato.
Le versioni vengono salvate sul dispositivo che riceve la modifica, non su quello che la genera. Per questo conviene attivarle almeno sul dispositivo che funge da archivio, come il NAS o il PC fisso.
Escludere ciò che non serve
Il file .stignore nella radice della cartella elenca ciò che non va sincronizzato. Un esempio tipico per una cartella di progetti:
// file temporanei e cache
(?d).DS_Store
(?d)Thumbs.db
*.tmp
node_modules
.cache
Il prefisso (?d) permette a Syncthing di cancellare quei file se impediscono la rimozione di una cartella. Va ricordato che .stignore non viene sincronizzato: ogni dispositivo ha il proprio, e se si vogliono regole comuni si può creare un file condiviso e includerlo con la direttiva #include.
Casi d'uso concreti
Nel mio lavoro Syncthing compare spesso in queste configurazioni:
- Note e documenti in Markdown tra portatile, PC e telefono, senza server applicativo.
- Cartella fotocamera del telefono verso il NAS, come primo passo prima del backup vero e proprio.
- Configurazioni personali (file di impostazioni degli editor, script) tra più computer.
- Copia remota verso il computer di un familiare in un'altra casa, in sola ricezione e con versioni attive.
Quest'ultimo caso è interessante: due case con Syncthing ottengono una copia geograficamente separata senza abbonamenti. Per renderla un vero backup, però, servono versioni attive e, idealmente, uno snapshot periodico sul dispositivo di destinazione.
Problemi tipici
- File in conflitto. Quando lo stesso file viene modificato su due dispositivi prima della sincronizzazione, Syncthing conserva entrambe le versioni rinominandone una con
sync-conflictnel nome. Vanno cercati e risolti periodicamente. - Telefono che non sincronizza. Su Android il sistema di risparmio energetico può sospendere l'app: va esclusa dalle ottimizzazioni della batteria. Su iOS non esiste un'app ufficiale; esistono client di terze parti con limiti legati al funzionamento in background.
- Cartella vuota che svuota tutto. Se un disco non viene montato e la cartella appare vuota, Syncthing si accorge della mancanza del marcatore
.stfoldere mette in pausa la cartella invece di propagare la cancellazione. Non va mai cancellato quel marcatore.
In sintesi
- Syncthing sincronizza cartelle direttamente tra dispositivi, senza account né server centrale.
- I dispositivi si autenticano con certificati; scoperta globale e relay si possono disattivare o ospitare in proprio.
- I tipi di cartella «solo invio» e «solo ricezione» prevengono molti errori.
- Le versioni si salvano sul dispositivo che riceve le modifiche e vanno attivate sull'archivio.
- Non è un backup completo, ma è un ottimo mattone per costruirne uno.