XBrowserSync è un progetto (e un servizio) opensource che permette di svincolarsi dai sync più o meno proprietari offerti dai maggiori browser e vendor.
La via semplice
Il modo più semplice di usare xBrowserSync è quello di installare l'addon per Firefox o Chrome/Chromium direttamente dai rispettivi market, scegliere uno dei server ufficiali di xbrowsersync e iniziare la sincronizzazione, creando un nuovo syncID.
I dati vengono crittografati all'origine, e trasmessi via https. Altri browser/dispositivi possono venire agganciati utilizzando il syncID e la password associata.
Android?
Il team del progetto ha creato anche un'app per Android, scaricabile sia dal Play Store sia con F-Droid
La via Difficile
Ovvero, creiamo un'istanza privata di xbrowsersync!
Essendo un progetto opensource e free è naturalmente possibile installare un'istanza server privata di XBrowserSync su un proprio server.
Ecco come fare utilizzando un'istanza VPS (di quelle a basso costo offerte da molti gestori cloud).
Per quanto non coperto da questa guida rimando all'ottimo readme presente sul github del progetto a questo indirizzo: https://github.com/nodesource/distributions/blob/master/README.md
Prerequisiti
Per funzionare, XBrowserSync necessita di nodejs e MongoDB.
Per installare mongodb su server Debian/Ubuntu è sufficiente il comando
sudo apt install mongodb
Per NodeJS è invece necessario aggiungere un repository esterno, seguendo la guida presente sul sito del progetto: https://github.com/nodesource/distributions/blob/master/README.md
Installazione del servizio
Il primo passo è clonare il repository GIT di xbrowsersync all'interno del server VPS; consiglio di creare una directory xbrowsersync
all'interno di /opt
:
sudo mkdir /opt/xbrowsersync
Spostiamoci all'interno della directory appena creata e cloniamo il repository
cd /opt/xbrowsersync
git clone https://github.com/xbrowsersync/api.git
Ora installiamo e compiliamo il pacchetto
npm install --unsafe-perm
Configurazione di MongoDB
Apriamo la shell di mongodb con il comando
mongo
Ora creiamo e configuriamo il database per xbrowsersync (NB. sostituire PASSWORD con una password a propria scelta)
use admin
db.createUser({ user: "xbrowsersyncdb", pwd: "PASSWORD", roles: [ { role: "readWrite", db: "xbrowsersync" }, { role: "readWrite", db: "xbrowsersynctest" } ] })
use xbrowsersync
db.newsynclogs.createIndex( { "expiresAt": 1 }, { expireAfterSeconds: 0 } )
db.newsynclogs.createIndex({ "ipAddress": 1 })
Usciamo dalla mongo shell con il comando
exit
Opzionale: otteniamo un FQDN per il nostro server VPS
È possibile puntare il servizio di XBrowserSync usando direttamente l'indirizzo IP del server VPS, ma avreste particolari rogne volendo sfruttare l'HTTPS (raccomandato) e volendo usare in contemporanea anche il client per Android. Infatti, il client per Android non permetterebbe la sincronizzazione (non avendo un FQDN dovreste usare un certificato self-signed, con tutti i problemi di importazione e riconoscimento di tali certificati in Android.
Per fortuna è possibile risolvere alla radice tali problemi, utilizzando servizi gratuiti messi a disposizione online. DuckDNS è un servizio online di DynamicDNS assolutamente gratuito, che permette di registrare domini di terzo livello del tipo dominio.duckdns.org.
Il nostro VPS avrà un IP fisso, quindi possiamo registrare il dominio di terzo livello che vogliamo (in questa guida myxbsync.duckdns.org) e scordarci le problematiche di aggiornamento dell'IP.
Opzionale: otteniamo un certificato valido per il nostro dominio
Dopo aver registrato il nostro nome DNS dobbiamo ottenere un certificato valido.
SSLforFree permette, sempre gratuitamente, di ottenere un certificato (valido 90 giorni e aggiornabile all'infinito). Rimando alle chiare guide del sito per la generazione del certificato; consiglio di registrarsi al sito per gestire i rinnovi con facilità.
Dopo aver ottenuto i certificati, copiamoli sul nostro server VPS e scompattiamo lo zip in una directory, appositamente creata, in /etc/ssl/web
.
Configurazione di XBrowserSync
Il servizio si configura in un unico file json, da parire con l'editor preferito e collocato in /opt/xbrowsersync/api/config/settings.default.json
I campi da modificare per il database sono:
"name": "xbrowsersync",
"username": "xbrowsersyncdb",
"password": "PASSWORD",
Per il logging valorizzare come segue il capo path per log
"path": "/var/log/xBrowserSync/api.log",
Opzionale: per HTTPS valorizzare come segue i campi sotto server
"https": {
"certPath": "/etc/ssl/web/certificate.crt",
"enabled": true,
"keyPath": "/etc/ssl/web/private.key"
},
Opzionale: modificare il campo message in status
"message": "Benvenuto nel mio xBorwserSync privato",
Sistemazione permessi e path
Creiamo il path dove verranno salvati i file di log
sudo mkdir /var/log/xBrowserSync
Ora sistemiamo i permessi; faremo girare il servizio con l'utente fittizzio (di sistema) nobody
sudo chown -R nobody:nogroup /var/log/xBrowserSync
sudo chown -R nobody:nogroup /opt/xbrowsersync
Creazione eseguibile di avvio
Creiamo un nuovo file (come root) con il nostro editor preferito in /usr/bin
con questo contenuto:
#!/bin/bash
export NODE_EXTRA_CA_CERTS=/etc/ssl/web/ca_bundle.crt
/usr/bin/node /opt/xbrowsersync/api/dist/api.js
NB la riga
NODE_EXTRA_CA_CERTS
è da mettere solo se si è seguita la guida per l'abilitazione dell'https con i certificaticreati con FreeSSL
Salviamo il file come xbrowsersync
e rendiamolo
eseguibile
sudo chmod +x /usr/bin/xbroswersync
Creazione e abilitazione del demone systemd
Creiamo un servizio systemd per l'avvio/spegnimento del servizio; creiamo il file /etc/systemd/system/xbrowsersync.service
con il nostro editor preferito, con questo contenuto:
[Unit]
Description=XBrowserSync Service
[Service]
ExecStart=/usr/bin/xbrowsersync
Restart=always
User=nobody
# Note Debian/Ubuntu uses 'nogroup', RHEL/Fedora uses 'nobody'
Group=nogroup
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/opt/xbrowsersync/api
[Install]
WantedBy=multi-user.target
Facciamo rileggere a systemd i file di configurazione con il comando:
sudo systemctl daemon-reload
Ora abilitiamo e facciamo partire il servizio di XBrowserSync:
sudo systemctl enable xbrowsersync
sudo systemctl start xbrowsersync
A questo punto è possibile contattare il proprio servizio privato di sync dall'indirizzo http ( o https) del proprio server VPS sulla porta 8080. Per il nostro esempio, l'indirizzo divenda quindi: https://myxbsync.duckdns.org:8080
Restrizione d'uso
Il servizio, di default, accetta nuovi account di sync da chiunque ne conosca l'indirizzo; se vogliamo mantenere il nostro xbrowsersync ad uso privato, dopo aver aggiunto i synID desiderati, possiamo fermare il servizio e modificare il file json di configurazione, nella sezione status
, impostando a false
la direttiva allowNewSyncs
:
"allowNewSyncs": false,
Quindi riavviare il servizio. A questo punto, gli utenti con un syncID valido potranno continuare a utilizzare il servizio, ma non saranno accettati nuovi utenti.