Automatizando la generación de backups en DDEV-Local

ddevdb.jpg
Solucionex
22
Abr 21

En el caso de tener un proyecto crítico, en el que nos interese tener un mayor control de la base de datos, DDEV-Local nos da una serie de herramientas que nos pueden ayudar a la hora de crear un flujo automático de exportación e importación de la base de datos del proyecto.

 

Automatizando backups a nivel de proyecto con hooks

Para configurar este flujo, basta con añadir al final del archivo de configuración del proyecto .ddev/config.yml el siguiente fragmento de código:

hooks:
 post-start:
  - exec-host: ddev import-db -p --src=.backups/${DDEV_SITENAME}.sql.gz
 pre-stop:
  - exec-host: mkdir -p .backups && ddev export-db > .backups/${DDEV_SITENAME}.sql.gz

En él jugamos con los hooks propios de DDEV-Local para que cada vez que iniciamos nuestro proyecto con ddev start, busque dentro de la carpeta .backups si existe un volcado de la base de datos con el nombre del proyecto, este volcado se genera automáticamente cuando hacemos un ddev stop del entorno.

 

Automatizando backups a nivel de entorno con snapshots

En el caso de no querer una granularidad a nivel de proyecto, podemos elevar esta automatización a nivel de entorno, es decir, a nivel de DDEV-Local. Para ello deberíamos hacer uso del comando ddev snapshot --all que nos hace una copia del volumen de la BBDD de todos los proyectos que estén corriendo en ese momento.

Para automatizar este proceso, podemos hacer del cron del sistema para que ejecute el comando ddev snapshot --all con la frecuencia que se elija. Pero si lo que queremos es gestionar la generación de snapshots en proyectos concretos, deberemos de crear un script bash. Por ejemplo:

#!/bin/bash

## Proyectos donde ejecutar los snapshots

declare -a arr=(
                "project-0"
                "drupal-shop"
#               "drupal7-example"
                "landing-page"
                "symfony-app"
                "drupal9-project"
#               "drupal8-example"
#               "varbase-d9-example"
                )

## Lanzar construcción de snapshots de proyectos DDEV
for i in "${arr[@]}"
do
  ddev snapshot $i
done

Para restaurar estos snapshots solamente tendríamos que lanzar ddev restore-snapshot en cada proyecto, o bien, automatizarlo haciendo uso de un hook post-start en cada proyecto o integrarlo en otro script de iniciación tras lanzar el correspondiente ddev start.

Para saber más sobre DDEV, como siempre, os recomiendo: