#!/usr/bin/env bash # scripts/backup.sh — backup quotidien Postgres + files (a appeler par cron) set -euo pipefail DATE=$(date +%Y%m%d-%H%M%S) BACKUP_DIR="${BACKUP_DIR:-/opt/formation-hub/backups/local}" COMPOSE_FILES="${COMPOSE_FILES:--f compose.yml -f compose.prod.yml}" RETENTION_DAYS="${RETENTION_DAYS:-30}" mkdir -p "$BACKUP_DIR" echo "[$(date -Iseconds)] Backup start — DATE=$DATE" cd "$(dirname "$0")/.." echo " Postgres docmost..." docker compose $COMPOSE_FILES exec -T docmost-db \ pg_dump -U docmost docmost | gzip > "$BACKUP_DIR/docmost-db-$DATE.sql.gz" echo " Baserow data..." docker compose $COMPOSE_FILES exec -T baserow \ tar czf - /baserow/data > "$BACKUP_DIR/baserow-data-$DATE.tar.gz" echo " Docmost files..." docker compose $COMPOSE_FILES exec -T docmost \ tar czf - /app/data/storage > "$BACKUP_DIR/docmost-files-$DATE.tar.gz" echo " Sync distant (rclone) — si configure..." if command -v rclone >/dev/null 2>&1 && [ -n "${RCLONE_REMOTE:-}" ]; then rclone copy "$BACKUP_DIR/" "$RCLONE_REMOTE:" --include "*-$DATE.*" else echo " (rclone non configure — backup distant skip)" fi echo " Cleanup local > ${RETENTION_DAYS}j..." find "$BACKUP_DIR" -type f -mtime "+$RETENTION_DAYS" -delete echo "[$(date -Iseconds)] Backup OK" ls -lh "$BACKUP_DIR/"*-$DATE.*