top-tran/backend/deploy.sh

106 lines
2.5 KiB
Bash
Raw Normal View History

2026-05-03 21:25:37 -03:00
#!/bin/bash
# Script de deploy - funciona para dev e prod
set -e
# Cores para output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Função para printar com cor
print_info() {
echo -e "${BLUE}${NC} $1"
}
print_success() {
echo -e "${GREEN}${NC} $1"
}
print_warning() {
echo -e "${YELLOW}${NC} $1"
}
print_error() {
echo -e "${RED}${NC} $1"
}
# Verificar argumentos
ENV=${1:-production}
if [ "$ENV" != "production" ] && [ "$ENV" != "development" ] && [ "$ENV" != "dev" ] && [ "$ENV" != "prod" ]; then
print_error "Ambiente inválido: $ENV"
echo "Uso: ./deploy.sh [development|production|dev|prod]"
exit 1
fi
# Normalizar nomes
if [ "$ENV" = "dev" ]; then
ENV="development"
fi
if [ "$ENV" = "prod" ]; then
ENV="production"
fi
COMPOSE_FILE="docker-compose.$ENV.yml"
print_info "🚀 Iniciando deploy para: $ENV"
# Verificar se arquivo .env existe
if [ ! -f ".env.$ENV" ]; then
print_error "Arquivo .env.$ENV não encontrado!"
exit 1
fi
if [ ! -f "$COMPOSE_FILE" ]; then
print_error "Arquivo $COMPOSE_FILE não encontrado!"
exit 1
fi
print_success "Usando $COMPOSE_FILE com .env.$ENV"
# Executar migrações localmente antes de subir o container
# (prisma é devDependency e não está disponível no runtime do container)
print_info "Executando migrações do Prisma..."
DB_URL=$(grep "^DATABASE_URL=" ".env.$ENV" | cut -d'=' -f2-)
if DATABASE_URL="$DB_URL" npx prisma migrate deploy; then
print_success "Migrações executadas"
else
print_warning "Erro nas migrações (talvez já estejam aplicadas)"
fi
# Parar e remover containers antigos
print_info "Parando containers antigos..."
CONTAINER_NAME="toptran-backend-${ENV}"
podman stop "$CONTAINER_NAME" 2>/dev/null || true
podman rm -f "$CONTAINER_NAME" 2>/dev/null || true
podman-compose -f "$COMPOSE_FILE" down 2>/dev/null || true
# Build
print_info "Building docker image..."
podman-compose -f "$COMPOSE_FILE" build --no-cache
print_success "Build concluído"
# Iniciar containers
print_info "Iniciando containers..."
podman-compose -f "$COMPOSE_FILE" up -d
print_success "Containers iniciados"
# Mostrar status
print_info "Status dos containers:"
podman ps --filter "name=toptran" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
# Mostrar logs
print_info "Ultimos logs:"
sleep 3
podman-compose -f "$COMPOSE_FILE" logs --tail=20 backend
print_success "Deploy concluído para $ENV!"
print_info "Para ver logs: podman-compose -f $COMPOSE_FILE logs -f backend"