Avere un server linux è sempre stato uno dei miei sogni. Avere un php nativo, .htaccess, permessi alle cartelle con un clic, aggiornamenti via SSH una figata pazzesca. Purtroppo però il mio collega ha sempre programmato in ASP e quindi non era possibile abbandonare Windows (ASP non gira su linux perchè è un linguaggio proprietario di Microsoft), ma ora che “comando” io e ormai ho un po’ di esperienza con PHP, ho deciso di affiancare al nostro windows 2008r2, un server dedicato Centos, così da poter approfondire sia Linux che SSH e tutte le conseguenze.
Register.it ci ha fatto un’offerta e abbiamo preso una bella macchinetta, con tanto di WMH e cPanel.
Però l’esperienza mi ha insegnato che nessun Server, nessuna Server Farm, nessuna Pen Drive è affidabile al 100%; ma finchè si tratta delle foto della comunione di tua cugina, puoi limitarti ad imprecare, ma se si tratta del sito ecommerce di un tuo cliente, beh, bestemmiare serve a poco.
Quello che mi piace a me è avere sempre una copia dei file su una macchina mia, da poter “toccare” ed eventualmente recuperare senza troppi sbattimenti e crisi isteriche. Se con Windows puoi schedulare un backup, lo puoi fare anche con linux.
Esistono almeno 450000 metodi differenti, io ho scelto questo:
- compressione della cartella
- invio via FTP su un altro server (meglio se proprio o su un altro provider)
- cancellazione dei file più vecchi
ogni due giorni
Il backup dei file
tutto si sviluppa tramite la possibilità, sul server, di creare un file batch che esegua diverse operazioni a cascata, richiamabile tramite cron. quindi, tramite cPanel, vado nella gestione dei file e creo un file nella home, io l’ho chiamato “backup-aculine.sh“, un nome vale l’altro, e sempre da lì dentro, modifico il file con tasto destro “edit”.
Nel file scriverò:
#!/bin/bash DATE=$(date +%d-%m-%Y) BACKUP_DIR="/home/aculine/aculine-backup" mkdir -p $BACKUP_DIR/$DATE # take each website backup in separate name, use below format. tar -zcvpf $BACKUP_DIR/$DATE/theme-$DATE.tar.gz /home/aculine/public_html/wp-content/ # Delete files older than 10 days find $BACKUP_DIR/* -mtime +10 -exec rm {} \; #!/bin/sh USERNAME="xxxxx" PASSWORD="xxxxx" SERVER="xxxx" cd $BACKUP_DIR/$DATE/ # local directory to pickup *.tar.gz file FILE="wp-content-$DATE.tar.gz" # remote server directory to upload backup #BACKUPDIR="/" # login to remote server ftp -n -i $SERVER <<EOF user $USERNAME $PASSWORD #cd $BACKUPDIR mput $FILE quit EOF
Lo spiego leggermente:
alla riga 2) imposto una variabile che contenga la data odierna
alla riga 3) imposto una variabile con il percorso dove salvare i backup creati
alla riga 5) creo la cartella principale e la sua sottocartella che si chiamerà con la data della riga 2
alla riga 8) comprimo il contenuto di /home/aculine/public_html/wp-content (in questo caso è un wordpress e mi serve solo questa cartella)
alla riga 10) cancello i file più vecchi di 10 giorni
— il backup è creato nella cartella, ora passo a caricarlo via FTP —
alle righe 12/13/14 creo le variabili con le credenziali per il collegamento via FTP
alla riga 16) apro la cartella locale dove c’è il backup creato
alla riga 19) imposto una variabile con il nome del backup che devo trasferire
alla riga 22) imposto una cartella nel server remoto (in questo caso è disattivata perchè mi collego già alla cartella corretta)
dalla riga 25) trasferisco il file e chiudo il tutto.
Cron
la programmazione del lancio di questo script è semplice, basta lanciarlo ogni due giorni.
Come al solito questo post è scritto sostanzialmente per me, ma visto che ci ho messo un po’ a trovare quali erano i corretti parametri e a far funzionare il tutto, volevo condividerlo. So che ci sono metodi più “linuxiani” e puliti, ma oh, funziona anche questo. ;)