#!/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 <&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."