#!/bin/bash # 🚀 Script de Deploy Automático - Liberi Kids # Deploy no servidor local com PM2 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 "${GREEN}🚀 Deploy Automático - Liberi Kids${NC}" echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" echo "" # Função para verificar se comando existe command_exists() { command -v "$1" >/dev/null 2>&1 } # 1. Verificar Node.js echo -e "${YELLOW}📦 Verificando Node.js...${NC}" if ! command_exists node; then echo -e "${RED}❌ Node.js não encontrado!${NC}" echo -e "Instale com: ${BLUE}curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - && sudo apt-get install -y nodejs${NC}" exit 1 fi echo -e "${GREEN}✅ Node.js $(node --version) encontrado${NC}" echo "" # 2. Verificar PM2 echo -e "${YELLOW}📦 Verificando PM2...${NC}" if ! command_exists pm2; then echo -e "${YELLOW}⚠️ PM2 não encontrado. Instalando...${NC}" sudo npm install -g pm2 echo -e "${GREEN}✅ PM2 instalado com sucesso${NC}" else echo -e "${GREEN}✅ PM2 $(pm2 --version) encontrado${NC}" fi echo "" # 3. Verificar arquivo .env echo -e "${YELLOW}🔧 Verificando configurações...${NC}" if [ ! -f ".env" ]; then echo -e "${RED}❌ Arquivo .env não encontrado!${NC}" if [ -f ".env.example" ]; then echo -e "${YELLOW}Criando .env a partir do .env.example...${NC}" cp .env.example .env echo -e "${YELLOW}⚠️ ATENÇÃO: Configure o arquivo .env com suas credenciais!${NC}" echo -e "Execute: ${BLUE}nano .env${NC}" exit 1 else echo -e "${RED}Nem .env nem .env.example encontrados!${NC}" exit 1 fi else echo -e "${GREEN}✅ Arquivo .env encontrado${NC}" fi echo "" # 4. Instalar dependências do backend echo -e "${YELLOW}📦 Instalando dependências do backend...${NC}" npm install echo -e "${GREEN}✅ Dependências do backend instaladas${NC}" echo "" # 5. Instalar dependências do frontend echo -e "${YELLOW}📦 Instalando dependências do frontend...${NC}" cd client npm install echo -e "${GREEN}✅ Dependências do frontend instaladas${NC}" echo "" # 6. Build do frontend echo -e "${YELLOW}🔨 Fazendo build do frontend...${NC}" npm run build cd .. echo -e "${GREEN}✅ Build do frontend concluído${NC}" echo "" # 7. Criar diretório de logs echo -e "${YELLOW}📁 Criando diretórios necessários...${NC}" mkdir -p logs mkdir -p uploads echo -e "${GREEN}✅ Diretórios criados${NC}" echo "" # 8. Parar processo anterior (se existir) echo -e "${YELLOW}🛑 Parando processos anteriores...${NC}" if pm2 list | grep -q "liberi-kids-estoque"; then pm2 stop liberi-kids-estoque pm2 delete liberi-kids-estoque echo -e "${GREEN}✅ Processo anterior removido${NC}" else echo -e "${BLUE}ℹ️ Nenhum processo anterior encontrado${NC}" fi echo "" # 9. Iniciar com PM2 echo -e "${YELLOW}🚀 Iniciando aplicação com PM2...${NC}" pm2 start ecosystem.config.js echo -e "${GREEN}✅ Aplicação iniciada${NC}" echo "" # 10. Salvar configuração PM2 echo -e "${YELLOW}💾 Salvando configuração do PM2...${NC}" pm2 save echo -e "${GREEN}✅ Configuração salva${NC}" echo "" # 11. Verificar status echo -e "${YELLOW}📊 Verificando status...${NC}" pm2 status echo "" # 12. Configurar auto-start (opcional) echo -e "${YELLOW}🔄 Deseja configurar inicialização automática no boot? (s/n)${NC}" read -r resposta if [ "$resposta" = "s" ] || [ "$resposta" = "S" ]; then echo -e "${YELLOW}Configurando auto-start...${NC}" pm2 startup echo "" echo -e "${YELLOW}⚠️ IMPORTANTE: Execute o comando mostrado acima com sudo!${NC}" echo -e "Depois execute: ${BLUE}pm2 save${NC}" fi echo "" # 13. Verificar porta PORT=$(grep "^PORT=" .env | cut -d '=' -f2 || echo "5000") PORT=${PORT:-5000} echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" echo -e "${GREEN}✅ Deploy concluído com sucesso!${NC}" echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" echo "" echo -e "${GREEN}📍 Aplicação rodando em:${NC}" echo -e " ${BLUE}http://localhost:${PORT}${NC}" echo -e " ${BLUE}http://$(hostname -I | awk '{print $1}'):${PORT}${NC}" echo "" echo -e "${GREEN}📦 Catálogo público em:${NC}" echo -e " ${BLUE}http://localhost:${PORT}/catalogo${NC}" echo "" echo -e "${YELLOW}📊 Comandos úteis:${NC}" echo -e " ${BLUE}pm2 status${NC} - Ver status" echo -e " ${BLUE}pm2 logs${NC} - Ver logs" echo -e " ${BLUE}pm2 monit${NC} - Monitorar" echo -e " ${BLUE}pm2 restart all${NC} - Reiniciar" echo -e " ${BLUE}pm2 stop all${NC} - Parar" echo "" echo -e "${GREEN}📝 Ver logs agora:${NC}" echo -e " ${BLUE}pm2 logs liberi-kids-estoque${NC}" echo "" echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"