netgescon-day0/docker/backup-multisite.sh

71 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
DOCKER_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(cd "$DOCKER_DIR/.." && pwd)"
ENV_FILE="${ENV_FILE:-$DOCKER_DIR/.env.multisite}"
if [[ ! -f "$ENV_FILE" ]]; then
echo "Env mancante: $ENV_FILE"
exit 1
fi
load_env_file() {
local env_file="$1"
local line key value
while IFS= read -r line || [[ -n "$line" ]]; do
line="${line%$'\r'}"
[[ -z "$line" || "$line" =~ ^[[:space:]]*# ]] && continue
[[ "$line" != *=* ]] && continue
key="${line%%=*}"
value="${line#*=}"
export "$key=$value"
done < "$env_file"
}
load_env_file "$ENV_FILE"
"$ROOT_DIR/scripts/ops/netgescon-prepare-multisite-host-paths.sh" --env-file "$ENV_FILE"
PROD_STORAGE_PATH="${PROD_STORAGE_PATH:-/srv/netgescon/prod/storage}"
PROD_PUBLIC_PATH="${PROD_PUBLIC_PATH:-/srv/netgescon/prod/public}"
DEMO_STORAGE_PATH="${DEMO_STORAGE_PATH:-/srv/netgescon/demo/storage}"
DEMO_PUBLIC_PATH="${DEMO_PUBLIC_PATH:-/srv/netgescon/demo/public}"
BACKUP_DIR="${MULTISITE_BACKUP_PATH:-$ROOT_DIR/storage/backups/multisite}"
mkdir -p "$BACKUP_DIR"
STAMP="$(date +%F_%H%M%S)"
MYSQLDUMP_FLAGS="--single-transaction --skip-lock-tables"
backup_tree() {
local label="$1"
local path="$2"
if [[ ! -d "$path" ]]; then
echo "Skip $label: path not found ($path)"
return
fi
tar -czf "$BACKUP_DIR/${label}_${STAMP}.tar.gz" -C "$path" .
}
echo "Backup DB produzione..."
docker exec netgescon_prod_db sh -lc "mysqldump $MYSQLDUMP_FLAGS -u root -p\"$PROD_DB_ROOT_PASSWORD\" \"$PROD_DB_DATABASE\"" > "$BACKUP_DIR/prod_${STAMP}.sql"
echo "Backup DB demo..."
docker exec netgescon_demo_db sh -lc "mysqldump $MYSQLDUMP_FLAGS -u root -p\"$DEMO_DB_ROOT_PASSWORD\" \"$DEMO_DB_DATABASE\"" > "$BACKUP_DIR/demo_${STAMP}.sql"
echo "Backup filesystem produzione..."
backup_tree "prod_storage" "$PROD_STORAGE_PATH"
backup_tree "prod_public" "$PROD_PUBLIC_PATH"
echo "Backup filesystem demo..."
backup_tree "demo_storage" "$DEMO_STORAGE_PATH"
backup_tree "demo_public" "$DEMO_PUBLIC_PATH"
cp "$ENV_FILE" "$BACKUP_DIR/.env.multisite.${STAMP}.backup"
echo "Backup completato in: $BACKUP_DIR"