158 lines
5.3 KiB
Bash
Executable File
158 lines
5.3 KiB
Bash
Executable File
#!/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}"
|