#!/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"