104 lines
2.5 KiB
Bash
104 lines
2.5 KiB
Bash
#!/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."
|