sauvegarde la base du portail et teste sa restauration chaque semaine

La sauvegarde ne couvrait que /etc, /home et /root : la base MariaDB du
portail et son .env (APP_KEY) en étaient absents. Ajoute aussi le réglage
du quota et du gabarit du projet des labs dans Ansible, la reprise des VM
au démarrage de l'hôte (Nova), et le script du test de capacité.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Adam Belkacemi 2026-10-09 17:28:50 +02:00
parent 424d0f6f79
commit 3f0b565e1e
11 changed files with 458 additions and 1 deletions

View file

@ -25,8 +25,25 @@ trap 'rm -rf "$WORKDIR"' EXIT
ARCHIVE_QUOT="quotidienne-${DATE}.tar.zst.age"
# Portail (étape 13) : export cohérent de sa base (--single-transaction, sans
# bloquer le site) et ses fichiers d'état. Le mot de passe root est lu dans
# le conteneur : il n'apparaît jamais sur la ligne de commande de l'hôte.
# Absent sur un serveur neuf (la sauvegarde arrive avant le portail) : ignoré.
EN_PLUS=()
if [ "$(docker inspect -f '{% raw %}{{.State.Running}}{% endraw %}' {{ sauvegardes_portail_conteneur }} 2>/dev/null)" = "true" ]; then
docker exec {{ sauvegardes_portail_conteneur }} sh -c \
'MYSQL_PWD="$MARIADB_ROOT_PASSWORD" exec mariadb-dump -uroot --single-transaction --routines --triggers --databases {{ sauvegardes_portail_base }}' \
> "$WORKDIR/portail.sql"
EN_PLUS+=(-C "$WORKDIR" portail.sql)
fi
for chemin in {{ sauvegardes_portail_fichiers | join(' ') }}; do
if [ -e "$chemin" ]; then
EN_PLUS+=("$chemin")
fi
done
tar --exclude="{{ sauvegardes_age_dir }}" --exclude='/root/.dedibackup' \
-I zstd -cf - {{ sauvegardes_repertoires | join(' ') }} \
-I zstd -cf - {{ sauvegardes_repertoires | join(' ') }} "${EN_PLUS[@]}" \
| age -r "$AGE_PUB" -o "$WORKDIR/$ARCHIVE_QUOT"
lftp -u "$DEDIBACKUP_USER,$DEDIBACKUP_PASS" "$DEDIBACKUP_HOST" -e "