ids.alfacom.it/update_from_git.sh
marco370 95aff1cc0e Update script to apply multiple database migration scripts
Modified update_from_git.sh to iterate and apply all .sql files in the database-schema directory, excluding schema.sql, ensuring database synchronization with applied changes.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 7a657272-55ba-4a79-9a2e-f1ed9bc7a528
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 890ee964-4158-4242-aa34-9b7e172a3fcb
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/449cf7c4-c97a-45ae-8234-e5c5b8d6a84f/7a657272-55ba-4a79-9a2e-f1ed9bc7a528/MkBJZ0L
2025-11-17 17:44:11 +00:00

212 lines
7.4 KiB
Bash
Executable File

#!/bin/bash
# =============================================================================
# IDS - Aggiornamento Sistema da git.alfacom.it
# =============================================================================
# Eseguire come ROOT: ./update_from_git.sh [--db]
# Lo script esegue i comandi git come utente 'ids' automaticamente
#
# Opzioni:
# --db Sincronizza anche schema database da database-schema/schema.sql
# =============================================================================
set -e
# Colori per output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# Opzioni
UPDATE_DB=false
if [ "$1" == "--db" ]; then
UPDATE_DB=true
fi
echo -e "${BLUE}"
echo "╔═══════════════════════════════════════════════╗"
echo "║ 🔄 AGGIORNAMENTO SISTEMA IDS DA GIT ║"
echo "╚═══════════════════════════════════════════════╝"
echo -e "${NC}"
IDS_DIR="/opt/ids"
IDS_USER="ids"
# Verifica di essere root
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}❌ Questo script deve essere eseguito come root${NC}"
echo -e "${YELLOW} Esegui: sudo ./update_from_git.sh [--db]${NC}"
exit 1
fi
cd "$IDS_DIR" || exit 1
# Fix git ownership se necessario
echo -e "${BLUE}🔧 Verifica configurazione git...${NC}"
if ! sudo -u $IDS_USER git config --global --get-all safe.directory | grep -q "^/opt/ids$"; then
echo -e "${YELLOW} Configuro safe directory...${NC}"
sudo -u $IDS_USER git config --global --add safe.directory /opt/ids
echo -e "${GREEN} ✅ Configurato${NC}"
fi
# Backup configurazione locale
echo -e "\n${BLUE}💾 Backup configurazione locale...${NC}"
if [ -f ".env" ]; then
cp .env .env.backup
echo -e "${GREEN}✅ .env salvato in .env.backup${NC}"
fi
if [ -f "git.env" ]; then
cp git.env git.env.backup
echo -e "${GREEN}✅ git.env salvato in git.env.backup${NC}"
fi
# Verifica modifiche locali
echo -e "\n${BLUE}🔍 Verifica modifiche locali...${NC}"
if ! sudo -u $IDS_USER git diff-index --quiet HEAD -- 2>/dev/null; then
echo -e "${YELLOW}⚠️ Ci sono modifiche locali non committate${NC}"
echo -e "${YELLOW} Esegui 'git status' per vedere i dettagli${NC}"
read -p "Vuoi procedere comunque? (y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
# Stash modifiche locali
echo -e "${BLUE} Salvo modifiche locali temporaneamente...${NC}"
sudo -u $IDS_USER git stash
fi
# Pull da git
echo -e "\n${BLUE}📥 Download aggiornamenti da git.alfacom.it...${NC}"
sudo -u $IDS_USER git fetch origin
sudo -u $IDS_USER git pull origin main
if [ $? -eq 0 ]; then
echo -e "${GREEN}✅ Aggiornamenti scaricati con successo${NC}"
else
echo -e "${RED}❌ Errore durante il download${NC}"
exit 1
fi
# Ripristina configurazione locale
echo -e "\n${BLUE}🔄 Ripristino configurazione locale...${NC}"
if [ -f ".env.backup" ]; then
cp .env.backup .env
chown $IDS_USER:$IDS_USER .env
echo -e "${GREEN}✅ .env ripristinato${NC}"
fi
if [ -f "git.env.backup" ]; then
cp git.env.backup git.env
chown $IDS_USER:$IDS_USER git.env
echo -e "${GREEN}✅ git.env ripristinato${NC}"
fi
# Sincronizza schema database se richiesto
if [ "$UPDATE_DB" = true ]; then
echo -e "\n${BLUE}🗄️ Sincronizzazione schema database...${NC}"
SCHEMA_DIR="$IDS_DIR/database-schema"
# Carica configurazione database
if [ ! -f "$IDS_DIR/.env" ]; then
echo -e "${RED}❌ File .env non trovato${NC}"
exit 1
fi
source "$IDS_DIR/.env"
export PGPASSWORD="$PGPASSWORD"
# Trova tutti gli script SQL (escludi schema.sql che è solo snapshot)
SQL_SCRIPTS=$(find "$SCHEMA_DIR" -maxdepth 1 -name "*.sql" ! -name "schema.sql" -type f | sort)
if [ -z "$SQL_SCRIPTS" ]; then
echo -e "${YELLOW}⚠️ Nessuno script SQL trovato in database-schema/${NC}"
echo -e "${YELLOW} (schema.sql è solo uno snapshot, non viene applicato)${NC}"
else
echo -e "${YELLOW}⚠️ APPLICAZIONE MODIFICHE AL DATABASE${NC}"
echo -e "${YELLOW} Database: ${PGDATABASE}@${PGHOST}${NC}"
echo -e "${YELLOW} Script da applicare:${NC}"
# Mostra lista script
for script in $SQL_SCRIPTS; do
echo -e "${YELLOW}$(basename $script)${NC}"
done
read -p "Confermi applicazione modifiche? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
# Applica tutti gli script in ordine
for script in $SQL_SCRIPTS; do
SCRIPT_NAME=$(basename "$script")
echo -e "\n${BLUE}📄 Applicando $SCRIPT_NAME...${NC}"
psql -h "${PGHOST:-127.0.0.1}" -p "${PGPORT:-5432}" -U "${PGUSER}" -d "${PGDATABASE}" -f "$script"
if [ $? -eq 0 ]; then
echo -e "${GREEN}$SCRIPT_NAME applicato con successo${NC}"
else
echo -e "${RED}❌ Errore applicando $SCRIPT_NAME${NC}"
echo -e "${YELLOW}⚠️ Gli script successivi NON saranno applicati${NC}"
exit 1
fi
done
echo -e "\n${GREEN}✅ Tutti gli script SQL applicati con successo${NC}"
else
echo -e "${YELLOW}⏭️ Sincronizzazione database saltata${NC}"
fi
fi
fi
# Aggiorna dipendenze Node.js
echo -e "\n${BLUE}📦 Aggiornamento dipendenze Node.js...${NC}"
sudo -u $IDS_USER npm install
if [ $? -eq 0 ]; then
echo -e "${GREEN}✅ Dipendenze Node.js aggiornate${NC}"
else
echo -e "${YELLOW}⚠️ Possibili warning npm (spesso ignorabili)${NC}"
fi
# Aggiorna dipendenze Python
echo -e "\n${BLUE}📦 Aggiornamento dipendenze Python...${NC}"
cd python_ml
sudo -u $IDS_USER /usr/bin/python3.11 -m pip install --upgrade -r requirements.txt
cd ..
if [ $? -eq 0 ]; then
echo -e "${GREEN}✅ Dipendenze Python aggiornate${NC}"
fi
# Restart servizi
echo -e "\n${BLUE}🔄 Restart servizi...${NC}"
if [ -f "./deployment/restart_all.sh" ]; then
chmod +x ./deployment/restart_all.sh
./deployment/restart_all.sh
echo -e "${GREEN}✅ Servizi riavviati${NC}"
else
echo -e "${YELLOW}⚠️ Script restart_all.sh non trovato${NC}"
echo -e "${YELLOW} Riavvia manualmente i servizi se necessario${NC}"
fi
echo ""
echo -e "${GREEN}╔═══════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║ ✅ AGGIORNAMENTO COMPLETATO ║${NC}"
echo -e "${GREEN}╚═══════════════════════════════════════════════╝${NC}"
echo ""
echo -e "${BLUE}📋 VERIFICA SISTEMA:${NC}"
echo -e " • Log backend: ${YELLOW}tail -f /var/log/ids/backend.log${NC}"
echo -e " • Log frontend: ${YELLOW}tail -f /var/log/ids/frontend.log${NC}"
echo -e " • API backend: ${YELLOW}curl http://localhost:8000/health${NC}"
echo -e " • Frontend: ${YELLOW}curl http://localhost:5000${NC}"
echo ""
echo -e "${BLUE}📊 STATO SERVIZI:${NC}"
ps aux | grep -E 'python.*main|npm.*dev|syslog_parser' | grep -v grep
echo ""
exit 0