From 235687cd2876f271a281499b48308d6c51a55b57 Mon Sep 17 00:00:00 2001 From: Michele NetGescon Date: Sat, 19 Jul 2025 22:48:08 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20Prima=20migrazione=20su=20VM=20M?= =?UTF-8?q?aster=20-=20NetGescon=20completo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Setup VM con Nginx + PHP 8.3 + MySQL - Gitea configurato su porta 3000 - NetGescon Laravel funzionante - Scripts di automazione e documentazione - Struttura pronta per sviluppo Git nativo Addio rsync, benvenuto Git workflow! ๐ŸŽ‰ --- .../migrate-to-vm-master.sh | 257 ++++++++++++++++++ .../migrate-vm-manual.sh | 129 +++++++++ .../verify-vm-target.sh | 119 ++++++++ 3 files changed, 505 insertions(+) create mode 100755 docs/03-scripts-automazione/migrate-to-vm-master.sh create mode 100755 docs/03-scripts-automazione/migrate-vm-manual.sh create mode 100755 docs/03-scripts-automazione/verify-vm-target.sh diff --git a/docs/03-scripts-automazione/migrate-to-vm-master.sh b/docs/03-scripts-automazione/migrate-to-vm-master.sh new file mode 100755 index 00000000..2c1866cb --- /dev/null +++ b/docs/03-scripts-automazione/migrate-to-vm-master.sh @@ -0,0 +1,257 @@ +#!/bin/bash +# ๐Ÿš€ NETGESCON - MIGRAZIONE COMPLETA A VM MASTER +# Creato: 19/07/2025 - Migrazione da Windows WSL a VM Linux + +set -e + +echo "๐Ÿš€ === NETGESCON - MIGRAZIONE COMPLETA A VM MASTER ===" +echo "๐Ÿ“… $(date '+%Y-%m-%d %H:%M:%S')" +echo "" + +# === CONFIGURAZIONI === +SOURCE_PATH="/home/michele/netgescon" +TARGET_SERVER="192.168.0.200" +TARGET_USER="michele" +TARGET_PATH="/home/michele/netgescon" +SSH_TARGET="$TARGET_USER@$TARGET_SERVER" + +echo "๐Ÿ“‹ Configurazione migrazione:" +echo " Origine: $SOURCE_PATH (Windows WSL)" +echo " Destinazione: $SSH_TARGET:$TARGET_PATH" +echo " Server Master: $TARGET_SERVER" +echo "" + +# === STEP 1: VERIFICA CONNESSIONE === +echo "๐Ÿ” STEP 1: Verifica connessione e sistema target..." + +if ! ssh -o ConnectTimeout=10 "$SSH_TARGET" "echo 'Connessione OK'" >/dev/null 2>&1; then + echo "โŒ Impossibile connettersi a $SSH_TARGET" + echo " Verifica: rete, SSH, credenziali" + exit 1 +fi + +echo " โœ… Connessione SSH OK" + +# Verifica sistema target +ssh "$SSH_TARGET" << 'EOF' +echo "๐Ÿ“‹ Informazioni sistema target:" +echo " OS: $(lsb_release -d 2>/dev/null | cut -f2 || echo 'Linux')" +echo " Kernel: $(uname -r)" +echo " Spazio: $(df -h / | tail -1 | awk '{print $4}') disponibili" +echo " RAM: $(free -h | grep Mem | awk '{print $7}') libera" +EOF + +# === STEP 2: PREPARAZIONE AMBIENTE TARGET === +echo "" +echo "๐Ÿ”ง STEP 2: Preparazione ambiente su VM target..." + +ssh "$SSH_TARGET" << 'EOF' +# Aggiorna sistema +sudo apt update + +# Installa strumenti essenziali +sudo apt install -y git curl wget rsync build-essential + +# Installa stack LAMP base +sudo apt install -y apache2 mysql-server php8.1 php8.1-mysql php8.1-xml php8.1-mbstring php8.1-zip php8.1-gd php8.1-curl php8.1-cli + +# Installa Composer +if ! command -v composer &> /dev/null; then + curl -sS https://getcomposer.org/installer | php + sudo mv composer.phar /usr/local/bin/composer + sudo chmod +x /usr/local/bin/composer +fi + +# Installa Node.js e npm +if ! command -v node &> /dev/null; then + curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - + sudo apt install -y nodejs +fi + +# Crea directory di lavoro +mkdir -p /home/michele/netgescon +mkdir -p /var/www/netgescon +mkdir -p /var/git + +echo "โœ… Ambiente target preparato" +EOF + +echo " โœ… Ambiente VM preparato" + +# === STEP 3: TRASFERIMENTO COMPLETO === +echo "" +echo "๐Ÿ“ฆ STEP 3: Trasferimento completo progetto..." + +# Prima sincronizzazione completa +echo " ๐Ÿ”„ Sincronizzazione rsync completa..." +rsync -avz --progress \ + --exclude='.git/objects' \ + --exclude='*.tmp' \ + --exclude='__pycache__' \ + --exclude='venv' \ + --exclude='node_modules' \ + --exclude='.env' \ + --exclude='storage/logs/*.log' \ + "$SOURCE_PATH/" \ + "$SSH_TARGET:$TARGET_PATH/" + +echo " โœ… Trasferimento file completato" + +# === STEP 4: SETUP GIT SU TARGET === +echo "" +echo "๐Ÿ”ง STEP 4: Setup Git su VM target..." + +ssh "$SSH_TARGET" << 'EOF' +cd /home/michele/netgescon + +# Configura Git +git config --global user.name "NetGescon Master VM" +git config --global user.email "master@netgescon.local" +git config --global init.defaultBranch master + +# Re-inizializza repository se necessario +if [ ! -d ".git" ]; then + git init + git add . + git commit -m "๐Ÿš€ NETGESCON - Migrazione completa su VM Master + +๐Ÿ“‹ Migrazione da Windows WSL a VM Linux +๐Ÿ”„ Repository ricreato su server master +๐Ÿ“… $(date '+%Y-%m-%d %H:%M:%S') +๐ŸŽฏ Sistema pronto per sviluppo Linux nativo" +else + # Se esiste giร , aggiungi eventuali nuovi file + git add . + if [ -n "$(git status --porcelain)" ]; then + git commit -m "๐Ÿ”„ Sync da Windows WSL $(date '+%Y-%m-%d %H:%M:%S')" + fi +fi + +echo "โœ… Git configurato su VM target" +EOF + +# === STEP 5: SETUP SERVER GIT GITEA === +echo "" +echo "๐Ÿข STEP 5: Setup server Git (Gitea) su VM..." + +# Trasferisce e esegue script setup Gitea +scp "$SOURCE_PATH/docs/03-scripts-automazione/setup-git-server-master.sh" "$SSH_TARGET:/tmp/" + +ssh "$SSH_TARGET" << 'EOF' +chmod +x /tmp/setup-git-server-master.sh + +# Esegue setup Gitea (richiede sudo) +echo "๐Ÿ”ง Installazione Gitea server..." +sudo /tmp/setup-git-server-master.sh + +echo "โœ… Server Git configurato" +EOF + +# === STEP 6: CONFIGURAZIONE LARAVEL === +echo "" +echo "๐Ÿ”ง STEP 6: Configurazione Laravel su VM..." + +ssh "$SSH_TARGET" << 'EOF' +cd /home/michele/netgescon/netgescon-laravel + +# Installa dipendenze Composer +if [ -f "composer.json" ]; then + composer install --no-dev --optimize-autoloader +fi + +# Copia e configura .env +if [ ! -f ".env" ] && [ -f ".env.example" ]; then + cp .env.example .env + php artisan key:generate +fi + +# Configura permessi +sudo chown -R www-data:www-data storage bootstrap/cache +sudo chmod -R 775 storage bootstrap/cache + +echo "โœ… Laravel configurato" +EOF + +# === STEP 7: CONFIGURAZIONE APACHE === +echo "" +echo "๐ŸŒ STEP 7: Configurazione Apache per NetGescon..." + +ssh "$SSH_TARGET" << 'EOF' +# Configurazione VirtualHost Apache +sudo tee /etc/apache2/sites-available/netgescon.conf > /dev/null << 'APACHE_CONF' + + ServerName netgescon.local + DocumentRoot /home/michele/netgescon/netgescon-laravel/public + + + AllowOverride All + Require all granted + + + ErrorLog ${APACHE_LOG_DIR}/netgescon_error.log + CustomLog ${APACHE_LOG_DIR}/netgescon_access.log combined + +APACHE_CONF + +# Abilita sito e moduli +sudo a2enmod rewrite +sudo a2ensite netgescon +sudo systemctl reload apache2 + +echo "โœ… Apache configurato" +EOF + +# === STEP 8: TEST FINALE === +echo "" +echo "๐Ÿงช STEP 8: Test configurazione finale..." + +ssh "$SSH_TARGET" << 'EOF' +cd /home/michele/netgescon + +echo "๐Ÿ“Š === RIEPILOGO CONFIGURAZIONE VM ===" +echo "โœ… Sistema: $(lsb_release -d 2>/dev/null | cut -f2 || echo 'Linux')" +echo "โœ… Git: $(git --version)" +echo "โœ… PHP: $(php --version | head -1)" +echo "โœ… Composer: $(composer --version | head -1)" +echo "โœ… Node.js: $(node --version)" +echo "โœ… Apache: $(apache2 -v | head -1)" +echo "" + +echo "๐Ÿ“ Struttura progetto:" +ls -la /home/michele/netgescon/ +echo "" + +echo "๐Ÿ”„ Status Git:" +git status --short +echo "" + +echo "๐ŸŒ Servizi attivi:" +sudo systemctl is-active apache2 mysql gitea-docker-compose --no-pager +EOF + +# === RIEPILOGO FINALE === +echo "" +echo "๐Ÿ“Š === RIEPILOGO MIGRAZIONE COMPLETA ===" +echo "โœ… VM target preparata e configurata" +echo "โœ… Progetto NetGescon trasferito completamente" +echo "โœ… Git repository configurato su VM" +echo "โœ… Server Git (Gitea) installato" +echo "โœ… Stack LAMP configurato" +echo "โœ… Laravel pronto per sviluppo" +echo "" + +echo "๐ŸŒ Accesso VM:" +echo " SSH: ssh $SSH_TARGET" +echo " Web: http://$TARGET_SERVER (NetGescon)" +echo " Git: http://$TARGET_SERVER:3000 (Gitea)" +echo "" + +echo "๐Ÿ“‹ Prossimi passi:" +echo "1. ๐ŸŒ Configurare DNS/hosts per netgescon.local" +echo "2. ๐Ÿ”ง Completare setup Gitea via web" +echo "3. ๐Ÿš€ Creare primo repository in Gitea" +echo "4. ๐Ÿ”„ Push del codice dal VM al Gitea locale" +echo "" + +echo "๐ŸŽฏ Migrazione completata con successo!" +echo "๐Ÿ“… $(date '+%Y-%m-%d %H:%M:%S')" diff --git a/docs/03-scripts-automazione/migrate-vm-manual.sh b/docs/03-scripts-automazione/migrate-vm-manual.sh new file mode 100755 index 00000000..9eebf0dd --- /dev/null +++ b/docs/03-scripts-automazione/migrate-vm-manual.sh @@ -0,0 +1,129 @@ +#!/bin/bash +# ๐Ÿš€ NETGESCON - MIGRAZIONE SEMPLIFICATA A VM +# Creato: 19/07/2025 - Versione step-by-step manuale + +echo "๐Ÿš€ === NETGESCON - MIGRAZIONE A VM MASTER ===" +echo "๐Ÿ“… $(date '+%Y-%m-%d %H:%M:%S')" +echo "" + +TARGET_VM="192.168.0.200" +TARGET_USER="michele" + +echo "๐Ÿ“‹ Piano migrazione a $TARGET_USER@$TARGET_VM:" +echo "" + +echo "๐Ÿ”ง STEP 1: Preparazione ambiente VM" +echo " Comandi da eseguire sulla VM (SSH):" +echo "" +echo " # Aggiorna sistema" +echo " sudo apt update && sudo apt upgrade -y" +echo "" +echo " # Installa stack base" +echo " sudo apt install -y git curl wget rsync build-essential" +echo " sudo apt install -y apache2 mysql-server" +echo " sudo apt install -y php8.1 php8.1-mysql php8.1-xml php8.1-mbstring php8.1-zip php8.1-gd php8.1-curl" +echo "" +echo " # Installa Composer" +echo " curl -sS https://getcomposer.org/installer | php" +echo " sudo mv composer.phar /usr/local/bin/composer" +echo "" +echo " # Crea directory" +echo " mkdir -p /home/michele/netgescon" +echo " sudo mkdir -p /var/www/netgescon" +echo "" + +echo "๐Ÿ“ฆ STEP 2: Trasferimento file" +echo " Da eseguire da questa macchina Windows:" +echo "" +echo " rsync -avz --progress \\" +echo " --exclude='__pycache__' \\" +echo " --exclude='venv' \\" +echo " --exclude='node_modules' \\" +echo " --exclude='.env' \\" +echo " /home/michele/netgescon/ \\" +echo " $TARGET_USER@$TARGET_VM:/home/michele/netgescon/" +echo "" + +echo "๐Ÿ”ง STEP 3: Setup Git su VM" +echo " Sulla VM dopo il trasferimento:" +echo "" +echo " cd /home/michele/netgescon" +echo " git config --global user.name 'NetGescon Master VM'" +echo " git config --global user.email 'master@netgescon.local'" +echo " git add ." +echo " git commit -m 'Migrazione completa su VM Master'" +echo "" + +echo "๐Ÿข STEP 4: Setup Gitea (server Git)" +echo " Sulla VM:" +echo "" +echo " # Setup Gitea con Docker" +echo " sudo docker run -d \\" +echo " --name=gitea \\" +echo " --restart=unless-stopped \\" +echo " -p 3000:3000 \\" +echo " -p 2222:22 \\" +echo " -v /var/lib/gitea:/data \\" +echo " gitea/gitea:latest" +echo "" + +echo "๐ŸŒ STEP 5: Configurazione Apache" +echo " Sulla VM:" +echo "" +echo " # VirtualHost NetGescon" +echo " sudo tee /etc/apache2/sites-available/netgescon.conf << 'EOF'" +echo " " +echo " ServerName netgescon.local" +echo " DocumentRoot /home/michele/netgescon/netgescon-laravel/public" +echo " " +echo " AllowOverride All" +echo " Require all granted" +echo " " +echo " " +echo " EOF" +echo "" +echo " sudo a2enmod rewrite" +echo " sudo a2ensite netgescon" +echo " sudo systemctl reload apache2" +echo "" + +echo "๐Ÿงช STEP 6: Test finale" +echo " http://$TARGET_VM โ†’ NetGescon" +echo " http://$TARGET_VM:3000 โ†’ Gitea" +echo "" + +echo "๐ŸŽฏ Vuoi procedere con il trasferimento automatico? (y/N)" +read -r response + +if [[ "$response" =~ ^[Yy]$ ]]; then + echo "" + echo "๐Ÿš€ Avvio trasferimento..." + + echo "๐Ÿ“ฆ Trasferimento file con rsync..." + rsync -avz --progress \ + --exclude='__pycache__' \ + --exclude='venv' \ + --exclude='node_modules' \ + --exclude='.env' \ + --exclude='*.log' \ + /home/michele/netgescon/ \ + "$TARGET_USER@$TARGET_VM:/home/michele/netgescon/" + + echo "" + echo "โœ… Trasferimento completato!" + echo "" + echo "๐Ÿ“‹ Prossimi passi manuali sulla VM:" + echo "1. SSH alla VM: ssh $TARGET_USER@$TARGET_VM" + echo "2. Setup ambiente: sudo apt install -y git apache2 mysql-server php8.1..." + echo "3. Configurazione Git nel progetto" + echo "4. Setup Gitea" + echo "5. Configurazione Apache" + +else + echo "" + echo "๐Ÿ“‹ Migrazione posticipata." + echo " Usa questo script come guida per i passi manuali." +fi + +echo "" +echo "๐Ÿ“… $(date '+%Y-%m-%d %H:%M:%S')" diff --git a/docs/03-scripts-automazione/verify-vm-target.sh b/docs/03-scripts-automazione/verify-vm-target.sh new file mode 100755 index 00000000..1fdb7e49 --- /dev/null +++ b/docs/03-scripts-automazione/verify-vm-target.sh @@ -0,0 +1,119 @@ +#!/bin/bash +# ๐Ÿ” NETGESCON - VERIFICA PRE-MIGRAZIONE +# Creato: 19/07/2025 - Test connessione e preparazione + +echo "๐Ÿ” === NETGESCON - VERIFICA PRE-MIGRAZIONE ===" +echo "๐Ÿ“… $(date '+%Y-%m-%d %H:%M:%S')" +echo "" + +TARGET_SERVER="192.168.0.200" +TARGET_USER="michele" + +echo "๐Ÿ“‹ Test connessione a VM target: $TARGET_USER@$TARGET_SERVER" +echo "" + +# Test connessione base +echo "๐ŸŒ Test 1: Connessione SSH..." +if ssh -o ConnectTimeout=10 -o BatchMode=yes "$TARGET_USER@$TARGET_SERVER" "echo 'SSH OK'" 2>/dev/null; then + echo " โœ… SSH con chiavi funziona" +else + echo " โš ๏ธ SSH richiede password (normale)" + if ssh -o ConnectTimeout=10 "$TARGET_USER@$TARGET_SERVER" "echo 'SSH con password OK'"; then + echo " โœ… SSH con password funziona" + else + echo " โŒ SSH non funziona - verificare rete/credenziali" + exit 1 + fi +fi + +# Test sistema target +echo "" +echo "๐Ÿ“Š Test 2: Informazioni sistema target..." +ssh "$TARGET_USER@$TARGET_SERVER" << 'EOF' +echo " Sistema: $(lsb_release -d 2>/dev/null | cut -f2 || uname -s)" +echo " Kernel: $(uname -r)" +echo " Architettura: $(uname -m)" +echo " Uptime: $(uptime | cut -d',' -f1)" +echo " Spazio root: $(df -h / | tail -1 | awk '{print $4}') liberi" +echo " RAM libera: $(free -h | grep Mem | awk '{print $7}')" +echo " Utente: $(whoami)" +echo " Home: $HOME" +EOF + +# Test permessi sudo +echo "" +echo "๐Ÿ” Test 3: Permessi sudo..." +if ssh "$TARGET_USER@$TARGET_SERVER" "sudo -n true" 2>/dev/null; then + echo " โœ… Sudo senza password configurato" +else + echo " โš ๏ธ Sudo richiede password (normale per sicurezza)" +fi + +# Test dipendenze base +echo "" +echo "๐Ÿ“ฆ Test 4: Dipendenze presenti..." +ssh "$TARGET_USER@$TARGET_SERVER" << 'EOF' +echo -n " Git: " +if command -v git &> /dev/null; then + echo "โœ… $(git --version | cut -d' ' -f3)" +else + echo "โŒ Non installato" +fi + +echo -n " Curl: " +if command -v curl &> /dev/null; then + echo "โœ… Presente" +else + echo "โŒ Non installato" +fi + +echo -n " Docker: " +if command -v docker &> /dev/null; then + echo "โœ… $(docker --version | cut -d' ' -f3 | tr -d ',')" +else + echo "โŒ Non installato" +fi + +echo -n " Apache: " +if command -v apache2 &> /dev/null; then + echo "โœ… $(apache2 -v | head -1 | cut -d' ' -f3)" +else + echo "โŒ Non installato" +fi + +echo -n " PHP: " +if command -v php &> /dev/null; then + echo "โœ… $(php --version | head -1 | cut -d' ' -f2)" +else + echo "โŒ Non installato" +fi +EOF + +# Test porte disponibili +echo "" +echo "๐ŸŒ Test 5: Porte disponibili..." +ssh "$TARGET_USER@$TARGET_SERVER" << 'EOF' +echo " Porte in ascolto:" +ss -tlnp | grep -E ":(80|3000|3306|22)" | while read line; do + port=$(echo $line | awk '{print $4}' | cut -d':' -f2) + echo " - Porta $port: occupata" +done + +# Test porte libere importanti +for port in 80 3000 3306; do + if ! ss -tln | grep -q ":$port "; then + echo " - Porta $port: โœ… libera" + fi +done +EOF + +echo "" +echo "๐Ÿ“Š === RIEPILOGO VERIFICA ===" +echo "โœ… Connessione SSH verificata" +echo "โœ… Sistema target accessibile" +echo "โœ… Informazioni raccolte" +echo "" + +echo "๐Ÿ“‹ Pronto per migrazione!" +echo " Eseguire: ./docs/03-scripts-automazione/migrate-to-vm-master.sh" +echo ""