Utilizzo storage in cloud su Proton Drive per salvare i miei documenti e accederci con facilità da tutte le piattaforme, fino ad ora, ho effettuato backup manualmente di tutti i miei dati periodicamente.
Avere infatti tutti i dati su una piattaforma e non eseguirne un backup può diventare un problema se ad esempio il vostro account viene chiuso o se per qualche motivo i vostri dati vengono cancellati.
Con l’esigenza di automatizzare questa procedura e per avere più di una copia di dati ho iniziato a pensare a come realizzare un server di backup che mi permetta di backuppare automaticamente i dati dalla mia piattaforma cloud in locale e verso altri storage.
Architettura
Nella mia architettura ospiterò sul mio nodo Proxmox un container LXC che si occuperà di effettuare i backup in locale e verso repository remoti. Tramite Rclone faremo il mount dei nostri dati dal cloud in una cartella locale che poi backupperemo con Backrest.
LXC
Per il container potete utilizzare la distro che preferite, io utilizzerò Debian.
Una cosa importante è quella di abilitare l’opzione “FUSE” tra le “features” nella sezione “Options” del nostro container.
FUSE (Filesystem in Userspace) ci permetterà di effettuare il mount di un filesystem remoto tramite Rclone, installiamolo con sudo apt install fuse3
.
Restic e Backrest
Restic è un tool di backup semplice, veloce e sicuro, progettato per supportare una varietà di backend, inclusi filesystem locali, cloud e protocolli come SFTP/SMB.
Insieme a restic utilizzerò Backrest, un’interfaccia web che permette di avere una gestione facile dei repository e dei job di backup.
Una volta che il container è pronto andiamo a installare Backrest seguendo le istruzioni ufficiali, io lo installerò scaricando l’ultima release.
Prima di installarlo per far sì che la web interface sia raggiungibile dall’IP del nostro container e non solo da localhost aggiungiamo questa variabile al nostro file .bashrc
:
export BACKREST_PORT=0.0.0.0:9898
L’installer si occuperà anche di installare restic se non lo avete già fatto.
Rclone
Installiamo anche Rclone seguendo le istruzioni ufficiali.
Una volta installato Rclone dobbiamo autenticarlo con il nostro cloud provider che vogliamo backuppare, per farlo usiamo rclone conflig
.
Rclone supporta vari backend tra cui ad esempio Google Drive, io lo configurerò in questo caso con Proton Drive.
Una volta configurato il nostro backend dobbiamo montarlo in una directory nel nostro filesystem, per farlo creiamo una cartella all’interno di /mnt/
mkdir /mnt/ProtonDrive
Ora andiamo a dare il comando di mount così da accedere ai nostri file su Cloud come se fossero in una directory locale
rclone mount ProtonDrive:/Dati /mnt/ProtonDrive/ --read-only
Io monterò la directory con --read-only
per evitare modifiche accidentali dei dati, --daemon
può essere usato per lanciare il background il comando.
Verifichiamo che i nostri dati siano accessibili correttamente, per far sì che i dati siano montati all’avvio del nostro container utilizzeremo Systemd creando il file /etc/systemd/system/rclone-protondrive.service
[Unit]
Description=Rclone Mount Service
After=network.target
[Service]
User=pietro
ExecStart= /usr/bin/rclone mount ProtonDrive:/Dati /mnt/ProtonDrive/ --read-only --vfs-cache-mode full --config=/home/pietro/.config/rclone/rclone.conf --log-level INFO --log-file /tmp/rclone-protondrive.log
ExecStop=/usr/bin/fusermount3 -u /mnt/ProtonDrive/
Restart=always
[Install]
WantedBy=multi-user.target
Cambiate l’utente pietro
con il vostro facendo attenzione a cambiarlo anche nella directory del vostro file di configurazione.
Abilitiamo e avviamo il servizio
sudo systemctl enable rclone-protondrive.service
sudo systemctl start rclone-protondrive.service
Backup e monitoraggio
Job di backup locale
Per il nostro job di backup locale creiamo una cartella nella nostra home chiamata backups
e andiamo ad aggiungere un repository su Backrest
Generiamo e inseriamo una password che servirà per cifrare i nostri dati.
Ora andiamo a impostare un job di backup, scegliamo il repository locale appena creato e andiamo a selezionare come path da backuppare la cartella che abbiamo montato con rclone /mnt/ProtonDrive
.
Scheduliamo il nostro job di backup, io effettuerò un backup settimanale ogni Sabato alle 02:00 scegliendo l’opzione cron
.
Proviamo ad eseguire il nostro job di backup per verificarlo.
Job di backup remoto
L’ideale sarebbe seguire la regola “3-2-1”: 3 copie del dato, in due media diversi e una off-site.
Ho acquistato dal datacenter Hetzner a pochi euro una Storage Box da 1 TB che ci permette di avere uno spazio remoto accessibile con ad esempio SMB o SFTP e con snapshot inclusi.
Dopo aver acquistato il nostro spazio e aver ottenuto le credenziali possiamo creare un sotto-account per accedere ad una sola cartella all’interno della nostra storage box con username e password dedicati.
Per permettere a Backrest di accedere senza password dobbiamo configurare l’accesso tramite chiave SSH come descritto qui.
Creiamo un altro repository su Backrest con e inseriamo su repository url account e url della storage box in questo formato sftp:[email protected]:
Ora possiamo creare un job e selezionare questo repository remoto.
Ripristino dei dati
Backrest ci permette di esplorare il nostro snapshot e selezionare il file/cartella che vogliamo ripristinare selezionando il job completato con successo
Monitoraggio
Una cosa importantissima è quella di avere la possibilità di monitorare i propri backup e avere una notifica se qualcosa non va.
Io utilizzerò healthchecks.io che ci dà la possibilità di creare dei job di monitoraggio gratuitamente, la nostra applicazione dovrà richiamare un URL entro un certo periodo, se questa cosa non avviene riceveremo una notifica.
Per utilizzarla su Backrest aggiungiamo al nostro job di backup un “hook”, selezioniamo Healthchecks e su condition importiamo CONDITION_SNAPSHOT_SUCCESS
.
Nel campo PING URL inseriamo l’url configurato su healthchecks.io
Conclusione
In questa architettura abbiamo un ambiente dedicato ad effettuare dei backup, Backrest può essere usato anche solo per effettuare i backup dei dati del nostro PC installandolo in locale.