netgescon-day0/scripts/update-multisite.sh

74 lines
2.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
ENV_FILE="${ENV_FILE:-$ROOT_DIR/docker/.env.multisite}"
COMPOSE_FILE="$ROOT_DIR/docker/docker-compose.multisite.yml"
GIT_REF="${GIT_REF:-main}"
upsert_env_var() {
local key="$1"
local value="$2"
if grep -qE "^${key}=" "$ENV_FILE"; then
sed -i "s#^${key}=.*#${key}=${value}#" "$ENV_FILE"
else
printf '\n%s=%s\n' "$key" "$value" >> "$ENV_FILE"
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"
}
if [[ ! -f "$ENV_FILE" ]]; then
echo "File env non trovato: $ENV_FILE"
exit 1
fi
echo "[1/6] Backup DB (prod + demo)..."
load_env_file "$ENV_FILE"
if [[ -z "${APP_KEY:-}" ]]; then
GENERATED_APP_KEY="base64:$(openssl rand -base64 32 | tr -d '\n')"
upsert_env_var "APP_KEY" "$GENERATED_APP_KEY"
APP_KEY="$GENERATED_APP_KEY"
echo "APP_KEY generata automaticamente in $ENV_FILE"
fi
"$ROOT_DIR/scripts/ops/netgescon-prepare-multisite-host-paths.sh" --env-file "$ENV_FILE"
mkdir -p "$ROOT_DIR/storage/backups"
MYSQLDUMP_FLAGS="--single-transaction --skip-lock-tables"
docker exec netgescon_prod_db sh -lc "mysqldump $MYSQLDUMP_FLAGS -u root -p\"$PROD_DB_ROOT_PASSWORD\" \"$PROD_DB_DATABASE\"" > "$ROOT_DIR/storage/backups/prod_$(date +%F_%H%M%S).sql"
docker exec netgescon_demo_db sh -lc "mysqldump $MYSQLDUMP_FLAGS -u root -p\"$DEMO_DB_ROOT_PASSWORD\" \"$DEMO_DB_DATABASE\"" > "$ROOT_DIR/storage/backups/demo_$(date +%F_%H%M%S).sql"
echo "[2/6] Update codice..."
cd "$ROOT_DIR"
git fetch origin
git checkout "$GIT_REF"
git pull --ff-only origin "$GIT_REF"
echo "[3/6] Build nuove immagini app..."
docker compose --env-file "$ENV_FILE" -f "$COMPOSE_FILE" build prod_app demo_app
echo "[4/6] Rolling update app/nignx..."
docker compose --env-file "$ENV_FILE" -f "$COMPOSE_FILE" up -d prod_app prod_nginx demo_app demo_nginx
echo "[5/6] Pulizia cache applicativa..."
docker exec netgescon_prod_app php artisan optimize:clear || true
docker exec netgescon_demo_app php artisan optimize:clear || true
echo "[6/6] Verifica servizi..."
docker compose --env-file "$ENV_FILE" -f "$COMPOSE_FILE" ps
echo "Update completato."