El caso de perder todos los datos de una o varias web por algún hackeo o por errores de disco es uno de las peores pesadillas de cualquier webmaster. Aquí les dejo un tutorial de como realizar correctamente un sistema de copia de seguridad basado en bash en un entorno Linux muy práctico y fácil de poder aplicar a todos los sistemas.
En este ejemplo trabajaremos con una web a medida realizada con php y mysql. Empezamos con el bash que se va a encargar de hacer todo el sistema.
Lo primero que remarco para hacer un buen sistema de copias de seguridad es colcar en una variable la fecha
Lo realizamos de esta forma
d=$(date +%Y-%m-%d)
Bien lo segundo que realizo es las copias de seguridad de las bases de datos, aquí siempre tuve el problema que me pedía la contraseña de la base de datos y como en realidad lo que necesitaba que sea automático entonces encontré una solución sencilla capaz incluso se encuentre en la documentación misma del mysql y nunca lo llegue a leer quedaría algo así.
mysqldump -u USUARIO -pCONTRASEÑA NOMBRE_BD > DIRECCION_DE_BACKUP.sql
Lo seguido seria realizar un comprimido para ahorrar tiempo y espacio al momento de realizar una transferencia a otro equipo
tar -zcvf DIRECCION_DE_BACKUP/$d-sql.tar.gz DIRECCION_DONDE_GUARDAR_COMPRIMIDO
Esto nos dará un resultado de nombre de archivo 2019-12-02.tar.gz
Bien una vez que tengamos el archivo sql comprimido pasamos a comprimir todos los archivos que tiene nuestro sitio web asi que utilizaremos la misma forma de comprimir como lo hicimos con la base de datos.
tar -zcvf DIRECCION_DE_BACKUP/$d-NOMBRE_DE_LA_WEB.tar.gz DIRECCION_DONDE_GUARDAR_COMPRIMIDO
Esto nos dará como resultado 2019-12-02-NOMBRE_DE_LA_WEB.tar.gz es muy importante que coloques el nombre para poder luego diferenciar.
Con eso ya tenemos un sistema de copia de seguridad pero aún no se encuentra terminado ya que si por algún problema de servidor o de disco duro tiene alguna falla pues estaríamos en graves problemas aun. Para esto lo que haremos es utilizar la función SCP que nos trae los sistemas Linux.
Pasamos ahora a la configuración del servidor para eso con las siguientes líneas, en el servidor de producción nos vamos a nuestro home y colocamos lo siguiente.
Ssh-keygen –b 4096 –t rsa
Esto nos va a generar un .ssh/id_rsa y otro archivo .ssh/id_rsa.pub que serían nuestras llaves publicas y privadas.
Lo que nos sigue es copiar la llave publica a nuestro servidor de copias de seguridad
Scp .ssh/id_rsa.pub root@servidor:.ssh/nueva_clave
En el lado del servidor de copia de seguridad realizamos lo siguiente nos podemos conectar por medio de ssh desde el servidor de producción para esto.
Ssh root@servidor Cd .ssh/ Cat nueva_clave >> authorized_keys
Luego nos queda asignar los permisos correspondientes
Chmod 0700 .ssh/ Chmod 0600 .ssh/authorized_keys
Con esto ya tenemos configurado nuestro scp para que no nos pida contraseña cada vez que se conecte.
Ahora estamos listos para poder enviar los archivos al servidor de copias de seguridad y realizamos lo siguiente en nuestro bash
scp DIRECCION_DE_BACKUP/$d-sql.tar.gz root@servidor:/DIRECCION_DONDE_GUARDAR_LA_COPIA/$d-sql.tar.gz scp DIRECCION_DE_BACKUP/$d-NOMBRE_DE_LA_WEB.tar.gz root@servidor:/DIRECCION_DONDE_GUARDAR_LA_COPIA/$d-NOMBRE_DE_LA_WEB.tar.gz
Nuestro ultimo paso para todo esto es eliminar los archivos generados en todo el sistema de copia de seguridad para servidores Linux para los sistemas web o paginas web.
Utilizamos un rm para todos los archivos de esta manera
rm DIRECCION_DE_BACKUP.sql rm DIRECCION_DE_BACKUP/$d-sql.tar.gz rm DIRECCION_DE_BACKUP/$d-NOMBRE_DE_LA_WEB.tar.gz
El último paso y más importante que debemos hacer es utilizar la maravillosa herramienta del cron. Con esto estaríamos indicando con que frecuencia realizar la copia de seguridad.
Iniciamos de esta manera en la consola escribimos
Contrab –e
Y colocamos en la última línea lo siguiente:
0 */12 * * * /DIRECCION_DEL_BASH.sh
Así está configurado para que cada 12 horas todos los días realice la copia de seguridad.
Aqui dejo el codigo completo del archivo bash
#!/bin/bash d=$(date +%Y-%m-%d) mysqldump -u USUARIO -pCONTRASEÑA NOMBRE_BD > DIRECCION_DE_BACKUP.sql tar -zcvf DIRECCION_DE_BACKUP/$d-sql.tar.gz DIRECCION_DONDE_GUARDAR_COMPRIMIDO tar -zcvf DIRECCION_DE_BACKUP/$d-NOMBRE_DE_LA_WEB.tar.gz DIRECCION_DONDE_GUARDAR_COMPRIMIDO scp DIRECCION_DE_BACKUP/$d-sql.tar.gz root@servidor:/DIRECCION_DONDE_GUARDAR_LA_COPIA/$d-sql.tar.gz scp DIRECCION_DE_BACKUP/$d-NOMBRE_DE_LA_WEB.tar.gz root@servidor:/DIRECCION_DONDE_GUARDAR_LA_COPIA/$d-NOMBRE_DE_LA_WEB.tar.gz rm DIRECCION_DE_BACKUP.sql rm DIRECCION_DE_BACKUP/$d-sql.tar.gz rm DIRECCION_DE_BACKUP/$d-NOMBRE_DE_LA_WEB.tar.gz