netgescon-day0/docker/update-multisite.sh

79 lines
2.3 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}"
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."