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: