Um pequeno blog pessoal e meia dúzia de projectos pessoais podem não ser os dados mais importantes do mundo mas não deixa de fazer sentido manter backups regulares. Se isto não é problema para quem contrata um serviço completo de alojamento onde é costume serem feitos backups regulares passa a ser para malta como eu que prefere aventurar-se sozinho num VPS.
Então tive uma ideia (e claramente não fui o primeiro): porque não usar uma conta gratuita no Dropbox como espaço off-site para os backups? (btw este link dá 256mb de bónus a quem o usar para se inscrever)
Posto isto meti mãos à obra.
1. Script backup
O primeiro ponto foi criar um pequeno script para fazer os backups de forma automatizada. Não é o melhor script do mundo (ainda estou a ponderar usar o rsync) mas serve para algo simples como o meu site pessoal.
#!/bin/sh
mysql_user="user1"
mysql_pass="password"
timestamp=`date +%s`
mysqldump --user $mysql_user -p$mysql_pass --all-databases --opt | gzip > mysql-$timestamp.sql.gz
tar -czpf docs-$timestamp.tar.gz /var/www
tar -czf backup-$timestamp.tar.gz mysql-$timestamp.sql.gz docs-$timestamp.tar.gz
rm -f mysql-$timestamp.sql.gz docs-$timestamp.tar.gz
chown user1:user1 backup-$timestamp.tar.gz
mv backup-$timestamp.tar.gz ~user1/Dropbox/
Como podem ver há algumas coisas que é preciso fazer para este script funcionar. Primeiro foi preciso adicionar um user novo ao MySQL para fazer o backup das bases das dados (são necessárias permissões globais para SELECT e LOCK TABLES) e depois adicionei um novo utilizador ao sistema que vai correr o daemon da Dropbox.
Depois, para o script correr periodicamente bastou adiciona-lo ao crontab do utilizador root:
# crontab -e
Um exemplo de linha a adicionar ao crontab seria a seguinte (que corre ás 5 da manhã do dia 30 de cada mês):
* 5 30 * * /root/scripts/backup.sh > /dev/null %2>1
2. Instalar Dropbox
Agora temos de instalar o daemon da Dropbox no nosso servidor e coloca-lo a correr debaixo do utilizador que criamos para o efeito.
$ cd ~
$ wget -O dropbox.tar.gz http://www.dropbox.com/download/?plat=lnx.x86
$ tar xzf dropbox-lnx.x86-0.7.110.tar.gz
$ .dropbox-dist/dropboxd
Depois de correr o programa pela primeira vez ele vai mostrar um endereço URL que deve ser visitado usando um qualquer browser. O URL não vai mostrar qualquer confirmação mas se forem à tab de eventos no site da Dropbox vão ver o vosso servidor associado à conta em questão e a sincronização vai começar a funcionar.
Agora é um bom momento para terminar o processo da dropbox e criar o script que vai ser usado para arrancar a dropbox como daemon. As instruções que se seguem são para CentOS 5, para a vossa distribuição de linux vejam a wiki da Dropbox.
Como root criem um ficheiro
/etc/init.d/dropbox
com o seguinte conteúdo:# chkconfig: 345 85 15
# description: Startup script for dropbox daemon
#
# processname: dropboxd
# pidfile: /var/run/dropbox.pid
#
# Source function library.
. /etc/rc.d/init.d/functions
DROPBOX_USERS="user1"
prog=dropboxd
lockfile=${LOCKFILE-/var/lock/subsys/dropbox}
RETVAL=0
start() {
echo -n $"Starting $prog"
for dbuser in $DROPBOX_USERS; do
daemon --user $dbuser /home/$dbuser/.dropbox-dist/dropboxd &
done
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}
stop() {
echo -n $"Stopping $prog"
for dbuser in $DROPBOX_USERS; do
killproc dropbox
done
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
status() {
for dbuser in $DROPBOX_USERS; do
dbpid=`pgrep -u $dbuser dropbox`
if [ -z $dbpid ] ; then
echo "dropboxd for USER $dbuser: not running."
else
echo "dropboxd for USER $dbuser: running."
fi
done
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo $"Usage: $prog {start|stop|restart|status}"
RETVAL=3
esac
exit $RETVAL
Não se esqueçam de o tornar executável e de mudar o nome do utilizador no topo. Aviso também desde já que este script não deve ser muito solido nomeadamente na parte de parar o serviço. Se alguém quiser sugerir melhorias estejam à vontade.
Com isto a Dropbox já está a funcionar, o script já está a correr mensalmente e “automagicamente” vão ver os backups aparecerem na pasta da Dropbox. Agora fiquem é avisados, um backup da minha VPS ocupa sensivelmente 350mb pelo que bastam cerca de 5/6 meses para encher uma conta da Dropbox pelo que vale a pena ir rodando os backups para poupar espaço. E não se esqueçam também de ir testando os backups não vá chegar o dia em que são precisos e se depararem com um belo ficheiro corrupto em vez do dump da base de dados por exemplo.
Referencias: