top-tran/backend/deploy.sh
Rayan Konecny 4492a12ca2 Deploy prd
2026-05-03 21:25:37 -03:00

105 lines
2.5 KiB
Bash
Executable file
Raw 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 - 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"