Files
App-Estoque-LiberiKids/deploy-to-server.sh
2025-10-14 14:04:17 -03:00

155 lines
3.7 KiB
Bash
Executable File

#!/bin/bash
# 🚀 Script para Deploy Automático no Servidor via SSH
# Execute: ./deploy-to-server.sh usuario@servidor
echo "🚀 Deploy Automático - Liberi Kids"
echo "=================================="
# Verificar se foi fornecido o servidor
if [ -z "$1" ]; then
echo "❌ Uso: ./deploy-to-server.sh usuario@servidor"
echo " Exemplo: ./deploy-to-server.sh root@192.168.1.100"
exit 1
fi
SERVER=$1
PROJECT_DIR="app_estoque"
echo "🔗 Conectando ao servidor: $SERVER"
# Cores para output
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
log() {
echo -e "${GREEN}[INFO]${NC} $1"
}
warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Função para executar comando no servidor
run_remote() {
ssh $SERVER "$1"
}
# Função para copiar arquivos
copy_files() {
log "📁 Copiando arquivos para o servidor..."
rsync -avz --progress --exclude 'node_modules' --exclude '.git' --exclude 'client/node_modules' ./ $SERVER:~/$PROJECT_DIR/
if [ $? -eq 0 ]; then
log "✅ Arquivos copiados com sucesso!"
else
error "❌ Erro ao copiar arquivos"
exit 1
fi
}
# Função para configurar ambiente no servidor
setup_environment() {
log "🔧 Configurando ambiente no servidor..."
run_remote "
cd $PROJECT_DIR
# Verificar se Node.js está instalado
if ! command -v node &> /dev/null; then
echo '📦 Instalando Node.js...'
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
fi
# Verificar versão do Node.js
NODE_VERSION=\$(node -v | cut -d'v' -f2 | cut -d'.' -f1)
if [ \"\$NODE_VERSION\" -lt 18 ]; then
echo '❌ Node.js versão 18+ é necessária'
exit 1
fi
echo '✅ Node.js \$(node -v) encontrado'
# Criar arquivo .env se não existir
if [ ! -f '.env' ]; then
echo '📝 Criando arquivo .env...'
cp .env.example .env
echo '⚠️ IMPORTANTE: Configure o arquivo .env com suas credenciais!'
echo ' Edite: nano .env'
fi
# Tornar script executável
chmod +x scripts/deploy-local.sh
echo '✅ Ambiente configurado!'
"
}
# Função para fazer deploy
deploy_application() {
log "🚀 Fazendo deploy da aplicação..."
run_remote "
cd $PROJECT_DIR
# Executar script de deploy
./scripts/deploy-local.sh
"
}
# Função para verificar status
check_status() {
log "📊 Verificando status da aplicação..."
run_remote "
pm2 status
echo ''
echo '🌐 Aplicação disponível em:'
echo ' Local: http://localhost:5000'
echo ' Rede: http://\$(hostname -I | awk '{print \$1}'):5000'
"
}
# Executar deploy completo
main() {
echo ""
log "Iniciando deploy completo..."
echo ""
# Passo 1: Copiar arquivos
copy_files
echo ""
# Passo 2: Configurar ambiente
setup_environment
echo ""
# Passo 3: Fazer deploy
deploy_application
echo ""
# Passo 4: Verificar status
check_status
echo ""
log "🎉 Deploy concluído com sucesso!"
echo ""
warn "📝 PRÓXIMOS PASSOS:"
echo "1. Configure o arquivo .env no servidor:"
echo " ssh $SERVER 'cd $PROJECT_DIR && nano .env'"
echo ""
echo "2. Reinicie a aplicação após configurar:"
echo " ssh $SERVER 'pm2 restart liberi-kids'"
echo ""
echo "3. Acesse a aplicação no navegador"
}
# Executar função principal
main