#!/bin/bash # GKACHELE™ - Script de Backup Completo # © 2025 GKACHELE™. Todos los derechos reservados. # Uso: bash backup_completo.sh HASH=$(date +%Y%m%d-%H%M%S) BACKUP_DIR="backups/backup-${HASH}" RASPBERRY_HOST="192.168.1.134" RASPBERRY_PORT="2222" RASPBERRY_USER="pi" RASPBERRY_PASS="Gdk1983gdk45@" RASPBERRY_PATH="/home/pi/gkachele-saas" echo "==========================================" echo "🔄 GKACHELE™ - BACKUP COMPLETO" echo "==========================================" echo "Hash: ${HASH}" echo "" # Crear directorio de backup mkdir -p "${BACKUP_DIR}" mkdir -p "${BACKUP_DIR}/local" mkdir -p "${BACKUP_DIR}/raspberry" echo "📦 1. Respaldando código local..." cp -r demo "${BACKUP_DIR}/local/" 2>/dev/null || echo "⚠️ No se encontró demo/" cp -r *.md "${BACKUP_DIR}/local/" 2>/dev/null || echo "⚠️ No se encontraron .md" cp -r *.sh "${BACKUP_DIR}/local/" 2>/dev/null || echo "⚠️ No se encontraron .sh" cp -r *.py "${BACKUP_DIR}/local/" 2>/dev/null || echo "⚠️ No se encontraron .py" echo "📦 2. Respaldando desde Raspberry..." echo " Conectando a Raspberry..." # Backup de código sshpass -p "${RASPBERRY_PASS}" scp -P ${RASPBERRY_PORT} -o StrictHostKeyChecking=no -r \ ${RASPBERRY_USER}@${RASPBERRY_HOST}:${RASPBERRY_PATH}/* \ "${BACKUP_DIR}/raspberry/" 2>/dev/null || echo "⚠️ Error copiando código" # Backup de base de datos sshpass -p "${RASPBERRY_PASS}" scp -P ${RASPBERRY_PORT} -o StrictHostKeyChecking=no \ ${RASPBERRY_USER}@${RASPBERRY_HOST}:${RASPBERRY_PATH}/database/main.db \ "${BACKUP_DIR}/raspberry/main.db" 2>/dev/null || echo "⚠️ Error copiando DB" # Backup de configuración sshpass -p "${RASPBERRY_PASS}" ssh -p ${RASPBERRY_PORT} -o StrictHostKeyChecking=no \ ${RASPBERRY_USER}@${RASPBERRY_HOST} \ "sudo cat /etc/systemd/system/gkachele-saas.service" > "${BACKUP_DIR}/raspberry/gkachele-saas.service" 2>/dev/null || echo "⚠️ Error copiando service" sshpass -p "${RASPBERRY_PASS}" ssh -p ${RASPBERRY_PORT} -o StrictHostKeyChecking=no \ ${RASPBERRY_USER}@${RASPBERRY_HOST} \ "sudo cat /etc/nginx/sites-available/gk-saas.komkida.duckdns.org.conf" > "${BACKUP_DIR}/raspberry/nginx.conf" 2>/dev/null || echo "⚠️ Error copiando nginx" echo "" echo "📝 3. Creando archivo de información..." cat > "${BACKUP_DIR}/INFO.txt" << EOF GKACHELE™ - Backup Completo Hash: ${HASH} Fecha: $(date) ========================================== ESTADO DEL SISTEMA: - Sistema modular de templates (_gkachele/) - Menús dinámicos (header, footer, sidebar) - Widgets dinámicos - Base de datos multi-tenant (main.db) - Servicio systemd: gkachele-saas - Nginx reverse proxy ARCHIVOS INCLUIDOS: - Código local (demo/) - Código Raspberry (raspberry/) - Base de datos (raspberry/main.db) - Configuración systemd (raspberry/gkachele-saas.service) - Configuración nginx (raspberry/nginx.conf) RESTAURACIÓN: 1. Copiar raspberry/* a /home/pi/gkachele-saas/ 2. Restaurar main.db a database/main.db 3. Restaurar gkachele-saas.service a /etc/systemd/system/ 4. Restaurar nginx.conf a /etc/nginx/sites-available/ 5. Reiniciar servicios: sudo systemctl restart gkachele-saas nginx © 2025 GKACHELE™. Todos los derechos reservados. EOF echo "✅ Backup completado en: ${BACKUP_DIR}" echo "" echo "📊 Resumen:" du -sh "${BACKUP_DIR}"/* 2>/dev/null | head -5 echo "" echo "🎯 Hash del backup: ${HASH}" echo "=========================================="