Files

422 lines
13 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# ============================================================================
# Script de Deploy Manual - Avanzato
# ============================================================================
# Uso: bash deploy-manual.sh [caminho-do-build.zip]
#
# Exemplo:
# bash deploy-manual.sh /caminho/avanzato-site-build.zip
#
# Se nao passar argumento, procura avanzato-site-build.zip no diretorio atual
# ============================================================================
set -e
# =============================================================================
# CONFIGURACOES - AJUSTE SE NECESSARIO
# =============================================================================
# Caminho do site no servidor
SITE_PATH="/opt/avanzato/site/app"
# Container Docker
CONTAINER_NAME="avanzato-site"
# Porta do site
SITE_PORT="8080"
# Dominio
DOMAIN="avanzato.com.br"
# Mautic URL (para validacao)
MAUTIC_URL="mkt.avanzato.com.br"
# =============================================================================
# CORES
# =============================================================================
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
BOLD='\033[1m'
# =============================================================================
# FUNCOES DE UTILIDADE
# =============================================================================
print_header() {
echo ""
echo -e "${CYAN}============================================================${NC}"
echo -e "${CYAN} $1${NC}"
echo -e "${CYAN}============================================================${NC}"
echo ""
}
print_step() {
echo -e "${BLUE}[PASSO $1]${NC} $2"
}
print_ok() {
echo -e "${GREEN}${NC} $1"
}
print_error() {
echo -e "${RED} ✗ ERRO:${NC} $1"
}
print_warning() {
echo -e "${YELLOW} ⚠ AVISO:${NC} $1"
}
print_info() {
echo -e "${CYAN} ${NC} $1"
}
confirm() {
read -p "$1 (s/N): " response
case "$response" in
[sS]) return 0 ;;
*) return 1 ;;
esac
}
# =============================================================================
# VALIDACAO INICIAL
# =============================================================================
print_header "DEPLOY MANUAL - AVANZATO"
# Verificar se esta no servidor correto
if [ ! -d "$SITE_PATH" ]; then
print_error "Diretorio do site nao encontrado: $SITE_PATH"
print_info "Verifique se esta no servidor correto"
exit 1
fi
print_ok "Diretorio do site encontrado: $SITE_PATH"
# Verificar se Docker esta rodando
if ! docker ps &>/dev/null; then
print_error "Docker nao esta acessivel. Verifique permissoes."
exit 1
fi
print_ok "Docker acessivel"
# Verificar arquivo de build
BUILD_FILE="${1:-avanzato-site-build.zip}"
if [ ! -f "$BUILD_FILE" ]; then
print_error "Arquivo de build nao encontrado: $BUILD_FILE"
print_info "Uso: bash deploy-manual.sh /caminho/do/build.zip"
print_info "Ou coloque avanzato-site-build.zip nesta pasta"
# Listar arquivos zip disponiveis
zips=$(find . -maxdepth 1 -name "*.zip" -type f 2>/dev/null)
if [ -n "$zips" ]; then
echo ""
print_info "Arquivos zip encontrados:"
echo "$zips" | while read f; do echo " - $f ($(du -h "$f" | cut -f1))"; done
fi
exit 1
fi
print_ok "Arquivo de build encontrado: $BUILD_FILE ($(du -h "$BUILD_FILE" | cut -f1))"
# =============================================================================
# PASSO 1: BACKUP DO DIST ATUAL
# =============================================================================
print_step "1" "Backup do dist atual"
if [ -d "$SITE_PATH/dist" ]; then
BACKUP_NAME="dist_bkp_$(date +%Y%m%d_%H%M)"
cp -r "$SITE_PATH/dist" "$SITE_PATH/$BACKUP_NAME"
print_ok "Backup criado: $SITE_PATH/$BACKUP_NAME"
else
print_warning "Dist atual nao encontrado, pulando backup"
fi
# =============================================================================
# PASSO 2: ENVIAR/EXTRAIR NOVO BUILD
# =============================================================================
print_step "2" "Extrair novo build"
# Criar diretorio temporario
TEMP_DIR="/tmp/avanzato-deploy-$(date +%s)"
mkdir -p "$TEMP_DIR"
# Extrair
unzip -q "$BUILD_FILE" -d "$TEMP_DIR"
print_ok "Build extraido para $TEMP_DIR"
# Verificar estrutura
if [ -d "$TEMP_DIR/dist" ]; then
DIST_SOURCE="$TEMP_DIR/dist"
elif [ -d "$TEMP_DIR/app/dist" ]; then
DIST_SOURCE="$TEMP_DIR/app/dist"
else
print_error "Estrutura do zip invalida. Esperado: dist/ ou app/dist/"
print_info "Conteudo do zip:"
find "$TEMP_DIR" -maxdepth 2 -type d
rm -rf "$TEMP_DIR"
exit 1
fi
print_ok "Dist encontrado em: $DIST_SOURCE"
# =============================================================================
# PASSO 3: VALIDAR NOVO DIST
# =============================================================================
print_step "3" "Validar novo dist"
# Verificar index.html
if [ ! -f "$DIST_SOURCE/index.html" ]; then
print_error "index.html nao encontrado no novo dist!"
rm -rf "$TEMP_DIR"
exit 1
fi
print_ok "index.html existe"
# Verificar assets
if [ ! -d "$DIST_SOURCE/assets" ]; then
print_error "Pasta assets/ nao encontrada!"
rm -rf "$TEMP_DIR"
exit 1
fi
print_ok "assets/ existe ($(ls "$DIST_SOURCE/assets/" | wc -l) arquivos)"
# Verificar favicon
if [ -f "$DIST_SOURCE/favicon.svg" ] || [ -f "$DIST_SOURCE/favicon.ico" ]; then
print_ok "favicon existe"
else
print_warning "favicon nao encontrado (opcional)"
fi
# Verificar Mautic no codigo
if grep -q "$MAUTIC_URL" "$DIST_SOURCE/index.html" 2>/dev/null; then
print_ok "Mautic ($MAUTIC_URL) encontrado no index.html"
else
print_warning "URL do Mautic nao encontrada no index.html"
fi
# Verificar Facebook Pixel
if grep -q "1223271852059785" "$DIST_SOURCE/index.html" 2>/dev/null; then
print_ok "Facebook Pixel encontrado no index.html"
else
print_warning "Facebook Pixel nao encontrado no index.html"
fi
# Verificar Google Ads
if grep -q "AW-16714813566" "$DIST_SOURCE/index.html" 2>/dev/null; then
print_ok "Google Ads encontrado no index.html"
else
print_warning "Google Ads nao encontrado no index.html"
fi
# =============================================================================
# PASSO 4: CONFIRMAR DEPLOY
# =============================================================================
echo ""
print_info "Resumo do deploy:"
echo " Build: $BUILD_FILE"
echo " Dist origem: $DIST_SOURCE"
echo " Dist destino: $SITE_PATH/dist"
echo " Container: $CONTAINER_NAME"
echo ""
if ! confirm "Confirma o deploy?"; then
print_warning "Deploy cancelado pelo usuario"
rm -rf "$TEMP_DIR"
exit 0
fi
# =============================================================================
# PASSO 5: SUBSTITUIR DIST
# =============================================================================
print_step "5" "Substituir dist"
# Remover dist antigo
if [ -d "$SITE_PATH/dist" ]; then
rm -rf "$SITE_PATH/dist"
print_ok "Dist antigo removido"
fi
# Copiar novo dist
cp -r "$DIST_SOURCE" "$SITE_PATH/dist"
print_ok "Novo dist copiado para $SITE_PATH/dist"
# Ajustar permissoes
chown -R root:root "$SITE_PATH/dist" 2>/dev/null || true
chmod -R 755 "$SITE_PATH/dist" 2>/dev/null || true
# =============================================================================
# PASSO 6: VALIDAR ARQUIVOS
# =============================================================================
print_step "6" "Validar arquivos do novo dist"
if [ ! -f "$SITE_PATH/dist/index.html" ]; then
print_error "index.html nao encontrado apos copiar!"
exit 1
fi
print_ok "index.html presente"
if [ ! -d "$SITE_PATH/dist/assets" ]; then
print_error "assets/ nao encontrado apos copiar!"
exit 1
fi
print_ok "assets/ presente ($(ls "$SITE_PATH/dist/assets/" | wc -l) arquivos)"
# Mostrar tamanho
DIST_SIZE=$(du -sh "$SITE_PATH/dist" | cut -f1)
print_info "Tamanho do dist: $DIST_SIZE"
# =============================================================================
# PASSO 7: REINICIAR CONTAINER
# =============================================================================
print_step "7" "Reiniciar container Docker"
cd "$SITE_PATH"
docker compose down
print_ok "Container parado"
docker compose up -d
print_ok "Container iniciado"
# Aguardar container subir
print_info "Aguardando container iniciar..."
sleep 5
# =============================================================================
# PASSO 8: VALIDAR CONTAINER
# =============================================================================
print_step "8" "Validar container"
if docker ps --format "{{.Names}}" | grep -q "$CONTAINER_NAME"; then
print_ok "Container '$CONTAINER_NAME' esta rodando"
else
print_error "Container '$CONTAINER_NAME' NAO encontrado!"
docker ps
exit 1
fi
# =============================================================================
# PASSO 9: TESTAR LOCALMENTE
# =============================================================================
print_step "9" "Testar localmente"
# Testar HTTP
HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:$SITE_PORT 2>/dev/null || echo "000")
if [ "$HTTP_STATUS" = "200" ]; then
print_ok "HTTP 200 OK - Site responde na porta $SITE_PORT"
else
print_error "HTTP $HTTP_STATUS - Site nao responde corretamente"
print_info "Aguardando mais 5 segundos..."
sleep 5
HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:$SITE_PORT 2>/dev/null || echo "000")
if [ "$HTTP_STATUS" = "200" ]; then
print_ok "HTTP 200 OK - Site responde agora"
else
print_error "HTTP $HTTP_STATUS - Problema persistente"
fi
fi
# Validar Mautic no HTML
if curl -s http://127.0.0.1:$SITE_PORT | grep -q "$MAUTIC_URL"; then
print_ok "Mautic ($MAUTIC_URL) encontrado no HTML"
else
print_warning "Mautic nao encontrado no HTML"
fi
# =============================================================================
# PASSO 10: LIMPAR CACHE CLOUDFLARE
# =============================================================================
print_step "10" "Limpar cache Cloudflare"
print_info "Execute manualmente no painel Cloudflare:"
echo ""
echo -e " ${CYAN}1.${NC} Acesse: https://dash.cloudflare.com"
echo -e " ${CYAN}2.${NC} Selecione o dominio: $DOMAIN"
echo -e " ${CYAN}3.${NC} Va em: Caching → Configuration"
echo -e " ${CYAN}4.${NC} Clique: ${BOLD}Purge Everything${NC}"
echo -e " ${CYAN}5.${NC} Ative: ${BOLD}Development Mode → ON${NC}"
echo ""
if confirm "Ja limpou o cache do Cloudflare"; then
print_ok "Cache limpo"
else
print_warning "Lembre-se de limpar o cache manualmente!"
fi
# =============================================================================
# PASSO 11: TESTAR NO NAVEGADOR
# =============================================================================
print_step "11" "Testar no navegador"
echo ""
print_info "URLs para testar:"
echo -e " ${CYAN}1.${NC} https://$DOMAIN/?v=$(date +%Y%m%d)"
echo -e " ${CYAN}2.${NC} https://$DOMAIN/contato"
echo -e " ${CYAN}3.${NC} https://$DOMAIN/avaliacao"
echo -e " ${CYAN}4.${NC} https://$DOMAIN/tecnologia-para-condominios"
echo ""
if confirm "Deseja abrir o site no navegador agora (via curl)"; then
echo ""
print_info "Testando pagina principal..."
curl -I "https://$DOMAIN/?v=$(date +%Y%m%d)" 2>/dev/null | head -5 || \
print_warning "Nao foi possivel testar via HTTPS (pode ser normal)"
fi
# =============================================================================
# PASSO 12: LIMPAR TEMP
# =============================================================================
print_step "12" "Limpar arquivos temporarios"
rm -rf "$TEMP_DIR"
print_ok "Arquivos temporarios removidos"
# =============================================================================
# RESUMO FINAL
# =============================================================================
echo ""
print_header "DEPLOY CONCLUIDO!"
echo -e "${GREEN}Site atualizado com sucesso!${NC}"
echo ""
echo -e " Build: ${CYAN}$BUILD_FILE${NC}"
echo -e " Dist: ${CYAN}$SITE_PATH/dist${NC}"
echo -e " Container: ${CYAN}$CONTAINER_NAME${NC}"
echo -e " Porta: ${CYAN}$SITE_PORT${NC}"
echo ""
echo -e "${YELLOW}Proximos passos:${NC}"
echo -e " 1. Limpar cache Cloudflare (se ainda nao fez)"
echo -e " 2. Testar no navegador: https://$DOMAIN"
echo -e " 3. Testar formularios"
echo -e " 4. Verificar leads no Mautic"
echo ""
echo -e "${YELLOW}Em caso de problema:${NC}"
echo -e " 1. Restaurar backup: ${CYAN}cp -r $SITE_PATH/dist_bkp_* $SITE_PATH/dist${NC}"
echo -e " 2. Reiniciar: ${CYAN}cd $SITE_PATH && docker compose down && docker compose up -d${NC}"
echo -e " 3. Limpar cache Safari: ${CYAN}CMD + OPTION + E${NC}"
echo ""