106 lines
2.5 KiB
Bash
106 lines
2.5 KiB
Bash
|
|
#!/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"
|