#!/usr/bin/env bash set -euo pipefail # Crea uno snapshot baseline (senza dipendere da git) della versione funzionante. # Uso: # scripts/ops/netgescon-baseline-freeze.sh --app-dir /var/www/netgescon --version 0.8.0-baseline APP_DIR="/var/www/netgescon" VERSION="" OUT_DIR="/var/backups/netgescon-baselines" while [[ $# -gt 0 ]]; do case "$1" in --app-dir) APP_DIR="$2" shift 2 ;; --version) VERSION="$2" shift 2 ;; --out-dir) OUT_DIR="$2" shift 2 ;; *) echo "Unknown option: $1" exit 1 ;; esac done if [[ -z "$VERSION" ]]; then echo "Usage: $0 --version [--app-dir ] [--out-dir ]" exit 1 fi if [[ ! -f "$APP_DIR/artisan" ]]; then echo "Invalid APP_DIR (artisan not found): $APP_DIR" exit 1 fi STAMP="$(date +"%Y%m%d-%H%M%S")" BASE_DIR="$OUT_DIR/${VERSION}_${STAMP}" mkdir -p "$BASE_DIR" # Backup codice (esclude dati runtime pesanti) tar -czf "$BASE_DIR/code.tar.gz" \ --exclude='.git' \ --exclude='node_modules' \ --exclude='vendor' \ --exclude='storage/logs' \ --exclude='storage/framework' \ -C "$APP_DIR" . # Backup env e dump DB best-effort if [[ -f "$APP_DIR/.env" ]]; then cp "$APP_DIR/.env" "$BASE_DIR/.env" fi set +e source "$APP_DIR/.env" 2>/dev/null if [[ -n "${DB_DATABASE:-}" && -n "${DB_USERNAME:-}" ]]; then MYSQL_PWD="${DB_PASSWORD:-}" mysqldump \ --host="${DB_HOST:-127.0.0.1}" \ --port="${DB_PORT:-3306}" \ --user="$DB_USERNAME" \ --single-transaction \ --routines \ --triggers \ "$DB_DATABASE" > "$BASE_DIR/database.sql" fi set -e cat > "$BASE_DIR/BASELINE_INFO.txt" <