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