#!/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