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