Backups automáticos de ficheros y base de datos a Amazon S3

Hoy he tenido una pesadilla, he soñado que se caían todas mis webs me he levantado y así ha sido, no me lo podía creer todas mostraban un mensaje forbbiden.

Por suerte con reiniciar el servidor ha sido suficiente, la verdad es que no tengo ni idea que ha ocurrido.

La lección que me llevo de esto es que no tenía un backup reciente, así que hoy me he puesto a hacer un script para subir copias de todo a Amazon S3, por si alguien le puede interesar.

El script bash que comprime todos los ficheros y las bases de datos de cada una de las webs que tengas alojadas en un servidor VPS gestionado con el panel de control Vesta y sube una copia de seguridad fuera del servidor en Amazon S3.

Requisitos

  • VPS con acceso por SSH.
  • Panel de control Vesta.
  • Linux como sistema operativo.
  • Cuenta en Amazon AWS.

Crea un usuario en Amazon AWS

  1. Inicia sesión en el panel de Amazon AWS.
  2. Entra en el menú de usuario, Mis credenciales de seguridad.
  3. Añade un usuario con el permiso AmazonS3FullAccess.
  4. Apunta el ID y la clave de acceso para más tarde.

Crea un bucket en Amazon S3

  1. En el panel de Amazon AWS, busca el servicio S3.
  2. Crea un bucket.
  3. Apunta el nombre del bucket para más tarde.

Instala el comando awscli en el servidor

  1. Entra en tu servidor con un cliente SSH por ejemplo Putty o Termius.
  2. Instala awscli, según tu distribución linux el comando puede ser diferente:
    yum install awscli (centos)
    apt-get install awscli (debian, ubuntu)

Configura awscli

  1. Ejecuta en la terminal:
    aws configure
  2. Sigue el asistente, aquí te preguntará por el ID y clave de acceso.

Estructura de carpetas

En el VPS que uso todas las webs se encuentran en el directorio:
/home/admin/web/

Crea estas carpetas para los ficheros temporales del backup:
/home/admin/BACKUPS/
/home/admin/BACKUPS/DB/
/home/admin/BACKUPS/WEBS/

Asigna permisos de escritura a las últimas dos carpetas:
chmod +w /home/admin/BACKUPS/DB/
chmod +w /home/admin/BACKUPS/WEBS/

¿Cómo saber el usuario y contraseña general de la base de datos mysql?

  1. Ejecuta este comando:
    nano /usr/local/vesta/conf/mysql.conf
  2. Te debería salir algo así:
    USER=’xxxxxxx’ PASSWORD=’xxxxxxx’
  3. Apuntalo para el siguiente paso.

Script bash para hacer backup

Crea un fichero llamado backup_all.sh con este contenido en:
/home/admin/backup_all.sh

Modifica estas variables del script:

  • DB_USER: usuario de la base de datos.
  • DB_PASS contraseña de la base de datos.
  • BUCKET: nombre del bucket de S3.
  • DIR: directorio donde se alojan las webs.
    Puedes modificar la ruta /home/admin/web/ si tu servidor aloja las webs en otro directorio.

Asigna permisos de ejecución al script bash con el siguiente comando:
chmod +x /home/admin/backup_all.sh

Posible problema de codificación

Si itentas ejecutar el script y te sale un error de \r, por ejemplo:
«línea 1: $’\r’: no se encontró la orden»

Tendrás que instalar dos2unix:
apt-get install dos2unix
o en caso de que uses CentOS
yum install dos2unix

Luego ejecutar este comando para solucionar el problema de codificación
dos2unix /home/admin/backup_all.sh

Configura el cron para hacer backups de forma automática

Lo puedes configurar en el panel de control Vesta en el apartado de Tareas o por terminal con el comando «crontab -e».

Ejecutar cada día a las 00:00
0 0 * * * /home/admin/backup_all.sh >/dev/null 2>&1

Ejecutar solo los domingos a las 00:00
0 0 * * 0 /home/admin/backup_all.sh >/dev/null 2>&1

Si el usuario que ejecuta los crons es distinto al usuario root

Si el usuario del cron es diferente a root (whoami) hay que hacer lo siguiente par que no salga el error «Unable to locate credentials»

mkdir /home/USUARIO-CRON/.aws/
cp /root/.aws/config /home/USUARIO-CRON/.aws/config
cp /root/.aws/credentials /home/USUARIO-CRON/.aws/credentials
chown USUARIO-CRON /home/USUARIO-CRON/.aws/config
chown USUARIO-CRON /home/USUARIO-CRON/.aws/credentials

Backups automáticos de ficheros y base de datos a Amazon S3
Valorar

Comentarios

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.