Files
avz-site/scripts/dev.sh
T

328 lines
10 KiB
Bash

#!/bin/bash
# ============================================================================
# Script de Desenvolvimento Local - Avanzato
# ============================================================================
# Uso: bash scripts/dev.sh [comando]
#
# Comandos:
# start - Inicia servidor de desenvolvimento (padrao)
# build - Build de producao
# build-hom - Build para homologacao
# preview - Preview do build local
# deploy-hom - Deploy para homologacao
# deploy-prod - Deploy para producao
# clean - Limpa dist/ e node_modules/.cache
# help - Mostra esta ajuda
#
# EXEMPLOS:
# bash scripts/dev.sh start
# bash scripts/dev.sh build-hom
# bash scripts/dev.sh deploy-hom
# ============================================================================
set -e
# Cores
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
# Diretorios
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
DIST_DIR="${PROJECT_DIR}/dist"
# Comando
CMD="${1:-start}"
# Banner
show_banner() {
echo ""
echo -e "${CYAN}==========================================${NC}"
echo -e "${CYAN} Avanzato - Ambiente de Desenvolvimento${NC}"
echo -e "${CYAN}==========================================${NC}"
echo ""
}
# Verificar dependencias
check_deps() {
if ! command -v node &> /dev/null; then
echo -e "${RED}Erro: Node.js nao encontrado!${NC}"
echo "Instale: https://nodejs.org/ (versao 20+)"
exit 1
fi
if [ ! -d "${PROJECT_DIR}/node_modules" ]; then
echo -e "${YELLOW}node_modules nao encontrado. Instalando...${NC}"
cd "$PROJECT_DIR" && npm install
fi
}
# Start - Desenvolvimento local
cmd_start() {
show_banner
check_deps
echo -e "${GREEN}Iniciando servidor de desenvolvimento...${NC}"
echo -e "Acesse: ${CYAN}http://localhost:5173${NC}"
echo ""
echo -e "${YELLOW}Ambiente: DESENVOLVIMENTO LOCAL${NC}"
echo -e "- Mautic: ${YELLOW}modo simulacao${NC}"
echo -e "- Google Ads: ${YELLOW}desativado${NC}"
echo -e "- Facebook Pixel: ${YELLOW}desativado${NC}"
echo ""
cd "$PROJECT_DIR" && npm run dev
}
# Build - Producao
cmd_build() {
show_banner
check_deps
echo -e "${BLUE}[1/2]${NC} Build de PRODUCAO..."
cd "$PROJECT_DIR"
npm run build
echo ""
echo -e "${BLUE}[2/2]${NC} Configurando robots.txt para producao..."
cp "${PROJECT_DIR}/public/robots-producao.txt" "${DIST_DIR}/robots.txt"
echo -e "${GREEN}OK${NC} - Build de producao pronto em dist/"
echo ""
echo -e "Para preview: ${CYAN}bash scripts/dev.sh preview${NC}"
}
# Build - Homologacao
cmd_build_hom() {
show_banner
check_deps
echo -e "${YELLOW}[1/2]${NC} Build para HOMOLOGACAO..."
cd "$PROJECT_DIR"
npm run build
echo ""
echo -e "${YELLOW}[2/2]${NC} Configurando anti-indexacao..."
# robots.txt ja esta com noindex por padrao
echo -e "${GREEN}OK${NC} - Build de homologacao pronto em dist/"
echo ""
echo -e "Para deploy: ${CYAN}bash scripts/dev.sh deploy-hom${NC}"
}
# Preview do build
cmd_preview() {
if [ ! -d "$DIST_DIR" ]; then
echo -e "${RED}Erro: Pasta dist/ nao encontrada!${NC}"
echo "Execute primeiro: bash scripts/dev.sh build"
exit 1
fi
show_banner
echo -e "${GREEN}Iniciando preview do build...${NC}"
echo -e "Acesse: ${CYAN}http://localhost:4173${NC}"
echo ""
cd "$PROJECT_DIR" && npm run preview
}
# Deploy Homologacao
cmd_deploy_hom() {
show_banner
echo -e "${YELLOW}Deploy para HOMOLOGACAO${NC}"
echo ""
# Verificar se dist existe
if [ ! -d "$DIST_DIR" ]; then
echo -e "${RED}Erro: dist/ nao encontrado!${NC}"
echo "Execute: bash scripts/dev.sh build-hom"
exit 1
fi
# Verificar configuracao SSH
if [ -z "${SSH_HOM_HOST}" ]; then
echo -e "${YELLOW}Configure as variaveis de ambiente:${NC}"
echo ""
echo " export SSH_HOM_HOST=IP_DO_SERVIDOR_HOM"
echo " export SSH_HOM_USER=usuario"
echo " export SSH_HOM_PATH=/var/www/avanzato-hom"
echo ""
echo "Ou edite o arquivo: ${PROJECT_DIR}/scripts/.env.local"
echo ""
# Tentar carregar .env.local
if [ -f "${PROJECT_DIR}/scripts/.env.local" ]; then
echo -e "${BLUE}Carregando scripts/.env.local...${NC}"
source "${PROJECT_DIR}/scripts/.env.local"
fi
if [ -z "${SSH_HOM_HOST}" ]; then
echo -e "${RED}Configuracao nao encontrada. Abortando.${NC}"
exit 1
fi
fi
echo -e "${BLUE}[1/3]${NC} Verificando conexao..."
if ! ssh -o ConnectTimeout=10 "${SSH_HOM_USER}@${SSH_HOM_HOST}" "echo 'OK'" 2>/dev/null; then
echo -e "${RED}Erro: Nao foi possivel conectar ao servidor.${NC}"
echo "Verifique SSH: ssh-copy-id -i ~/.ssh/id_ed25519.pub ${SSH_HOM_USER}@${SSH_HOM_HOST}"
exit 1
fi
echo -e "${GREEN}OK${NC}"
echo -e "${BLUE}[2/3]${NC} Enviando arquivos..."
rsync -avz --delete \
--exclude='backups' \
"$DIST_DIR/" \
"${SSH_HOM_USER}@${SSH_HOM_HOST}:${SSH_HOM_PATH}/"
echo -e "${GREEN}OK${NC}"
echo -e "${BLUE}[3/3]${NC} Finalizando..."
ssh "${SSH_HOM_USER}@${SSH_HOM_HOST}" "sudo systemctl reload nginx 2>/dev/null || true"
echo ""
echo -e "${GREEN}Deploy para HOMOLOGACAO concluido!${NC}"
echo -e "Acesse: ${CYAN}https://homologacao.avanzato.com.br${NC}"
echo ""
}
# Deploy Producao
cmd_deploy_prod() {
show_banner
echo -e "${RED} Deploy para PRODUCAO${NC}"
echo ""
# Verificar se dist existe
if [ ! -d "$DIST_DIR" ]; then
echo -e "${RED}Erro: dist/ nao encontrado!${NC}"
echo "Execute: bash scripts/dev.sh build"
exit 1
fi
# Verificar configuracao SSH
if [ -z "${SSH_PROD_HOST}" ]; then
echo -e "${YELLOW}Configure as variaveis de ambiente:${NC}"
echo ""
echo " export SSH_PROD_HOST=IP_DO_SERVIDOR_PROD"
echo " export SSH_PROD_USER=usuario"
echo " export SSH_PROD_PATH=/var/www/avanzato"
echo ""
# Tentar carregar .env.local
if [ -f "${PROJECT_DIR}/scripts/.env.local" ]; then
echo -e "${BLUE}Carregando scripts/.env.local...${NC}"
source "${PROJECT_DIR}/scripts/.env.local"
fi
if [ -z "${SSH_PROD_HOST}" ]; then
echo -e "${RED}Configuracao nao encontrada. Abortando.${NC}"
exit 1
fi
fi
echo -e "${RED} ============================================${NC}"
echo -e "${RED} ATENCAO: Deploy para PRODUCAO${NC}"
echo -e "${RED} ============================================${NC}"
echo ""
read -p "Tem certeza que deseja deploy para PRODUCAO? (digite 'sim' para confirmar): " confirm
if [ "$confirm" != "sim" ]; then
echo -e "${YELLOW}Deploy cancelado.${NC}"
exit 0
fi
echo -e "${BLUE}[1/4]${NC} Verificando conexao..."
if ! ssh -o ConnectTimeout=10 "${SSH_PROD_USER}@${SSH_PROD_HOST}" "echo 'OK'" 2>/dev/null; then
echo -e "${RED}Erro: Nao foi possivel conectar ao servidor.${NC}"
exit 1
fi
echo -e "${GREEN}OK${NC}"
echo -e "${BLUE}[2/4]${NC} Criando backup..."
ssh "${SSH_PROD_USER}@${SSH_PROD_HOST}" "
if [ -d '${SSH_PROD_PATH}' ]; then
mkdir -p '${SSH_PROD_PATH}/backups'
cp -r '${SSH_PROD_PATH}' '${SSH_PROD_PATH}/backups/backup-$(date +%Y%m%d-%H%M%S)' 2>/dev/null || true
fi
" 2>/dev/null || echo -e "${YELLOW}Backup ignorado.${NC}"
echo -e "${BLUE}[3/4]${NC} Enviando arquivos..."
rsync -avz --delete \
--exclude='backups' \
"$DIST_DIR/" \
"${SSH_PROD_USER}@${SSH_PROD_HOST}:${SSH_PROD_PATH}/"
echo -e "${GREEN}OK${NC}"
echo -e "${BLUE}[4/4]${NC} Finalizando..."
ssh "${SSH_PROD_USER}@${SSH_PROD_HOST}" "sudo systemctl reload nginx 2>/dev/null || true"
echo ""
echo -e "${GREEN}Deploy para PRODUCAO concluido!${NC}"
echo -e "Acesse: ${CYAN}https://avanzato.com.br${NC}"
echo ""
}
# Clean
cmd_clean() {
show_banner
echo -e "${YELLOW}Limpando caches...${NC}"
rm -rf "${DIST_DIR}"
rm -rf "${PROJECT_DIR}/node_modules/.cache"
rm -rf "${PROJECT_DIR}/node_modules/.vite"
echo -e "${GREEN}OK${NC} - Caches limpos"
}
# Help
cmd_help() {
echo ""
echo -e "${CYAN}Avanzato - Script de Desenvolvimento${NC}"
echo ""
echo -e "Uso: ${YELLOW}bash scripts/dev.sh [comando]${NC}"
echo ""
echo -e "${GREEN}Comandos disponiveis:${NC}"
echo ""
echo " ${YELLOW}start${NC} Inicia servidor dev (http://localhost:5173)"
echo " ${YELLOW}build${NC} Build de producao"
echo " ${YELLOW}build-hom${NC} Build para homologacao"
echo " ${YELLOW}preview${NC} Preview do build local (http://localhost:4173)"
echo " ${YELLOW}deploy-hom${NC} Deploy para servidor de homologacao"
echo " ${YELLOW}deploy-prod${NC} Deploy para servidor de producao"
echo " ${YELLOW}clean${NC} Limpa dist/ e caches"
echo " ${YELLOW}help${NC} Mostra esta ajuda"
echo ""
echo -e "${GREEN}Fluxo de trabalho:${NC}"
echo ""
echo " 1. Desenvolva: bash scripts/dev.sh start"
echo " 2. Build hom: bash scripts/dev.sh build-hom"
echo " 3. Deploy hom: bash scripts/dev.sh deploy-hom"
echo " 4. Aprove..."
echo " 5. Build prod: bash scripts/dev.sh build"
echo " 6. Deploy prod: bash scripts/dev.sh deploy-prod"
echo ""
}
# Dispatcher
case "$CMD" in
start|dev)
cmd_start
;;
build)
cmd_build
;;
build-hom|build-homolog|build-staging)
cmd_build_hom
;;
preview)
cmd_preview
;;
deploy-hom|deploy-homolog|deploy-staging)
cmd_deploy_hom
;;
deploy-prod|deploy-production)
cmd_deploy_prod
;;
clean)
cmd_clean
;;
help|--help|-h)
cmd_help
;;
*)
echo -e "${RED}Comando desconhecido: ${CMD}${NC}"
cmd_help
exit 1
;;
esac