Files

48 lines
1.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -Eeuo pipefail
dhv2_project="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
dhv2_requested="${1:-}"
if [ -z "$dhv2_requested" ]; then
echo "Uso: bash scripts/verify-backup.sh /var/www/dh-backup/dhv2-..." >&2
exit 1
fi
dhv2_backup="$(realpath -e "$dhv2_requested")"
case "$dhv2_backup" in
/var/www/dh-backup/dhv2-*) ;;
*) echo "Ruta de backup no permitida: $dhv2_backup" >&2; exit 1 ;;
esac
for dhv2_file in source.tar.gz database.dump .env MANIFEST.txt SHA256SUMS; do
test -s "$dhv2_backup/$dhv2_file" || { echo "Falta $dhv2_file" >&2; exit 1; }
done
test "$(stat -c '%a' "$dhv2_backup/.env")" = "600" || {
echo "El backup de .env no tiene permisos 600" >&2
exit 1
}
(
cd "$dhv2_backup"
sha256sum -c SHA256SUMS
)
dhv2_archive_listing="$(tar -tzf "$dhv2_backup/source.tar.gz")"
if grep -Eq '(^|/)\.env$|(^|/)(node_modules|dist)/' <<< "$dhv2_archive_listing"; then
echo "El archivo de fuentes contiene elementos excluidos" >&2
exit 1
fi
if [ -f "$dhv2_backup/asset-media.tar.gz" ]; then
tar -tzf "$dhv2_backup/asset-media.tar.gz" >/dev/null
fi
cd "$dhv2_project"
docker compose exec -T db pg_restore --list < "$dhv2_backup/database.dump" >/dev/null
echo "Backup verificable y legible: OK"
echo "$dhv2_backup"