#!/usr/bin/env bash # ============================================================================= # backup.sh — Sauvegarde automatisée de GestHub (Bloc 4 - C5). # # Réalise un dump MariaDB (mysqldump) et une archive tar des fichiers # uploadés, horodatés, conservés localement. Prévu pour être planifié via # cron (ex. `0 3 * * * /opt/gesthub/scripts/backup.sh`). # ============================================================================= set -euo pipefail BACKUP_DIR="${BACKUP_DIR:-/opt/gesthub/backups}" TIMESTAMP="$(date +%Y%m%d-%H%M%S)" DB_CONTAINER="${DB_CONTAINER:-gesthub-mariadb-1}" DB_NAME="${DB_NAME:-gesthub}" DB_USER="${DB_USER:-flaskuser}" UPLOADS_VOLUME_PATH="${UPLOADS_VOLUME_PATH:-/var/lib/docker/volumes/gesthub_uploads_data/_data}" mkdir -p "$BACKUP_DIR" echo "[backup] Dump MariaDB -> ${BACKUP_DIR}/gesthub-${TIMESTAMP}.sql.gz" docker exec "$DB_CONTAINER" mysqldump -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" \ | gzip > "${BACKUP_DIR}/gesthub-${TIMESTAMP}.sql.gz" echo "[backup] Archive des fichiers uploadés -> ${BACKUP_DIR}/uploads-${TIMESTAMP}.tar.gz" tar -czf "${BACKUP_DIR}/uploads-${TIMESTAMP}.tar.gz" -C "$UPLOADS_VOLUME_PATH" . echo "[backup] Purge des sauvegardes de plus de 30 jours" find "$BACKUP_DIR" -type f -mtime +30 -delete echo "[backup] Terminé : ${TIMESTAMP}"