I backup sono importanti, anzi, fondamentali.
Ho la necessità di mantenere sempre aggiornati e monitorati i backup di diversi siti internet che gestisco e per farlo ho deciso di affidare il compito ad alcuni script creati ad hoc sul NAS Synology che vi illustro suddividendo le casistiche in Hosting Condivisi e VPS.
Ognuna delle seguenti modalità, necessita la creazione di un’operazione pianificata sul pannello di controllo del Synology; la creazione è semplicissima e si effettua da questo pannello

Backup Hosting Condiviso (opzione 1)

In caso di hosting condiviso, è necessario utilizzare uno script che si connetta tramite protocollo FTP all’hosting e scarichi in una cartella predestinata i files di cui abbiamo bisogno; lo script che ho pensato presuppone l’uso di un plugin lato wordpress di nome Backwpup che si occupa di effettuare il backup di files e DB SQL salvandoli all’interno della cartella /uploads/backup/:

 

# Cerca tutti i files più vecchi di due giorni all'interno della cartella di destinazione del backup ed eliminali
find /volume1/cartella/destinata/al/backup/ -type f -mtime +2 -exec rm {} \;
# Scarica da FTP tutti i file che il plugin ha generato all'interno della cartella ed elimina i nomi delle 4 cartelle nella struttura
wget -m -nH --cut-dirs=4 ftp://user:password@host/www/wp-content/uploads/backup/20* -P /volume1/cartella/destinata/al/backup/

Backup Hosting Condiviso (opzione 2)

Nel caso in cui non abbiamo necessità di effettuare il backup del Database SQL, vuoi perché abbiamo acquistato il servizio di backup automatico dall’hosting o perché vogliamo delegare il compito a phpmyadmin, per esempio, possiamo sfruttare lo stesso script, ma strutturato in maniera diversa:

# Cerca tutti i files più vecchi di due giorni all'interno della cartella di destinazione del backup ed eliminale
find /volume1/cartella/destinata/al/backup/ -type f -mtime +2 -exec rm {} \;
# Scarica da FTP l'intera root dell'hosting in una cartella temporanea
wget -m ftp://user:password@host/www/* -P /tmp/backup-$(date +%Y-%m-%d)/
# Comprimi il contenuto della cartella temporanea in un file che comprende la data odierna
tar -zcvf /volume1/cartella/destinata/al/backup/backup-$(date +%Y-%m-%d).tar.gz /tmp/backup-$(date +%Y-%m-%d)/

Backup VPS

In caso di VPS il discorso cambia in maniera radicale e a tutto lo script va premesso il fatto che il VPS sia collegato in VPN al proprio Synology e sia stata attivata la condivisione NFS della cartella che contiene tutte le webfolder; premesso questo vediamo come gestirne i backup:

In primo luogo va caricata la cartella remota NFS tramite FileStation:

Dopodiché possiamo creare la procedura che ci permette di copiare l’intera cartella montata in una cartella locale al nostro NAS.

# Cerca tutte le cartelle più vecchie di sette giorni all'interno della cartella di destinazione del backup ed eliminale
find /volume1/cartella/destinata/al/backup/ -ctime +7 -exec rm {} \;
# Crea la cartella con data odierna per il backup
mkdir /volume1/cartella/destinata/al/backup/VPS-$(date '+%d-%b-%Y')
# Copia il contenuto della cartella montata sulla cartella precedentemente creata
cp -r /volume1/cartella/remota/montata/in/nfs/* /volume1/cartella/destinata/al/backup/VPS-$(date '+%d-%b-%Y')/

Per poter implementare in questa soluzione anche il dump di tutti i database di mysql, ho creato uno script da compilare e da inserire sul VPS in esecuzione automatica tramite cron: tale script si occupa di effettuare un dump di tutti i DB presenti su MySQL in files separati all’interno di una cartella (io ho scelto una cartella presente nel mount NFS).
Lo script che ho chiamato backupmysql.sh si presenta cosi:

#! /bin/bash
TIMESTAMP=$(date +"%F")
BACKUP_DIR="/cartella/che/condivido/in/nfs"
MYSQL_USER="MySQLUser"
MYSQL=/usr/bin/mysql
MYSQL_PASSWORD="MySQLPassword"
MYSQLDUMP=/usr/bin/mysqldump
mkdir -p "$BACKUP_DIR/"
databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)"`
 for db in $databases; do
$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/mysql/$db.gz"
done