Copias de seguridad WordPress con restic

Hacer copias de seguridad de sitios grandes con WordPress puede complicarse. Si este es tu caso, quizá te interese hacer alguna copia con restic.

Este tutorial ha sido creado en un VPS de Clouding.io. Puedes crear tu propio VPS desde 3€/mes.

Además, tienes la posibilidad de crear tu VPS con la imagen de WordPress en un clic.

COLABORACIÓN

Objetivos y requisitos

El objetivo de usar este sistema es el de crear copias de seguridad con un acceso rápido, pero desde consola (CLI). Hay que tener en cuenta que esta herramienta usa un sistema de snapshots, por lo que no se podrá acceder a cada fichero en el lugar del alojamiento de datos.

En casos de tener un sitio WordPress grande, a veces es problemático usar un plugin, o las copias de seguridad de un panel tipo Plesk o cPanel, por lo que tendremos que hacer las copias de forma más manual.

Además, este sistema también puede servidor como una copia secundaria a un sistema que ya esté establecido.

Este tutorial se va a probar en:

  • Ubuntu 22
  • WordPress
  • Wasabi (almacenamiento externo)

Instalando restic

Lo primero que hemos de hacer es instalar la propia herramienta, restic.

apt-get -y install restic

Podemos, añadirle, además, el sistema de auto-completado.

restic generate --bash-completion /etc/bash_completion.d/restic

Configurando un almacenamiento

Existen distintos tipos de almacenamiento externo para restic. En este caso vamos a hacer la prueba con Wasabi, un sistema de almacenamiento compatible-S3.

Como en cualquier sistema de este tipo, necesitaremos 4 datos:

  • Access Key (ejemplo: 3Q7WB7Y98VHMWN4XEVEB)
  • Secret Key (ejemplo: ySXTLpQnqanfHLHM9RA6VXb3SjRaFG22ryuhRvGc)
  • Repositorio (ejemplo: eu-west-2)
  • Nombre del bucket (ejemplo: vps-1-2-3-4)

Además, cada instalación de restic tiene una contraseña con la que cifra los datos en el sitio remoto, y que deberás guardar si quieres restaurar en otra máquina.

Con esto, podemos crear un fichero en el que incluir todos estos datos:

cat > /root/.restic-env << EOF
export AWS_ACCESS_KEY_ID=3Q7WB7Y98VHMWN4XEVEB
export AWS_SECRET_ACCESS_KEY=ySXTLpQnqanfHLHM9RA6VXb3SjRaFG22ryuhRvGc
export RESTIC_REPOSITORY="s3:s3.eu-west-2.wasabisys.com/vps-1-2-3-4"
export RESTIC_PASSWORD="A326AVTjhgdkmA2TukB2J3UcmbuJ2cT98YMp"
EOF

Primera prueba

Ahora que tenemos la herramienta y la configuración, podemos hacer una primera prueba de funcionamiento.

Lo primero que haremos es cargar la configuración.

source /root/.restic-env

Después, comprobaremos que se ha cargado. Al ejecutarlo, deberá mostrar la ruta del almacenamiento. Si no aparece nada es que no se ha cargado la configuración correctamente.

echo $RESTIC_REPOSITORY

Ejecutaremos la herramienta. En este momento hace comprobaciones de conectarse con el almacenamiento remoto.

restic init

Y podemos listar los snapshots disponibles. La primera vez nos debería mostrar un listado vacío.

restic snapshots

Script de backup

Como el objetivo es automatizar las copias de seguridad, vamos a crear un script en Bash que haga todo el trabajo por nosotros.

El script podría ser similar al siguiente (hay que adaptar las rutas, nombres y demás).

if [ ! $RESTIC_REPOSITORY ]
then
  source /root/.restic-env
  echo $RESTIC_REPOSITORY
  restic init
fi

restic backup /etc/

mkdir -p /backups-db/
mysqldump --quick --skip-lock-tables --single-transaction --quick --verbose example-com-db | zip > /backups-db/example-com-db-$(date +\%F-\%T).sql
restic backup /backups-db/
rm -rf /backups-db/

restic backup /webs/example.com/

Cargando la configuración

El primero de los bloques es la validación y carga de la configuración.

if [ ! $RESTIC_REPOSITORY ]
then
  source /root/.restic-env
  echo $RESTIC_REPOSITORY
  restic init
fi

Aquí, básicamente lo que validamos es si la configuración está cargada. Si lo está, sigue adelante. Si no lo está, la carga y conecta con el sistema de almacenamiento remoto.

Copia de las configuraciones

La primera copia que haremos es la de las configuraciones generales de la máquina.

restic backup /etc/

Copia de la base de datos

El segundo elemento al que vamos a hacer la copia es a la base de datos. En este caso haremos primero un MySQLdump y ese fichero generado será el que usemos.

mkdir -p /backups-db/
mysqldump --quick --skip-lock-tables --single-transaction --quick --verbose example-com-db | zip > /backups-db/example-com-db-$(date +\%F-\%T).sql
restic backup /backups-db/
rm -rf /backups-db/

Copia de los ficheros

Por último copiaremos los ficheros del propio WordPress.

restic backup /webs/example.com/

Listar los snapshots

Ahora que tenemos ya varias copias hechas, podemos ver el listado de qué se podría recuperar.

restic snapshots

Algo que nos devolverá algo como:

repository cgms3tqn opened successfully, password is correct
ID        Time                 Host                Tags        Paths
--------------------------------------------------------------------
af9qtv5m  2022-06-13 18:24:04  example.com                     /etc
26kkqczj  2022-06-13 18:24:18  example.com                     /backups-db
44z2cta5  2022-06-13 18:24:29  example.com                     /webs/example.com
4tdrn8zx  2022-06-13 18:53:42  example.com                     /etc
v3y8d9ee  2022-06-13 18:53:46  example.com                     /backups-db
4j9qs4m2  2022-06-13 18:53:50  example.com                     /webs/example.com

Recuperar un snapshot

Si queremos recuperar una de las copias, podemos hacerlo sobre los ficheros existentes, o podemos recuperarlo en una carpeta temporal para buscar los ficheros que necesitamos.

restic restore 26kkqczj --target /tmp/restore

Si accedemos a la carpeta /tmp/restore, podremos encontrar la restauración del snapshot.


Sobre este documento

Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.

Servicios de Administración de Sistemas WordPress

¿Tienes un sitio web con WordPress de alto tráfico? ¿Eres una Agencia con servidores con cPanel, Plesk u otro panel en los que mantienes WordPress para tus clientes?

Si es así y te interesa un servicio profesional de mantenimiento de infraestructura WordPress y de mejora del rendimiento de tus sitios web o los de tus clientes, contacta conmigo.