82 lines
1.7 KiB
Bash
Executable File
82 lines
1.7 KiB
Bash
Executable File
#!/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 <version-tag> [--app-dir <dir>] [--out-dir <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" <<EOF
|
|
version=$VERSION
|
|
created_at=$STAMP
|
|
app_dir=$APP_DIR
|
|
EOF
|
|
|
|
echo "Baseline creato: $BASE_DIR"
|