You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
orquestrador/setup-gcp.sh

246 lines
8.0 KiB
Bash

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/bin/bash
# Script interativo para setup no Google Cloud
# Execute: bash setup-gcp.sh
set -e
echo "╔══════════════════════════════════════════════════════════╗"
echo "║ 🚀 Setup Google Cloud para Orquestrador MVP ║"
echo "╚══════════════════════════════════════════════════════════╝"
echo ""
# 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 perguntar
ask() {
local prompt="$1"
local default="$2"
local input
read -p "$prompt [$default]: " input
echo "${input:-$default}"
}
# Função para sucesso
success() {
echo -e "${GREEN}$1${NC}"
}
# Função para erro
error() {
echo -e "${RED}$1${NC}"
exit 1
}
# Função para info
info() {
echo -e "${BLUE} $1${NC}"
}
# Função para aviso
warning() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
# ============================================================================
# STEP 1: Verificar pré-requisitos
# ============================================================================
echo ""
echo "📋 STEP 1: Verificando pré-requisitos..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# Verificar gcloud
if ! command -v gcloud &> /dev/null; then
error "Google Cloud SDK não instalado. Acesse: https://cloud.google.com/sdk/docs/install"
fi
success "Google Cloud SDK instalado"
# Verificar autenticação
if ! gcloud auth list --filter=status:ACTIVE --format="value(account)" | grep -q "@"; then
warning "Você não está autenticado no Google Cloud"
info "Executando: gcloud auth login"
gcloud auth login
fi
success "Autenticado no Google Cloud"
echo ""
# ============================================================================
# STEP 2: Definir ou escolher projeto
# ============================================================================
echo ""
echo "📦 STEP 2: Configurar Projeto Google Cloud..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# Listar projetos existentes
echo ""
info "Seus projetos atuais:"
gcloud projects list --format="table(projectId,name)" | head -10
echo ""
PROJECT_ID=$(ask "Digite seu PROJECT_ID (ex: orquestrador-mvp)" "orquestrador-mvp")
# Verificar se projeto existe
if gcloud projects describe "$PROJECT_ID" &> /dev/null; then
success "Projeto '$PROJECT_ID' encontrado"
else
warning "Projeto '$PROJECT_ID' não existe. Criando..."
gcloud projects create "$PROJECT_ID" --name="Orquestrador MVP"
success "Projeto criado"
fi
# Configurar como padrão
gcloud config set project "$PROJECT_ID"
success "Projeto configurado como padrão"
echo ""
# ============================================================================
# STEP 3: Habilitar APIs
# ============================================================================
echo ""
echo "🔧 STEP 3: Habilitando APIs necessárias..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
info "Habilitando: Cloud Run, Vertex AI, Cloud Build, Cloud SQL..."
gcloud services enable \
run.googleapis.com \
aiplatform.googleapis.com \
cloudbuild.googleapis.com \
sqladmin.googleapis.com \
cloudresourcemanager.googleapis.com \
--quiet
success "APIs habilitadas"
echo ""
# ============================================================================
# STEP 4: Configurar Cloud SQL
# ============================================================================
echo ""
echo "🗄️ STEP 4: Configurar Banco de Dados (Cloud SQL)..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
DB_INSTANCE_NAME="orquestrador-db"
REGION="us-central1"
# Verificar se instância existe
if gcloud sql instances describe "$DB_INSTANCE_NAME" --region="$REGION" &> /dev/null; then
success "Instância Cloud SQL já existe"
else
warning "Criando instância Cloud SQL PostgreSQL..."
warning "Isso pode levar 2-3 minutos..."
gcloud sql instances create "$DB_INSTANCE_NAME" \
--database-version=POSTGRES_15 \
--region="$REGION" \
--tier=db-f1-micro \
--no-assign-ip \
--quiet
success "Instância Cloud SQL criada"
fi
# Criar banco de dados
if gcloud sql databases describe orquestrador --instance="$DB_INSTANCE_NAME" &> /dev/null; then
success "Banco de dados já existe"
else
info "Criando banco de dados 'orquestrador'..."
gcloud sql databases create orquestrador \
--instance="$DB_INSTANCE_NAME" \
--quiet
success "Banco de dados criado"
fi
# Definir senha
echo ""
read -s -p "Defina uma senha segura para o usuário 'postgres': " DB_PASSWORD
echo ""
gcloud sql users set-password postgres \
--instance="$DB_INSTANCE_NAME" \
--password="$DB_PASSWORD" \
--quiet
success "Senha do usuário postgres definida"
echo ""
# ============================================================================
# STEP 5: Configurar variáveis de ambiente
# ============================================================================
echo ""
echo "🔐 STEP 5: Configurar Variáveis de Ambiente..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
MOCKAROO_API_KEY=$(ask "Cole sua API Key do Mockaroo (https://www.mockaroo.com)" "")
if [ -z "$MOCKAROO_API_KEY" ]; then
error "API Key do Mockaroo é obrigatória"
fi
# Criar arquivo .env.prod
cat > .env.prod << EOF
GOOGLE_PROJECT_ID=$PROJECT_ID
GOOGLE_LOCATION=$REGION
DB_HOST=/cloudsql/$PROJECT_ID:$REGION:$DB_INSTANCE_NAME
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=$DB_PASSWORD
DB_NAME=orquestrador
MOCKAROO_API_KEY=$MOCKAROO_API_KEY
MOCKAROO_BASE_URL=https://my.api.mockaroo.com
USE_MOCKAROO_WRITES=false
EOF
success "Arquivo .env.prod criado"
warning "O arquivo .env.prod contém senhas. Nunca commite!"
echo ""
# ============================================================================
# STEP 6: Resumo
# ============================================================================
echo ""
echo "╔══════════════════════════════════════════════════════════╗"
echo "║ ✅ Setup Completo! ║"
echo "╚══════════════════════════════════════════════════════════╝"
echo ""
echo "📋 Configuração Resumida:"
echo " Projeto: $PROJECT_ID"
echo " Banco de dados: orquestrador-db ($REGION)"
echo " Usuário: postgres"
echo " Banco: orquestrador"
echo ""
echo "🚀 Próximos passos:"
echo ""
echo " 1. Teste a aplicação localmente (opcional):"
echo " docker-compose up"
echo " bash test-local.sh http://localhost:8000"
echo ""
echo " 2. Faça o deploy no Google Cloud:"
echo " bash deploy.sh $PROJECT_ID $REGION"
echo ""
echo " 3. Pegue a URL do seu serviço:"
echo " gcloud run services describe orquestrador --region=$REGION --format='value(status.url)'"
echo ""
echo "💡 Dicas:"
echo " - Docs: cat README.md"
echo " - Troubleshooting: cat TROUBLESHOOTING.md"
echo " - Deploy Simples: cat DEPLOY_SIMPLES.md"
echo ""