Muchos de los que tenemos una web en línea usamos un hosting linux y lo administramos con CPANEL, pero como podrás haber visto, si bien nos ofrece la posibilidad de hacer backups y nos da hasta un asistente de muy fácil uso e intuitivo, lo más eficiente sería que esta tarea de sacar backups sea automática, es una buena práctica hacerlo de esa forma ya que uno como humano siempre se puede olvidar o no hacerlo bien.
Te mostraré las dos formas de hacer un backup de una web cpanel, la forma manual y la automática:
La forma manual
- Iniciar sesión en tu cpanel
- Dirigirte a Asistente de copia de seguridad
- Click en backup
- Seleccionar copia completa
- Generar la copia de seguridad
- Se nos indica que está en progreso en segundo plano una copia de seguridad y cuando esté totalmente generada y lista para su descarga nos llegará un correo.
- El correo tendría una apariencia similar a ésta:
- Entonces ya tenemos el archivo comprimido listo para ser descargado, así de sencillo 😉.
Automatizada
Pero la forma en que los developers que se respeten trabajan es, en la medida de lo posible, automatizando tareas recurrentes. Primero te explicaré lo que necesitaremos:
- Cronjobs: Es una herramienta que provee cpanel para ejecutar tareas en un horario definido.
- Linux bash: Es un lenguaje de órdenes y shell de Unix/Linux en la cual escribiremos los scripts que se ejecutarán mediante cronjobs.
Ahora sí, vamos a la práctica:
- Vamos a configurar backup del directorio public_html y de una base de datos mysql, entonces crearemos dos scripts en bash, el primero lo llamaremos backup_home y al segundo backup_db, ambos con extensión "sh":
backup_home.sh
#bash copia de seguridad << bravedeveloper.com >>
#asegurarse que las rutas existen
rm -rf ~/mybackups/*.tgz
tar czf ~/mybackups/backup_`date +%Y_%m_%d`.tgz ~/public_html
backup_db.sh
#bash copia de seguridad << bravedeveloper.com >>
# Credenciales
user="xxxxx"
password="xxxxx"
host="xxxxx.domain.com"
db_name="xxxxx"
# Opciones, asegurarse que la ruta existe
backup_path="mybackups/db"
date=$(date +"%d-%b-%Y")
# Permisos de archivo por defecto
umask 177
# Generando el backup sql
mysqldump --user=$user --password=$password --host=$host $db_name > $backup_path/$db_name-$date.sql
# Borrar archivos de backup de mas de 30 dias de antiguedad
find $backup_path/* -mtime +30 -exec rm {} \;
- Subir estos scripts a nuestro directorio mediante el administrador de archivos o algún cliente FTP como Filezilla, Cyberduck, o cualquier otro, no subir en el directorio raiz por motivos de seguridad.
- Asignarle permisos 755 a los archivos bash, de lo contrario no serán ejecutados, en la siguiente imagen se muestra como se deberían ver los permisos en Cyberduck al dar clic derecho en el archivo y seleccionar información:
- Configurar cronjob, lo ubicamos en el panel de cpanel:
- Configurar hora de ejecuciones y comando, en donde indicamos la ruta en donde hemos guardado nuestro script bash, para este caso hemos configurado un backup diario a las 21 hrs.:
- De similar forma configuramos el backup para la base de datos.
- Ahora en la hora indicada, de forma automática tendremos los backups deseados en los directorios indicados en nuestros scripts, hagan la prueba.
Hay una forma de obtener un "full-backup" mediante scripts y obtener el archivo backup exactamente igual al que generamos mediante el asistente descrito en la forma manual, pero es un tanto más complejo y actualmente no disponible, ya que desde la versión Cpanel & WHM 11.25 implementaron los "security tokens" (más información aquí ) con lo cual ya no se puede hacer el intento de backup mediante una url concatenada como hasta aquel entonces, al menos no he podido hacerlo en las veces que he intentado, pero si quieres intentarlo o saber a lo que me refiero visita este enlace.
Por ello en esta entrada se presenta el backup de directorios completos y base de datos completas como una alternativa igualmente eficaz, lo que queda es aconsejarte de guardar un histórico de backups en un disco duro externo y también en la nube, ¡Ah por cierto! te doy una pista, es posible editar nuestros scripts para que los archivos de backups no se generen en nuestro directorio del hosting sino en una nube o servicio de alojamiento de archivos como box.com mediante FTP, pero eso te lo dejo como tarea 😁.
Si te ha aportado algún valor, te animo a que compartas el conocimiento, un saludo genio 😉