Initial commit
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Script de Deploy para produção
|
||||
# Uso: ./deploy.sh [ambiente]
|
||||
# Exemplo: ./deploy.sh production
|
||||
|
||||
set -e # Para em caso de erro
|
||||
|
||||
echo "🚀 Iniciando deploy..."
|
||||
|
||||
# Cores para output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Função para imprimir mensagens coloridas
|
||||
print_success() {
|
||||
echo -e "${GREEN}✓ $1${NC}"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
echo -e "${RED}✗ $1${NC}"
|
||||
}
|
||||
|
||||
print_warning() {
|
||||
echo -e "${YELLOW}⚠ $1${NC}"
|
||||
}
|
||||
|
||||
# Detectar o dono do diretório para rodar comandos como ele
|
||||
DIR_OWNER=$(stat -c '%U' .)
|
||||
PROJECT_DIR=$(pwd)
|
||||
|
||||
run_as_owner() {
|
||||
su - "$DIR_OWNER" -c "cd $PROJECT_DIR && source ~/.bashrc 2>/dev/null; source ~/.profile 2>/dev/null; export NVM_DIR=\"\$HOME/.nvm\"; [ -s \"\$NVM_DIR/nvm.sh\" ] && . \"\$NVM_DIR/nvm.sh\"; $1"
|
||||
}
|
||||
|
||||
# Verificar se está rodando como root
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
print_warning "Este script precisa de sudo para configurar o nginx"
|
||||
SUDO="sudo"
|
||||
else
|
||||
SUDO=""
|
||||
fi
|
||||
|
||||
# 1. Atualizar código (se estiver em git)
|
||||
echo ""
|
||||
echo "📦 Atualizando código..."
|
||||
if [ -d ".git" ]; then
|
||||
run_as_owner "git pull"
|
||||
print_success "Código atualizado"
|
||||
else
|
||||
print_warning "Não é um repositório git, pulando atualização"
|
||||
fi
|
||||
|
||||
# 2. Instalar dependências limpas
|
||||
echo ""
|
||||
echo "📥 Instalando dependências com npm ci..."
|
||||
if [ -f "package-lock.json" ]; then
|
||||
run_as_owner "rm -rf node_modules && npm ci"
|
||||
print_success "Dependências instaladas"
|
||||
else
|
||||
print_warning "package-lock.json não encontrado, usando npm install"
|
||||
run_as_owner "npm install"
|
||||
fi
|
||||
|
||||
# 3. Configurar nginx para uploads maiores
|
||||
echo ""
|
||||
echo "🌐 Configurando nginx..."
|
||||
|
||||
NGINX_CONF="/etc/nginx/sites-available/inglescomideiasvivas"
|
||||
NGINX_BACKUP="/tmp/nginx_inglescomideiasvivas.backup"
|
||||
|
||||
# Verificar se o arquivo de configuração existe
|
||||
if [ -f "$NGINX_CONF" ]; then
|
||||
# Fazer backup
|
||||
$SUDO cp "$NGINX_CONF" "$NGINX_BACKUP"
|
||||
|
||||
# Verificar se client_max_body_size já existe
|
||||
if $SUDO grep -q "client_max_body_size" "$NGINX_CONF"; then
|
||||
print_warning "client_max_body_size já configurado, atualizando para 500M..."
|
||||
$SUDO sed -i 's/client_max_body_size .*/client_max_body_size 500M;/' "$NGINX_CONF"
|
||||
else
|
||||
# Adicionar client_max_body_size após client_body_timeout ou no bloco server
|
||||
$SUDO sed -i '/server {/a \ client_max_body_size 500M;' "$NGINX_CONF"
|
||||
print_success "client_max_body_size 500M adicionado ao nginx"
|
||||
fi
|
||||
|
||||
# Testar configuração do nginx
|
||||
echo "Testando configuração do nginx..."
|
||||
if $SUDO nginx -t 2>&1 | grep -q "successful"; then
|
||||
print_success "Configuração do nginx válida"
|
||||
$SUDO systemctl reload nginx
|
||||
print_success "Nginx recarregado"
|
||||
else
|
||||
print_error "Configuração do nginx inválida!"
|
||||
echo "Restorando backup..."
|
||||
$SUDO cp "$NGINX_BACKUP" "$NGINX_CONF"
|
||||
$SUDO nginx -t
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
print_warning "Arquivo de configuração do nginx não encontrado em $NGINX_CONF"
|
||||
echo "Você pode precisar configurar manualmente:"
|
||||
echo " sudo nano $NGINX_CONF"
|
||||
echo "Adicione 'client_max_body_size 500M;' no bloco server"
|
||||
fi
|
||||
|
||||
# 4. Limpar cache do Next.js e rebuild
|
||||
echo ""
|
||||
echo "🔨 Limpar cache e rebuild..."
|
||||
run_as_owner "rm -rf .next .next.cache"
|
||||
print_success "Cache limpo"
|
||||
|
||||
echo "Building..."
|
||||
run_as_owner "npm run build"
|
||||
print_success "Build concluído"
|
||||
|
||||
# 5. Reiniciar PM2
|
||||
echo ""
|
||||
echo "🔄 Reiniciando aplicação com PM2..."
|
||||
|
||||
# Verificar se o app existe no PM2
|
||||
if run_as_owner "pm2 list" | grep -q "iciv"; then
|
||||
run_as_owner "pm2 delete iciv"
|
||||
print_success "App antigo removido"
|
||||
fi
|
||||
|
||||
run_as_owner "pm2 start ecosystem.config.js"
|
||||
run_as_owner "pm2 save"
|
||||
print_success "Aplicação reiniciada"
|
||||
|
||||
# 6. Mostrar status
|
||||
echo ""
|
||||
echo "📊 Status da aplicação:"
|
||||
run_as_owner "pm2 list"
|
||||
|
||||
echo ""
|
||||
echo "🎉 Deploy concluído com sucesso!"
|
||||
echo ""
|
||||
echo "Logs em tempo real:"
|
||||
echo " pm2 logs iciv"
|
||||
echo ""
|
||||
echo "Para verificar logs de erro:"
|
||||
echo " pm2 logs iciv --err"
|
||||
Reference in New Issue
Block a user