Backup automático de cPanel a Amazon S3 (linux)

junio 20, 2011

Este es un tutorial sencillo para automatizar backups desde cPanel a Amazon S3 100% automatico.  Existen varias guias en linea para hacer estas mismas funciones de varias maneras pero en mi experiencia la forma que describo debajo es la mas sencilla y efectiva.

El proceso es sencillo.  Para esta guia vas a necesitar:

El primer paso es sencillo:

root@neutron:~# yum install s3cmd

En mi caso estoy en CentOS y por eso uso yum, si estas en Ubuntu, necesitas apt-get.  Si no encuentra el paquete, necesitas agregar el repositorio.  Para esto visita: http://s3tools.org/repositories

Dependiendo de tu plataforma, agrega el repositorio necesario.  En mi caso es CentOS.  En mi caso esto seria:

root@neutron:~# cd /etc/yum.repos.d

Aquí insertamos el repositorio:

root@neutron:~# wget http://s3tools.org/repo/CentOS_5/s3tools.repo

Con el repositorio ya agregado, ahora si puedes instalar:

root@neutron:~# yum install s3cmd

Ahora necesitamos configurar s3cmd.  Es muy sencillo e interactivo:

root@neutron:~# s3cmd --configure

Te pedirá tus credenciales de Amazon AWS y otras preguntas triviales.  Al final el hara una prueba de conección y si todo esta correcto puedes aceptar la configuración.  Esta sera salvada en:

root@neutron:~# /root/.s3cfg

Si recibes errores de Amazon tratando de conectar asegurate que tus credenciales estan correctamente insertadas.  Tambien asegurate que tu servidor tiene la hora correctamente configurada ya que Amazon no te permite conectarte si tu hora en el servidor difiere mucho de la hora en el servidor de Amazon AWS.

Si todo esta correcto, puedes crear tus buckets en Amazon AWS desde el CLI:

root@neutron:~# s3cmd mb s3://backup.servername.com

Ahora habilita los backups automaticos del WHM, para mas info en como hacerlo, visita: https://documentation.cpanel.net/display/ALD/Backup+Configuration

Si ya tenias configurado los backups y no sabes en que directorio estan guardados, es facil obtener este valor:


root@neutron:~#grep BACKUPDIR /etc/cpbackup.conf
BACKUPDIR /backup
root@neutron:~#

Dentro de ese folder vas a encontrar posiblemente otros folders dependiendo de la configuracion de tus backups, si son diarios, semanales, mensuales, etc.  Por el momento y para los fines de esta guia vamos a trabajar con los backups diarios, en este sentido vamos a trabajar con el folder «daily».

Ahora vamos a crear un directorio para guardar los logs:

root@neutron:~# mkdir /var/log/backuplogs

Ahora vamos a crear un script que hara todo el proceso automatico:

root@neutron:~# vi /root/dailybackup.sh

#!/bin/bash

##Notification email address
_EMAIL=your_email@domain.com

ERRORLOG=/var/log/backuplogs/backup.err`date +%F`
ACTIVITYLOG=/var/log/backuplogs/activity.log`date +%F`

##Directory which needs to be backed up
SOURCE=/backup/cpbackup/daily

##Name of the backup in bucket
DESTINATION=`date +%F`

##Backup degree
DEGREE=3

#Clear the logs if the script is executed second time
:> ${ERRORLOG}
:> ${ACTIVITYLOG}

##Uploading the daily backup to Amazon s3
/usr/bin/s3cmd -r put ${SOURCE} s3://backup.servername.com/${DESTINATION}/ 1>>${ACTIVITYLOG} 2>>${ERRORLOG}
ret2=$?

##Sent email alert
msg="BACKUP NOTIFICATION ALERT FROM `hostname`"

if [ $ret2 -eq 0 ];then
msg1="Amazon s3 Backup Uploaded Successfully"
else
msg1="Amazon s3 Backup Failed!!\n Check ${ERRORLOG} for more details"
fi
echo -e "$msg1"|mail -s "$msg" ${_EMAIL}

#######################
##Deleting backup’s older than DEGREE days
## Delete from both server and amazon
#######################
DELETENAME=$(date --date="${DEGREE} days ago" +%F)

/usr/bin/s3cmd -r –force del s3://backup.servername.com/${DELETENAME} 1>>${ACTIVITYLOG} 2>>${ERRORLOG}

Ojo, que al hacer copy/paste, las comillas son delicadas.  De ser necesario, remplaza las comillas sencillas, dobles y los guiones (-) e inserta manualmente desde tu teclado (no confies mucho en copy/paste)

Ahora necesitamos darle permiso para ejecutar el script:

root@neutron:~# chmod u+x /root/dailybackup.sh

Si quieres probar que todo esta funcionando correctamente, solo necesitas ejecutar el script:

root@neutron:~# ./dailybackup.sh

Si todo esta funcionando como te gustaría, ahora necesitamos coordinar el correr esto automaticamente luego de que cPanel ejecute sus comandos de backups de forma diaria.  Para esto cPanel provee unos «Hooks» que son muy efectivos.

Crea el siguiente archivo:

root@neutron:~# vi /scripts/postcpbackup

Dale permiso de ejecución:

root@neutron:~# chmod u+x /scripts/postcpbackup

En este archivo debes usar lenguaje perl.  Inserta lo siguiente:

#!/usr/bin/perl
system(“/root/dailybackup.sh”);

Salvalo y estas listo.  Puedes probar ejecutando:

root@neutron:~# /scripts/postcpbackup

Ese script se ejecutara luego de que el comando de backup de cpanel se ejecute, por lo que siempre estaras transfiriendo los backups mas recientes.

Espero que esto te sea de ayuda.

Es importante resaltar que no tomo crédito por esta metodología.  Esta información esta publica libremente en varios websites.  Solo he realizado modificaciones a lo que he visto originalmente que se adaptan a mis necesidades.

Saludos,
Jose R. Lopez