netgescon-day0/docker/restore-node-backup.sh

104 lines
2.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
DOCKER_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ENV_FILE="${ENV_FILE:-$DOCKER_DIR/.env.node-local}"
COMPOSE_FILE="$DOCKER_DIR/docker-compose.node-local.yml"
SQL_DUMP=""
STORAGE_ARCHIVE=""
resolve_compose_cmd() {
if command -v docker >/dev/null 2>&1; then
if docker compose version >/dev/null 2>&1; then
echo "docker compose"
return
fi
fi
if command -v docker-compose >/dev/null 2>&1; then
echo "docker-compose"
return
fi
echo "Errore: non trovo né 'docker compose' né 'docker-compose'." >&2
exit 127
}
usage() {
cat <<EOF
Uso:
$(basename "$0") --sql /percorso/backup.sql[.gz] [--storage /percorso/storage.tar.gz]
Opzioni:
--sql Dump MySQL del sito da ripristinare.
--storage Archivio tar.gz della cartella storage da ripristinare sopra /var/www/storage.
EOF
}
while [[ $# -gt 0 ]]; do
case "$1" in
--sql)
SQL_DUMP="$2"
shift 2
;;
--storage)
STORAGE_ARCHIVE="$2"
shift 2
;;
-h|--help)
usage
exit 0
;;
*)
echo "Argomento non riconosciuto: $1" >&2
usage
exit 1
;;
esac
done
if [[ -z "$SQL_DUMP" ]]; then
usage
exit 1
fi
if [[ ! -f "$ENV_FILE" ]]; then
echo "Env mancante: $ENV_FILE"
exit 1
fi
if [[ ! -f "$SQL_DUMP" ]]; then
echo "Dump SQL non trovato: $SQL_DUMP"
exit 1
fi
if [[ -n "$STORAGE_ARCHIVE" && ! -f "$STORAGE_ARCHIVE" ]]; then
echo "Archivio storage non trovato: $STORAGE_ARCHIVE"
exit 1
fi
COMPOSE_CMD="$(resolve_compose_cmd)"
source "$ENV_FILE"
echo "[1/4] Avvio stack"
$COMPOSE_CMD --env-file "$ENV_FILE" -f "$COMPOSE_FILE" up -d db redis app nginx
echo "[2/4] Ripristino database principale"
if [[ "$SQL_DUMP" == *.gz ]]; then
gzip -dc "$SQL_DUMP" | $COMPOSE_CMD --env-file "$ENV_FILE" -f "$COMPOSE_FILE" exec -T db sh -lc "mysql -uroot -p\"$DB_ROOT_PASSWORD\" \"$DB_DATABASE\""
else
cat "$SQL_DUMP" | $COMPOSE_CMD --env-file "$ENV_FILE" -f "$COMPOSE_FILE" exec -T db sh -lc "mysql -uroot -p\"$DB_ROOT_PASSWORD\" \"$DB_DATABASE\""
fi
echo "[3/4] Ripristino storage applicativo"
if [[ -n "$STORAGE_ARCHIVE" ]]; then
cat "$STORAGE_ARCHIVE" | $COMPOSE_CMD --env-file "$ENV_FILE" -f "$COMPOSE_FILE" exec -T app sh -lc "tar -xzf - -C /var/www"
else
echo "Nessun archivio storage fornito: salto questo passaggio."
fi
echo "[4/4] Pulizia cache Laravel"
$COMPOSE_CMD --env-file "$ENV_FILE" -f "$COMPOSE_FILE" exec -T app php artisan optimize:clear || true
echo "Restore completato. Verifica login, storage documenti e connessioni locali del nodo."