#!/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}" COMPOSE_FILE="$DOCKER_DIR/docker-compose.multisite.yml" UPDATE_MODE="${UPDATE_MODE:-local}" if command -v docker >/dev/null 2>&1; then if docker compose version >/dev/null 2>&1; then COMPOSE_CMD=(docker compose) elif command -v docker-compose >/dev/null 2>&1; then COMPOSE_CMD=(docker-compose) else echo "Errore: non trovo né 'docker compose' né 'docker-compose'." exit 127 fi elif command -v docker-compose >/dev/null 2>&1; then COMPOSE_CMD=(docker-compose) else echo "Errore: Docker non installato in questa VM." exit 127 fi if [[ ! -f "$ENV_FILE" ]]; then echo "Env mancante: $ENV_FILE" exit 1 fi source "$ENV_FILE" echo "[1/6] Backup DB" "$DOCKER_DIR/backup-multisite.sh" echo "[2/6] Update codice (mode: $UPDATE_MODE)" cd "$ROOT_DIR" case "$UPDATE_MODE" in local) echo "Uso codice locale già presente sulla VM." ;; distro) if [[ -z "${DISTRO_UPDATE_URL:-}" || -z "${DISTRO_UPDATE_TOKEN:-}" ]]; then echo "Errore: per UPDATE_MODE=distro servono DISTRO_UPDATE_URL e DISTRO_UPDATE_TOKEN nel file env." exit 1 fi curl -fL -H "Authorization: Bearer ${DISTRO_UPDATE_TOKEN}" "$DISTRO_UPDATE_URL" -o /tmp/netgescon-update.tgz tar -xzf /tmp/netgescon-update.tgz -C "$ROOT_DIR" ;; github) if [[ -z "${GITHUB_RELEASE_URL:-}" ]]; then echo "Errore: per UPDATE_MODE=github serve GITHUB_RELEASE_URL nel file env." exit 1 fi curl -fL "$GITHUB_RELEASE_URL" -o /tmp/netgescon-update.tgz tar -xzf /tmp/netgescon-update.tgz -C "$ROOT_DIR" ;; *) echo "Errore: UPDATE_MODE non valido ($UPDATE_MODE). Valori: local | distro | github" exit 1 ;; esac echo "[3/6] Build app" "${COMPOSE_CMD[@]}" --env-file "$ENV_FILE" -f "$COMPOSE_FILE" build prod_app echo "[4/6] Rolling restart" "${COMPOSE_CMD[@]}" --env-file "$ENV_FILE" -f "$COMPOSE_FILE" up -d prod_app prod_nginx demo_app demo_nginx echo "[5/6] Clear cache Laravel" docker exec netgescon_prod_app php artisan optimize:clear || true docker exec netgescon_demo_app php artisan optimize:clear || true echo "[6/6] Stato finale" "${COMPOSE_CMD[@]}" --env-file "$ENV_FILE" -f "$COMPOSE_FILE" ps echo "Update completato."