#!/bin/bash # # Script de Migração: PointControl → NoIdle # Uso: sudo bash migrate_to_noidle.sh # set -e # Parar em caso de erro # Cores para output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color echo -e "${BLUE}═══════════════════════════════════════════════════${NC}" echo -e "${BLUE} Migração: PointControl → NoIdle${NC}" echo -e "${BLUE}═══════════════════════════════════════════════════${NC}" echo "" # Verificar se está rodando como root ou com sudo if [[ $EUID -ne 0 ]]; then echo -e "${RED}❌ Este script precisa rodar como root ou com sudo${NC}" echo "Use: sudo bash migrate_to_noidle.sh" exit 1 fi # Confirmar antes de começar echo -e "${YELLOW}⚠️ ATENÇÃO: Este script vai:${NC}" echo " 1. Parar o serviço pointcontrol-api" echo " 2. Renomear /var/www/pointcontrol para /var/www/noidle" echo " 3. Atualizar todas as referências no código" echo " 4. Recriar o serviço PM2 como noidle-api" echo "" read -p "Deseja continuar? (s/N): " -n 1 -r echo if [[ ! $REPLY =~ ^[Ss]$ ]]; then echo -e "${RED}❌ Migração cancelada${NC}" exit 1 fi echo "" echo -e "${GREEN}✅ Iniciando migração...${NC}" echo "" # Fase 1: Backup echo -e "${BLUE}[1/8]${NC} Criando backup..." BACKUP_DIR="/tmp/noidle_migration_backup_$(date +%Y%m%d_%H%M%S)" mkdir -p "$BACKUP_DIR" # Backup do PM2 pm2 save --force cp ~/.pm2/dump.pm2 "$BACKUP_DIR/" 2>/dev/null || true # Backup da pasta (apenas configs importantes) cd /var/www tar -czf "$BACKUP_DIR/pointcontrol_backup.tar.gz" \ --exclude='pointcontrol/node_modules' \ --exclude='pointcontrol/frontend/node_modules' \ --exclude='pointcontrol/frontend/build' \ pointcontrol/ 2>/dev/null || true echo -e "${GREEN} ✓ Backup salvo em: $BACKUP_DIR${NC}" # Fase 2: Parar serviços echo -e "${BLUE}[2/8]${NC} Parando serviços..." pm2 stop pointcontrol-api 2>/dev/null || echo " ℹ️ Serviço pointcontrol-api não estava rodando" sleep 2 echo -e "${GREEN} ✓ Serviços parados${NC}" # Fase 3: Renomear pasta principal echo -e "${BLUE}[3/8]${NC} Renomeando pasta principal..." cd /var/www if [ -d "pointcontrol" ]; then if [ -d "noidle" ]; then echo -e "${RED} ⚠️ Pasta /var/www/noidle já existe!${NC}" read -p " Deseja sobrescrever? (s/N): " -n 1 -r echo if [[ $REPLY =~ ^[Ss]$ ]]; then mv noidle noidle_old_$(date +%Y%m%d_%H%M%S) mv pointcontrol noidle else echo -e "${RED}❌ Migração cancelada${NC}" exit 1 fi else mv pointcontrol noidle fi echo -e "${GREEN} ✓ Pasta renomeada: /var/www/noidle${NC}" else echo -e "${YELLOW} ⚠️ Pasta pointcontrol não encontrada, verificando noidle...${NC}" if [ ! -d "noidle" ]; then echo -e "${RED}❌ Nenhuma pasta encontrada!${NC}" exit 1 fi echo -e "${GREEN} ✓ Usando pasta existente: /var/www/noidle${NC}" fi # Fase 4: Atualizar Backend echo -e "${BLUE}[4/8]${NC} Atualizando backend..." cd /var/www/noidle/backend # Atualizar package.json if [ -f "package.json" ]; then sed -i 's/"name": "pointcontrol-api"/"name": "noidle-api"/g' package.json sed -i 's/"name": "pointcontrol"/"name": "noidle"/g' package.json echo -e "${GREEN} ✓ package.json atualizado${NC}" fi # Atualizar server.js if [ -f "server.js" ]; then sed -i 's/PointControl/NoIdle/g' server.js sed -i 's/pointcontrol/noidle/g' server.js echo -e "${GREEN} ✓ server.js atualizado${NC}" fi # Fase 5: Atualizar Frontend echo -e "${BLUE}[5/8]${NC} Atualizando frontend..." cd /var/www/noidle/frontend # Atualizar package.json if [ -f "package.json" ]; then sed -i 's/"name": "pointcontrol-frontend"/"name": "noidle-frontend"/g' package.json sed -i 's/"name": "pointcontrol"/"name": "noidle"/g' package.json echo -e "${GREEN} ✓ package.json atualizado${NC}" fi # Atualizar componentes React if [ -d "src" ]; then find src/ -type f \( -name "*.js" -o -name "*.jsx" \) -exec sed -i 's/PointControl/NoIdle/g' {} + 2>/dev/null || true find src/ -type f \( -name "*.js" -o -name "*.jsx" \) -exec sed -i 's/pointcontrol/noidle/g' {} + 2>/dev/null || true echo -e "${GREEN} ✓ Componentes atualizados${NC}" fi # Atualizar HTML if [ -f "public/index.html" ]; then sed -i 's/PointControl/NoIdle/g' public/index.html sed -i 's/pointcontrol/noidle/g' public/index.html echo -e "${GREEN} ✓ HTML atualizado${NC}" fi # Fase 6: Atualizar Documentação echo -e "${BLUE}[6/8]${NC} Atualizando documentação..." cd /var/www/noidle # Atualizar arquivos .md find . -maxdepth 1 -name "*.md" -type f -exec sed -i 's/PointControl/NoIdle/g' {} + 2>/dev/null || true find . -maxdepth 1 -name "*.md" -type f -exec sed -i 's/pointcontrol/noidle/g' {} + 2>/dev/null || true echo -e "${GREEN} ✓ Documentação atualizada${NC}" # Fase 7: Atualizar PM2 echo -e "${BLUE}[7/8]${NC} Atualizando PM2..." # Remover processo antigo pm2 delete pointcontrol-api 2>/dev/null || true # Criar novo processo cd /var/www/noidle/backend pm2 start server.js --name noidle-api pm2 save --force echo -e "${GREEN} ✓ PM2 atualizado: noidle-api${NC}" # Fase 8: Verificação echo -e "${BLUE}[8/8]${NC} Verificando instalação..." sleep 3 # Verificar PM2 if pm2 list | grep -q "noidle-api.*online"; then echo -e "${GREEN} ✓ Serviço noidle-api está online${NC}" else echo -e "${RED} ⚠️ Serviço noidle-api não está online${NC}" fi # Verificar API if curl -s http://localhost:3005/api/health > /dev/null 2>&1; then echo -e "${GREEN} ✓ API respondendo em http://localhost:3005${NC}" else echo -e "${YELLOW} ⚠️ API não está respondendo (pode precisar reiniciar)${NC}" fi # Resumo echo "" echo -e "${GREEN}═══════════════════════════════════════════════════${NC}" echo -e "${GREEN}✅ Migração concluída com sucesso!${NC}" echo -e "${GREEN}═══════════════════════════════════════════════════${NC}" echo "" echo -e "${BLUE}📋 Resumo:${NC}" echo " • Pasta: /var/www/noidle" echo " • Serviço PM2: noidle-api" echo " • Backup: $BACKUP_DIR" echo "" echo -e "${BLUE}🔍 Próximos passos:${NC}" echo " 1. Verificar logs: ${YELLOW}pm2 logs noidle-api${NC}" echo " 2. Testar API: ${YELLOW}curl http://localhost:3005/api/health${NC}" echo " 3. Acessar frontend: ${YELLOW}https://admin.noidle.tech${NC}" echo " 4. Atualizar Nginx se necessário" echo " 5. Fazer commit: ${YELLOW}cd /var/www/noidle && git add . && git commit -m 'refactor: Migração para NoIdle'${NC}" echo "" echo -e "${YELLOW}⚠️ Se houver problemas, restaure o backup:${NC}" echo " ${YELLOW}pm2 stop noidle-api && pm2 delete noidle-api${NC}" echo " ${YELLOW}cd /var/www && mv noidle noidle_failed && tar -xzf $BACKUP_DIR/pointcontrol_backup.tar.gz${NC}" echo " ${YELLOW}cd pointcontrol/backend && pm2 start server.js --name pointcontrol-api${NC}" echo ""