Questo tutorial ti mostrerà come installare Syncthing su Ubuntu. Syncthing è un programma di sincronizzazione di file continuo peer-to-peer gratuito che ti consente di sincronizzare i tuoi file su più dispositivi, disponibile per Linux, BSD, macOS, Windows, Android e Solaris.
È un'alternativa open source al popolare Resilio Sync (precedentemente noto come Sincronizzazione BitTorrent ) applicazione. La creazione, la modifica o l'eliminazione di file su una macchina verrà automaticamente replicata sugli altri dispositivi. Syncthing non carica i tuoi file su un server centrale come Nextcloud , ma scambia i tuoi dati direttamente tra i tuoi dispositivi. Tutti i tuoi dati sono crittografati con TLS durante la trasmissione tra i tuoi dispositivi.
Funzionalità di sincronizzazione
- Gratuito e open source.
- Velocità di sincronizzazione rapida.
- Supporta la sincronizzazione unidirezionale.
- Sincronizzazione selettiva (ignora pattern).
- Può utilizzare server di inoltro se due peer non possono connettersi tra loro.
- Supporta l'autenticazione LDAP.
Installa Syncthing su Ubuntu tramite il repository ufficiale di Deb
Syncthing è incluso nel repository Ubuntu predefinito dal 18.04 Bionic Beaver. Tuttavia, si consiglia di installare Syncthing dal repository ufficiale a monte, in modo da ottenere l'ultima versione.
Usa curl
per scaricare la chiave GPG importare la chiave con apt-key
.
sudo apt-get install curl curl -s https://syncthing.net/release-key.txt | sudo apt-key add -
Se vedi OK
nel terminale, ciò significa che la chiave GPG è stata importata correttamente. Quindi aggiungi il repository ufficiale di deb con il seguente comando.
echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list
Poiché questo repository utilizza https, è necessario installare apt-transport-https
pacchetto, in modo che il gestore di pacchetti APT possa stabilire una connessione https con questo repository.
sudo apt-get install apt-transport-https
Aggiorna l'indice del pacchetto locale e installa la sincronizzazione su Ubuntu.
sudo apt-get update sudo apt-get install syncthing
Utilizzo di Systemd per configurare la sincronizzazione come servizio di sistema
Il pacchetto ufficiale Syncthing deb viene fornito con il file di servizio systemd necessario. Sotto /lib/systemd/system/
directory, troverai un [email protected]
file. Abilita la sincronizzazione per l'avvio automatico all'avvio eseguendo il comando seguente. Sostituisci username
con il tuo nome utente effettivo.
sudo systemctl enable [email protected]username.service
Il comando precedente creerà un collegamento simbolico che punta a [email protected]
file.
Created symlink from /etc/systemd/system/multi-user.target.wants/[email protected] to /lib/systemd/system/[email protected]
Ora possiamo avviare il servizio Syncthing con il seguente comando.
sudo systemctl start [email protected]username.service
Controlla lo stato
systemctl status [email protected]username.service
Uscita:
Suggerimento:se il comando precedente non si chiude immediatamente, premi Q per riprendere il controllo del terminale.
Possiamo vedere che l'avvio automatico di Syncthing è abilitato ed è in esecuzione.
Il servizio di sincronizzazione systemd crea file di configurazione in /home/username/.config/syncthing/
e una cartella /home/username/Sync
come cartella di sincronizzazione predefinita. Il file di configurazione principale è /home/username/.config/syncthing/config.xml
.
Installa Syncthing su altri sistemi operativi
Vai alla pagina di download di Syncthing e installa Syncthing su altri sistemi operativi come Windows, macOS, BSD, Android.
Apri la porta 22000 nel firewall
Syncthing utilizza la porta 22000 per comunicare con i peer. Se il tuo computer o server ha abilitato il firewall UFW, devi consentire la porta 22000 con il seguente comando.
sudo ufw allow 22000/tcp
Accesso all'interfaccia Web di sincronizzazione di Ubuntu
Per impostazione predefinita, il servizio Syncthing è in ascolto su 127.0.0.1:8384. Ora nella barra degli indirizzi del tuo browser Web, digita 127.0.0.1:8384
per accedere all'interfaccia Web di Syncthing. Puoi aggiungere altri dispositivi Syncthing e condividere cartelle con loro.
Se installi Syncthing su un server Ubuntu remoto, devi configurare un proxy inverso con Nginx o Apache per accedere all'interfaccia utente web, come spiegato più avanti in questo tutorial.
Inizia a sincronizzare i file tra i tuoi dispositivi
Una volta che abbiamo due dispositivi che eseguono Syncthing, possiamo iniziare a sincronizzare i file tra di loro.
Nell'interfaccia web di Syncthing, fai clic su Azioni> Mostra ID nell'angolo in alto a destra. Vedrai l'ID del dispositivo, che è una lunga stringa di lettere e numeri. Il codice QR, che è anche l'ID del dispositivo, viene utilizzato per configurare Syncthing sugli smartphone.
Copia l'ID dispositivo, quindi apri l'interfaccia Web di sincronizzazione del secondo dispositivo, fai clic su Aggiungi dispositivo remoto nell'angolo in basso a destra. Quindi incolla l'ID dispositivo e assegna un nome al dispositivo. Fare clic sul pulsante Salva.
Ora il secondo dispositivo proverà a connettersi al primo dispositivo. Aggiorna l'interfaccia Web sul primo dispositivo, vedrai il seguente messaggio. Fai clic su Aggiungi dispositivo per aggiungere il secondo dispositivo all'elenco dei dispositivi del primo dispositivo.
Ora i due dispositivi sono collegati.
Nel riquadro sinistro dell'interfaccia Web è presente la cartella di sincronizzazione predefinita (/home/username/Sync
). Fai clic su Add Folder
pulsante per aggiungere una nuova cartella. Assegna un'etichetta descrittiva a questa cartella e imposta il percorso della cartella.
Syncthing viene eseguito come il tuo account utente, quindi è necessario disporre dell'autorizzazione di scrittura sulla cartella condivisa. Se visualizzi il seguente messaggio di errore durante la condivisione di una cartella, significa che non hai l'autorizzazione di scrittura su quella cartella.
2020-06-21 20:05:49: Failed to create folder marker: mkdir .stfolder: read-only file system
Puoi concedere il permesso di scrittura con setfacl
.
sudo apt install acl
sudo setfacl -R -m u:username:rwx /folder/path/
Nota :se il problema persiste, consulta i suggerimenti per la risoluzione dei problemi alla fine di questo articolo.
Nella Sharing
scheda, seleziona l'altro dispositivo Syncthing.
In Ignore Pattens
scheda, puoi inserire i modelli di nome per i file che non devono essere sincronizzati.
In Advanced
scheda, puoi scegliere il tipo di cartella, l'intervallo di nuova scansione, ecc.
Fare clic sul pulsante Salva per iniziare la sincronizzazione. Verrà visualizzato un messaggio nell'interfaccia Web dell'altro dispositivo. Fai clic su Aggiungi per ricevere file.
Ora i due dispositivi stanno sincronizzando i file. Sul lato destro, puoi vedere la velocità di download, la velocità di caricamento, la dimensione della cartella locale, ecc.
Imposta proxy inverso
Poiché è in ascolto su 127.0.0.1:8384, l'interfaccia Syncthing Web è disponibile solo per le connessioni dallo stesso computer. Per poter accedere all'interfaccia Web di Syncthing da un computer remoto, possiamo configurare un proxy inverso per Syncthing con Nginx o Apache.
Nginx
Nginx è un server Web e proxy inverso molto popolare. Se preferisci usare Nginx, esegui il comando seguente per installarlo.
sudo apt install nginx
Quindi crea un file di configurazione del server.
sudo nano /etc/nginx/conf.d/syncthing.conf
Aggiungi il seguente contenuto a questo file. Sostituisci syncthing.example.com
con il tuo nome di dominio preferito. Dovresti anche aggiungere un record DNS A per questo sottodominio. Se non hai un vero nome di dominio, ti consiglio di andare su NameCheap per acquistarne uno. Il prezzo è basso e offrono protezione della privacy a chi è gratuita per tutta la vita.
server { listen 80; server_name syncthing.example.com; access_log /var/log/nginx/syncthing.access.log; error_log /var/log/nginx/syncthing.error.log; location / { proxy_pass http://127.0.0.1:8384; 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; } }
Salva e chiudi il file. Testare la configurazione di Nginx e ricaricare Nginx.
sudo nginx -t sudo systemctl reload nginx
Dopo aver puntato il tuo nome di dominio all'indirizzo IP di Ubuntu, digita il tuo nome di dominio nella barra degli indirizzi del browser e dovresti vedere l'interfaccia Syncthing Web.
Se il tuo browser non riesce a connettersi all'interfaccia web di Syncthing, forse devi aprire la porta 80 nel firewall. Ad esempio, se utilizzi UFW, esegui il comando seguente.
sudo ufw allow 80/tcp
Apache
Apache è un noto server web che può essere utilizzato anche come proxy inverso. Se preferisci Apache a Nginx, installalo con:
sudo apt install apache2
Avvia Apache e abilita l'avvio automatico.
sudo systemctl start apache2 sudo systemctl enable apache2
Per utilizzare Apache come proxy inverso, dobbiamo abilitare il proxy
moduli e il modulo di intestazione.
sudo a2enmod proxy proxy_http headers proxy_wstunnel
Ora crea un file host virtuale per Syncthing.
sudo nano /etc/apache2/sites-available/syncthing.conf
Copia e incolla le seguenti righe nel file. Sostituisci syncthing.example.com
con il tuo vero nome di dominio. Dovresti anche aggiungere un record DNS A per questo sottodominio. Se non hai un vero nome di dominio, ti consiglio di andare su NameCheap per acquistarne uno. Il prezzo è basso e offrono protezione della privacy a chi è gratuita per tutta la vita.
<VirtualHost *:80> ServerName syncthing.example.com ErrorDocument 404 /404.html ProxyPass / http://127.0.0.1:8384/ ProxyPassReverse / http://127.0.0.1:8384/ ErrorLog ${APACHE_LOG_DIR}/syncthing_error.log CustomLog ${APACHE_LOG_DIR}/syncthing_access.log combined </VirtualHost>
Salva e chiudi il file. Quindi abilita questo host virtuale.
sudo a2ensite syncthing.conf
Riavvia Apache
sudo systemctl restart apache2
Ora puoi accedere all'interfaccia utente Web tramite syncthing.example.com
.
Se il tuo browser non riesce a connettersi all'interfaccia web di Syncthing, forse devi aprire la porta 80 nel firewall. Ad esempio, se utilizzi UFW, esegui il comando seguente.
sudo ufw allow 80/tcp
Proteggi l'interfaccia utente Web di sincronizzazione con HTTPS
Per crittografare il traffico HTTP quando visiti l'interfaccia utente Web di Syncthing tramite un nome di dominio, possiamo abilitare HTTPS installando un certificato TLS gratuito emesso da Let's Encrypt. Innanzitutto, apri la porta 443 nel firewall.
sudo ufw allow 443/tcp
Quindi esegui il comando seguente per installare il client Let's Encrypt (certbot).
sudo apt install certbot
Se usi Nginx, devi anche installare il plugin Certbot Nginx.
sudo apt install python3-certbot-nginx
Quindi, esegui il comando seguente per ottenere e installare il certificato TLS.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d syncthing.example.com
Se usi Apache, installa il plugin Certbot Apache.
sudo apt install python3-certbot-apache
Ed esegui questo comando per ottenere e installare il certificato TLS.
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d syncthing.example.com
Dove
--nginx
:usa il plugin nginx.--apache
:usa il plugin Apache.--agree-tos
:Accetta i termini di servizio.--redirect
:Forza HTTPS tramite reindirizzamento 301.--hsts
:aggiungi l'intestazione Strict-Transport-Security a ogni risposta HTTP. Forzare il browser a utilizzare sempre TLS per il dominio. Difende dallo stripping SSL/TLS.--staple-ocsp
:Abilita la pinzatura OCSP. Una risposta OCSP valida viene pinzata al certificato offerto dal server durante TLS.
Il certificato dovrebbe ora essere ottenuto e installato automaticamente.
Aggiorna la GUI di Syncthing Web, scoprirai che la connessione HTTP viene automaticamente reindirizzata alla connessione protetta HTTPS.
Abilita autenticazione utente
Per impostazione predefinita, chiunque può accedere all'interfaccia Web di Syncthing dopo la configurazione del proxy inverso. Possiamo abilitare l'autenticazione dell'utente per limitare l'accesso. Fai clic su Azioni pulsante nell'angolo in alto a destra, quindi seleziona Impostazioni -> GUI.
Inserisci un nome utente in Utente autenticazione GUI campo, inserisci una password nel campo Password di autenticazione GUI . Quindi salva le tue impostazioni.
Tieni presente che non è necessario selezionare Utilizza HTTPS per la GUI box, che consente a Syncthing di utilizzare un certificato autofirmato. Abbiamo già installato un certificato valido in Apache/Nginx che è considerato affidabile dai browser Web tradizionali.
Una volta salvate le modifiche, riavvia il servizio di sistema Syncthing, altrimenti potresti visualizzare un errore 502 bad gateway durante il ricaricamento della pagina.
sudo systemctl restart [email protected]username.service
Ora accedi all'interfaccia di Syncthing Web con il tuo nuovo nome utente e password.
Come utilizzare un certificato TLS autofirmato
Se non desideri utilizzare un nome di dominio e un certificato TLS valido per accedere all'interfaccia web di Syncthing. È possibile utilizzare un certificato autofirmato. Modifica il file di configurazione di Syncthing.
nano ~/.config/syncthing/config.xml
Trova le seguenti righe.
<gui enabled="true" tls="false" debugging="false"> <address>127.0.0.1:8384</address> <apikey>P4sYoeq2CNQRdfq33dq823dakE2</apikey> <theme>default</theme>
Per utilizzare un certificato autofirmato, cambia semplicemente tls="false"
a tls="true"
. E se intendi accedere all'interfaccia web di Syncthing da un computer remoto, cambia 127.0.0.1
a 0.0.0.0
.
Salva e chiudi il file. Quindi riavvia Syncthing per rendere effettive le modifiche.
sudo systemctl restart [email protected]username.service
Cartelle solo invio e solo ricezione
Quando condividi una cartella in Syncthing, puoi andare alla scheda Avanzate e scegliere uno dei tre tipi di cartelle:
- Invia e ricevi (predefinito)
- Solo invio
- Solo ricevi
Potresti voler scegliere solo invio o solo ricezione. Ad esempio, se hai 3 computer:A, B e C e desideri aggregare le cartelle sui computer A e B in un'unica cartella sul computer C. Quindi puoi impostare il tipo di cartella su Solo ricezione sul computer C. In questo modo, il computer C avrà tutti i file in un'unica cartella. I computer A e B hanno ancora i file originali. Né più né meno.
Quando utilizzi lo stesso percorso della cartella sul computer C, Syncthing potrebbe avvisarti che "questo percorso è una sottodirectory di una cartella esistente". Puoi ignorare questo avviso perché hai una cartella di sola ricezione. I file esistenti nella cartella non verranno eliminati.
Sincronizzazione tramite server di inoltro
Se due istanze di Syncthing non riescono a connettersi tra loro, Syncthing proverà a utilizzare un server di inoltro per trasferire i file.
Un motivo comune per cui non possono connettersi tra loro è che uno di loro si trova dietro un dispositivo NAT e non ha configurato il port forwarding. Dopo aver configurato il port forwarding, è possibile disabilitare i server di inoltro. Ecco come. Fai clic su Edit
e seleziona il pulsante Advanced
scheda, cambia l'indirizzo da dynamic
a tcp://ip-address:22000
. Ovviamente devi usare il tuo vero indirizzo IP.
Sincronizzazione di grandi quantità di piccoli file
Syncthing non è adatto per sincronizzare grandi quantità di piccoli file come i file osm tile, perché raggiungerà rapidamente i limiti di inotify del file system Linux. Se i due dispositivi eseguono entrambi Linux, puoi usare rsync
(sincronizzazione remota) strumento per sincronizzare grandi quantità di piccoli file, come questo:
rsync -aP /path/to/source/folder/ [email protected]:/path/to/destination/folder
Esecuzione di più istanze di sincronizzazione
Se hai più cartelle condivise che appartengono a utenti diversi, è una buona idea eseguire più istanze di Syncthing per ogni utente.
sudo systemctl start [email protected] sudo systemctl start [email protected]
Se esegui Syncthing come utente1 e condividi le cartelle appartenenti a utente2, avrai problemi di sincronizzazione/autorizzazione negata, perché Syncthing creerà i file con l'utente con cui viene eseguito.
Ogni istanza deve avere una porta GUI e una porta di sincronizzazione univoche, che possono essere configurate nel file di configurazione della sincronizzazione dell'utente nella directory home.
nano ~/.config/syncthing/config.xml
La configurazione della porta della GUI è
<address>127.0.0.1:8384</address>
La configurazione predefinita della porta di sincronizzazione è
<listenAddress>default</listenAddress>
Puoi cambiarlo in
<listenAddress>tcp://0.0.0.0:22001</listenAddress>
Se non desideri creare un sottodominio per ogni istanza di Syncthing, puoi creare una sottodirectory nel tuo nome di dominio. Ad esempio, la configurazione della sottodirectory Nginx per Syncthing è la seguente.
location /user2/ { proxy_pass http://127.0.0.1:8385/; 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; }
Uso user2 come sottodirectory. Puoi scegliere il nome che preferisci. Nota che in proxy_pass http://127.0.0.1:8385/;
, la barra finale /
è necessario. Se lo elimini, non funzionerà.
Suggerimenti per la risoluzione dei problemi
Impossibile connettersi
Se le tue istanze di Syncthing non riescono a connettersi tra loro, puoi utilizzare il ss
(statistiche socket) per verificare se Syncthing è in ascolto sulla porta TCP 22000.
sudo ss -lnpt | grep syncthing
Come puoi vedere dallo screenshot qui sotto, il mio Syncthing è in ascolto sulla porta 8384 (interfaccia web) e 22000 (connessione peer-to-peer).
In caso contrario, puoi modificare il file di configurazione.
nano ~/.config/syncthing/config.xml
Trova la riga seguente.
<listenAddress>default</listenAddress>
Modifica default
a tcp://your-IP-address
.
<listenAddress>tcp://12.34.56.78</listenAddress>
Salva e chiudi il file. Quindi riavvia Syncthing.
sudo systemctl restart [email protected]username.service
Impossibile creare l'indicatore di cartella
Se desideri sincronizzare una cartella di sistema come /etc/
, probabilmente vedrai il seguente messaggio di errore:
Failed to create folder marker, read-only file system
Questo perché il servizio di sincronizzazione systemd (/lib/systemd/system/[email protected]
) ha il seguente ProtectSystem
variabile che vieta l'operazione di scrittura su cartelle di sistema (/usr/, /boot/, /etc/).
ProtectSystem=full
Possiamo aggiungere esclusioni, così Syncthing può scrivere nella cartella. Crea una cartella in cui archiviare le nostre configurazioni di sistema personalizzate.
sudo mkdir /etc/systemd/system/[email protected]username.service.d/
Quindi crea un file in questa directory.
sudo nano /etc/systemd/system/[email protected]username.service.d/permission.conf
Aggiungi le seguenti righe in questo file.
[Service] ReadWritePaths=/shared/foler/one/ /shared/foler/two/
Le cartelle sono separate da uno spazio vuoto. Puoi aggiungere tutte le cartelle che vuoi. La cartella deve esistere sul tuo sistema, altrimenti Syncthing non si riavvierà.
Salva e chiudi il file. Quindi ricarica systemd.
sudo systemctl daemon-reload
E riavvia Syncthing.
sudo systemctl restart [email protected]username.service
La dimensione della cartella nello stato globale non è precisa
Questo può accadere se condividi cartelle con più dispositivi. Supponiamo che tu condivida una cartella dal dispositivo 1 al dispositivo 2. Se il dispositivo 2 non ha terminato la sincronizzazione dei file e condividi la cartella dal dispositivo 2 al dispositivo 3, la dimensione globale della cartella visualizzata sul dispositivo 3 sarà inferiore alla dimensione effettiva .
La sincronizzazione delle cartelle si interrompe
Controlla i log di Syncthing per scoprire perché ha interrotto la sincronizzazione.
sudo journalctl -eu [email protected]
Richieste di elaborazione del problema
Se vedi il seguente errore, puoi controllare il registro degli errori di Nginx (/var/log/nginx/syncthing.error.log
) o il log degli errori di Apache (/var/log/apache/syncthing_error.log
) per scoprire cosa ha causato questo problema.
Syncthing seems to be experiencing a problem processing your request. Please refresh the page or restart Syncthing if the problem persists.
Nel mio caso, è perché ho abilitato il firewall per applicazioni web ModSecurity.
Replica asincrona
Tieni presente che Syncthing usa il metodo asincrono, quindi le modifiche apportate su un nodo richiederanno del tempo per essere replicate su altri nodi. Se la tua applicazione è sensibile al ritardo di sincronizzazione, ti consigliamo di designare un nodo come nodo principale. Apporta modifiche solo al nodo master e utilizza i nodi slave come backup.