Ispconfig, un potente ma al contempo semplice pannello di controllo per gestire i propri siti, tra le tante opzioni e possibilità ti offre anche la schedulazione dei backup di siti e relativi database. Il “problema” è che questi backup vengono salvati in una posizione non raggiungibile tramite Ftp e quindi diventa relativamente complesso salvarseli su un proprio sistema di backup.
Ti chiederai “ma perchè se già vengono salvati da Ispconfig dovrei salvarmeli ulteriormente da qualche altra parte?”

Hem, se ti stai facendo questa domanda allora mi sa che conviene ti ripassi un pochino i concetti base della sicurezza informatica….

E se il server ti si “brucia”? Si rompe il disco. Oppure vuoi costruirti un cluster (come descritto nell’articolo relativo). Oppure viene compromesso il server. Che fine faranno i tuoi backup? Ovviamente sono andati persi…

Per fortuna la soluzione è molto semplice, ovvero salvarsi i backup su un altro server o sul proprio Pc. Ma come fare, visto che abbiamo detto che i backup vengono salvati “fuori dalla root dir dei siti”? Con una serie di script, ovvio!!
Vediamoli

Primo script, ovvero il sistema che esegue materialmente la copia dei backup

#!/bin/bash
### Imposto la data
oggi=$(date +%Y%m%d)
### Mi connetto e faccio la copia dei file
scp xxx.xxx.xxx.xxx:/backupDB/rotati/”$oggi”*.* /backup/BckServer1/database/
### Cancello i vecchi backup
find/backup/BckServer1/database/* -mtime +90 -exec rm {} \;
### Ora prendo i backup dei siti
bkdate=$(date +%Y-%m-%d -d “yesterday”)
for cur in $(ssh xxx.xxx.xxx.xxx ls /var/backup/); do
scp xxx.xxx.xxx.xxx:/var/backup/$cur/web*$bkdate*.gz /backup/BckServer1/siti/$cur.web.tar.gz
done
/root/cronscript/ruotaNomiServer1.sh
### Cancello i vecchi backup
find /backup/BckServer1/siti/rotati/*/* -mtime +90 -exec rm {} \;

Come sicuramente noterete, il sistema di backup va a cercare i database dentro “backupDB/rotati”, che però non è una posizione standard. Siamo noi che, sul server con Ispconfig, installeremo un altro script affinchè esegua i backup dei database in modo “particolare”. Lo script va impostato come segue, DOPO aver impostato la cartella di backup dei database tramite webmin (o equivalente) su /backupDB

#!/bin/bash
estensione=’bz2′
oggi=$(date +%Y%m%d)

for cur in $(ls /backupDB/*.$estensione); do
mv $cur “/backupDB/rotati/”$oggi”_”$(basename $cur)
done
find /backupDB/rotati/* -mtime +30 -exec rm {} \;

L’ultimo script è /root/cronscript/ruotaNomiServer1.sh (sul pc), che è il seguente

#!/bin/bash
oggi=$(date +%Y%m%d%H)
estensione=’tar.gz’
for cur in $(ls /backup/BckServer1/siti/*.$estensione); do
base_name=$(basename $cur)
IFS=. read dir_name file_name estensione <<< “$base_name”
if [ ! -d “/backup/BckServer1/siti/rotati/$dir_name” ]; then
mkdir /backup/BckServer1/siti/rotati/$dir_name
fi

mv $cur “/backup/BckServer1/siti/rotati/$dir_name/$file_name””_”$oggi”.”$estensione
done

Quindi ricapitolando, il primo e il terzo script vanno installati sul pc/server che usiamo come copia di sicurezza, il secondo sul server con Ispconfig. Sul pc/server “di sicurezza” non resta altro che impostare il crontab affinchè esegua il primo script, preferibilmente intorno alle 4 o 5 del mattino in modo che non interferisca troppo sui visitatori dei siti.

Con questi semplici script, abbiamo un sistema di backup dei backup molto semplice ma efficiente!