diff --git a/.env.example b/.env.example index 967e1a7..0ce4b4d 100644 --- a/.env.example +++ b/.env.example @@ -17,12 +17,6 @@ DB_USER=root DB_PASSWORD=SUA_SENHA DB_NAME=orquestrador_mock -# ============================================ -# CONFIGURACOES DO BANCO DE DADOS (CLOUD SQL MYSQL - PRODUCAO) -# ============================================ -# Comentado ate fazer deploy. Descomente em producao. -# DB_CLOUD_SQL_CONNECTION_NAME=projeto:regiao:instancia-mysql-tools - # ============================================ # CONFIGURACOES DO BANCO DE DADOS MOCK (MYSQL - DADOS FICTICIOS) # ============================================ @@ -31,7 +25,6 @@ MOCK_DB_PORT=3306 MOCK_DB_USER=root MOCK_DB_PASSWORD=SUA_SENHA MOCK_DB_NAME=orquestrador_mock -# MOCK_DB_CLOUD_SQL_CONNECTION_NAME=projeto:regiao:instancia-mysql MOCK_SEED_ENABLED=true AUTO_SEED_TOOLS=true AUTO_SEED_MOCK=true @@ -50,13 +43,6 @@ ENVIRONMENT=development # DEBUG deve ser false em producao DEBUG=true -# ============================================ -# CLOUD RUN - REDE PARA MYSQL CORPORATIVO (PRODUCAO) -# ============================================ -# Ex.: projects//locations//connectors/ -# RUN_VPC_CONNECTOR= -# RUN_VPC_EGRESS=private-ranges-only - # ============================================ # TELEGRAM (SERVICO SATELITE) # ============================================ diff --git a/.gcloudignore b/.gcloudignore deleted file mode 100644 index 5ce3af4..0000000 --- a/.gcloudignore +++ /dev/null @@ -1,19 +0,0 @@ -.git -.gitignore -venv/ -.venv/ -env/ -__pycache__/ -*.pyc -*.pyo -*.egg-info/ -.pytest_cache/ -.coverage -htmlcov/ -.DS_Store -*.log -.vscode/ -.idea/ -.env -node_modules/ - diff --git a/CLOUD_SQL_PROXY.md b/CLOUD_SQL_PROXY.md deleted file mode 100644 index f901141..0000000 --- a/CLOUD_SQL_PROXY.md +++ /dev/null @@ -1,56 +0,0 @@ -# Configuração para Cloud SQL Proxy (Optional) - -Para usar Cloud SQL em vez de PostgreSQL local: - -## 1. Instale o Cloud SQL Proxy - -```bash -sudo curl https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -o cloud_sql_proxy -sudo chmod +x cloud_sql_proxy -``` - -## 2. Crie uma Service Account - -```bash -# No Cloud Console ou via gcloud -gcloud iam service-accounts create cloudsql-proxy \ - --display-name="Cloud SQL Proxy" - -# Dê permissões -gcloud projects add-iam-policy-binding PROJECT_ID \ - --member="serviceAccount:cloudsql-proxy@PROJECT_ID.iam.gserviceaccount.com" \ - --role="roles/cloudsql.client" -``` - -## 3. Configure Variáveis de Ambiente - -```env -# Opção A: Unix Socket (recomendado) -DB_HOST=/cloudsql/PROJECT_ID:REGION:INSTANCE_NAME - -# Opção B: TCP -DB_HOST=127.0.0.1 -DB_PORT=5432 -``` - -## 4. Inicie o Proxy - -```bash -./cloud_sql_proxy -instances=PROJECT_ID:REGION:INSTANCE_NAME=tcp:5432 \ - -credential_file=/path/to/service-account-key.json -``` - -## 5. No Cloud Run - -A variável DATABASE_URL deve ser: - -``` -postgresql://user:password@/cloudsql/PROJECT_ID:REGION:INSTANCE_NAME/database -``` - -O Cloud Run injeta automaticamente a credencial da service account do projeto. - -## Referência - -- [Cloud SQL Proxy Docs](https://cloud.google.com/sql/docs/postgres/cloud-sql-proxy) -- [Cloud SQL Python Connector](https://github.com/GoogleCloudPlatform/cloud-sql-python-connector) diff --git a/GUIA_COMPLETO_CONFIGURE_E_DEPLOY.md b/GUIA_COMPLETO_CONFIGURE_E_DEPLOY.md deleted file mode 100644 index ea89ff0..0000000 --- a/GUIA_COMPLETO_CONFIGURE_E_DEPLOY.md +++ /dev/null @@ -1,765 +0,0 @@ -# 🚀 Guia Completo: Configure e Faça Deploy do Orquestrador - -**Tempo total: ~30 minutos** - -Este guia leva você desde a configuração no Google Cloud Console até o deploy da aplicação online. - ---- - -## 📋 Índice - -1. [Pré-requisitos](#pré-requisitos) -2. [FASE 1: Google Cloud Console](#fase-1-google-cloud-console) -3. [FASE 2: Configurar Ambiente Local](#fase-2-configurar-ambiente-local) -4. [FASE 3: Testar Localmente](#fase-3-testar-localmente-opcional) -5. [FASE 4: Deploy no Cloud Run](#fase-4-deploy-no-cloud-run) -6. [FASE 5: Verificar e Testar](#fase-5-verificar-e-testar) -7. [Troubleshooting](#troubleshooting) - ---- - -## ✅ Pré-requisitos - -Antes de começar, você já deve ter: - -- [ ] Google Cloud SDK instalado no seu PC - - Windows: https://cloud.google.com/sdk/docs/install-windows - - Verificar: Abra terminal e digite `gcloud --version` - -- [ ] Acesso a um projeto GCP fornecido pela sua empresa -- [ ] Docker instalado (para testar localmente - opcional) - - Download: https://www.docker.com/products/docker-desktop - -- [ ] Git instalado no seu PC -- [ ] Python 3.11+ instalado - -**Se não tiver algum, instale antes de continuar!** - ---- - -# FASE 1: Google Cloud Console - -**⏱️ Tempo: ~10 minutos** - -Você vai configurar todos os recursos no Google Cloud Console. Siga cada passo na ordem. - ---- - -## PASSO 1: Identificar Seu Projeto - -1. Acesse: https://console.cloud.google.com/ -2. No topo esquerdo, clique no **seletor de projeto** -3. Selecione o projeto fornecido pela sua empresa -4. **Copie e anote o Project ID** que aparece no topo - ``` - Seu Project ID: _________________________________ - ``` - ---- - -## PASSO 2: Ativar APIs Necessárias - -**Local:** Menu ☰ → "APIs e Serviços" → "APIs e serviços ativados" - -Você vai ativar 6 APIs. Para cada uma: - -1. Clique **"Ativar APIs e Serviços"** (botão azul no topo) -2. Digite o nome da API na caixa de busca -3. Clique na API -4. Clique **"Ativar"** -5. Aguarde ~1-2 minutos -6. Volte e repita para a próxima - -### APIs para Ativar: - -- [ ] **Cloud Run API** -- [ ] **Cloud Build API** -- [ ] **Cloud SQL Admin API** -- [ ] **Artifact Registry API** ⚠️ (busque em inglês) -- [ ] **Vertex AI API** (para usar LLM/Gemini) -- [ ] **Compute Engine API** - -**✅ Confirmação:** Você deve ver todas as 6 APIs listadas em "APIs e serviços ativados" - ---- - -## PASSO 3: Criar Cloud SQL (Banco de Dados PostgreSQL) - -Seu banco de dados onde a aplicação vai armazenar dados. - -### 3.1 - Acessar Cloud SQL - -Menu ☰ → **"SQL"** (dentro de "Bancos de Dados") - -### 3.2 - Criar Nova Instância - -1. Clique **"Criar instância"** -2. Selecione **"PostgreSQL"** - -### 3.3 - Configurar Instância - -Preencha com os seguintes valores: - -- **ID da instância**: `orquestrador-db` -- **Senha da instância**: Escolha uma senha **SEGURA** (ex: `Abc@123xyz!`) - - ⚠️ **Copie e guarde em local seguro!** - - Senha raiz: `_________________________________` - -- **Versão do PostgreSQL**: `16` (ou `15`) -- **Região**: `us-central1` (mesmo de Cloud Run depois) -- **Disponibilidade zonal**: `Zona única` (está ok para começar) - -### 3.4 - Configurar Conectividade - -Na seção **"Conectividade"**: - -1. Clique para expandir **"Conectividade"** -2. Marque ✓ **"IP público"** -3. Na seção **"Conexões autorizadas de redes"**, clique **"Criar rede"** - - Nome: `cloudsql-network` (ou deixe padrão) - - Clique **"Criar e voltar"** - -⚠️ **Importante:** Isso permite que Cloud Run se conecte ao banco de dados. - -### 3.5 - Criar Instância - -1. Clique **"Criar"** (botão azul no final) -2. Aguarde **5-10 minutos** (status mudará de "criando..." para verde ✓) - ---- - -## PASSO 4: Configurar Cloud SQL - Usuários e Banco de Dados - -Quando a instância estiver **verde/pronta**: - -### 4.1 - Obter Dados de Conexão - -1. Clique no nome `orquestrador-db` -2. Copie o **Nome da conexão** (aparece parte superior): - - Formato: `seu-projeto-id:us-central1:orquestrador-db` - - Copie: `_________________________________` - -3. Na aba **"Visão geral"**, encontre **"IP público"** na seção **"Conectividade"** - - Copie: `_________________________________` - -### 4.2 - Criar Usuário do Banco - -Na aba **"Usuários e bancos de dados"**: - -1. Clique **"Criar usuário"** -2. Preencha: - - **Nome do usuário**: `orquestrador` - - **Senha**: Escolha uma senha (ex: `Orm@2026!`) - - ⚠️ **Copie e guarde!** - - Senha do usuário orquestrador: `_________________________________` - -3. Clique **"Criar"** - -### 4.3 - Criar Banco de Dados - -Na aba **"Usuários e bancos de dados"**, clique em **"Bancos de dados"**: - -1. Clique **"Criar banco de dados"** -2. Preencha: - - **Nome do banco de dados**: `orquestrador_db` - - **Conjunto de caracteres**: `utf8mb4` -3. Clique **"Criar"** - ---- - -## PASSO 5: Criar Conta de Serviço (Service Account) - -Isso permite que Cloud Run se autentique no GCP. - -### 5.1 - Ir para Credenciais - -Menu ☰ → **"APIs e Serviços"** → **"Credenciais"** - -### 5.2 - Criar Conta de Serviço - -1. Clique **"Criar credenciais"** → **"Conta de serviço"** -2. Preencha: - - **Nome da conta de serviço**: `orquestrador-app` - - **ID da conta de serviço**: `orquestrador-app` (preenchido automaticamente) -3. Clique **"Criar e continuar"** - -### 5.3 - Atribuir Permissões - -Na tela de permissões: - -1. Clique **"Selecionar uma função"** -2. Procure e selecione cada uma das funções abaixo. **Adicione todas**: - - `Cliente do Cloud SQL` - - `Desenvolvedor do Cloud Run` - - `Gravador do Registro de Artefatos` - -3. Clique **"Continuar"** -4. Clique **"Concluído"** - -### 5.4 - Gerar Chave JSON - -1. Volte para **"Credenciais"** -2. Clique na conta de serviço `orquestrador-app` (em "Contas de serviço") -3. Vá para a aba **"Chaves"** -4. Clique **"Adicionar chave"** → **"Criar nova chave"** -5. Selecione **"JSON"** -6. Clique **"Criar"** - -⚠️ **Um arquivo JSON será baixado automaticamente!** - -- Salve em: `D:\vitor\Pessoal\PJ\Orquestrador\service-account-key.json` -- **Não compartilhe este arquivo com ninguém!** - ---- - -## PASSO 6: Criar Registro de Artefatos (Container Registry) - -Repository para armazenar suas imagens Docker. - -### 6.1 - Acessar Registro - -Menu ☰ → **"Registro de Artefatos"** → **"Repositórios"** - -### 6.2 - Criar Repositório - -1. Clique **"Criar repositório"** -2. Preencha: - - **Nome**: `orquestrador` - - **Formato**: `Docker` - - **Localização**: `us-central1` (mesmo do Cloud SQL) -3. Clique **"Criar"** - ---- - -## ✅ Checklist - Fase 1 Concluída - -Você deve ter anotado: - -- [ ] Project ID: `_________________________________` -- [ ] Cloud SQL Connection Name: `_________________________________` -- [ ] Cloud SQL Public IP: `_________________________________` -- [ ] Cloud SQL User: `orquestrador` -- [ ] Cloud SQL Password: `_________________________________` -- [ ] Cloud SQL Root Password: `_________________________________` -- [ ] Cloud SQL Database: `orquestrador_db` -- [ ] Service Account JSON file baixado e salvo -- [ ] 6 APIs ativadas -- [ ] Registro de Artefatos criado - -**Próximo: Fase 2 - Configurar Ambiente Local** - ---- - -# FASE 2: Configurar Ambiente Local - -**⏱️ Tempo: ~5 minutos** - -Agora você vai configurar seu PC para comunicar com o GCP. - ---- - -## PASSO 1: Autenticar com Google Cloud SDK - -Abra **PowerShell** e execute: - -```powershell -# Fazer login no Google Cloud -gcloud auth login - -# Definir projeto padrão -gcloud config set project SEU-PROJECT-ID - -# Exemplo: -gcloud config set project orquestrador-mvp-12345 -``` - -Siga as instruções no navegador que abrir. - ---- - -## PASSO 2: Configurar Autenticação de Conta de Serviço - -Ainda no **PowerShell**: - -```powershell -# Definir variável de ambiente para usar a conta de serviço -$env:GOOGLE_APPLICATION_CREDENTIALS = "D:\vitor\Pessoal\PJ\Orquestrador\service-account-key.json" - -# Verificar que funcionou -gcloud auth list -``` - ---- - -## PASSO 3: Criar Arquivo `.env` - -Este arquivo contém suas credenciais e configurações. - -### 3.1 - Criar o Arquivo - -Na raiz do projeto (`D:\vitor\Pessoal\PJ\Orquestrador\`), crie um arquivo chamado `.env` com: - -```env -# ============================================ -# CONFIGURAÇÕES DO GOOGLE CLOUD -# ============================================ - -PROJECT_ID=SEU-PROJECT-ID -GCP_REGION=us-central1 - -# ============================================ -# CONFIGURAÇÕES DO BANCO DE DADOS -# ============================================ - -# URL de conexão direta (para testes locais) -DATABASE_URL=postgresql://orquestrador:SUA_SENHA@SEU_IP_PUBLICO:5432/orquestrador_db - -# Nome da conexão Cloud SQL (para Cloud Run) -CLOUD_SQL_CONNECTION_NAME=seu-projeto:us-central1:orquestrador-db - -# ============================================ -# CONFIGURAÇÕES DE API -# ============================================ - -# Se usar Generative AI (Gemini) -# GOOGLE_API_KEY=sua-chave-api-aqui - -# Se usar Mockaroo (dados fictícios) -# MOCKAROO_API_KEY=sua-chave-mockaroo-aqui - -# ============================================ -# OUTRAS CONFIGURAÇÕES -# ============================================ - -ENVIRONMENT=development -DEBUG=true -``` - -### 3.2 - Preencher com Seus Dados - -Substitua os valores acima com: - -- `SEU-PROJECT-ID` → seu Project ID do GCP -- `SUA_SENHA` → senha do usuário `orquestrador` no Cloud SQL -- `SEU_IP_PUBLICO` → IP público do Cloud SQL - -**Exemplo completo:** - -```env -PROJECT_ID=orquestrador-mvp-12345 -GCP_REGION=us-central1 -DATABASE_URL=postgresql://orquestrador:Orm@2026!@35.192.120.50:5432/orquestrador_db -CLOUD_SQL_CONNECTION_NAME=orquestrador-mvp-12345:us-central1:orquestrador-db -ENVIRONMENT=development -DEBUG=true -``` - -⚠️ **IMPORTANTE:** Nunca compartilhe este arquivo `.env`! Ele contém suas senhas! - ---- - -## PASSO 4: Instalar Dependências Python - -Abra **PowerShell** na pasta do projeto: - -```powershell -# Ativar ambiente virtual (já deve estar ativo) -# & .\venv\Scripts\Activate.ps1 - -# Instalar dependências -pip install -r requirements.txt - -# Verificar que funcionou -pip list | Select-String "fastapi|psycopg2" -``` - ---- - -## ✅ Checklist - Fase 2 Concluída - -- [ ] Autenticado no Google Cloud (`gcloud auth list` mostra sua conta) -- [ ] Project ID configurado como padrão -- [ ] Arquivo `.env` criado e preenchido -- [ ] `GOOGLE_APPLICATION_CREDENTIALS` configurado -- [ ] Dependências instaladas - -**Próximo: Fase 3 - Testar Localmente (opcional)** - ---- - -# FASE 3: Testar Localmente (Opcional) - -**⏱️ Tempo: ~5 minutos** - -Teste a aplicação no seu PC antes de fazer deploy. - ---- - -## PASSO 1: Testar Conexão com Banco de Dados - -```powershell -# Instalar psql (client PostgreSQL) se não tiver -# Windows: https://www.postgresql.org/download/windows/ - -# Testar conexão -psql -h SEU_IP_PUBLICO -U orquestrador -d orquestrador_db -c "SELECT 1" - -# Exemplo: -psql -h 35.192.120.50 -U orquestrador -d orquestrador_db -c "SELECT 1" -``` - -Se aparecer `1`, conectou com sucesso! ✅ - ---- - -## PASSO 2: Rodar a Aplicação Localmente - -```powershell -# Ir para a pasta do projeto -cd D:\vitor\Pessoal\PJ\Orquestrador - -# Rodar a aplicação FastAPI -python -m uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 -``` - -Seu terminal mostrará: - -``` -INFO: Uvicorn running on http://127.0.0.1:8000 -``` - -Deixe rodar! - ---- - -## PASSO 3: Testar Endpoints - -Abra outro **PowerShell** (enquanto a aplicação está rodando): - -```powershell -# Testar endpoint de saúde -curl -X GET "http://localhost:8000/docs" - -# Ou abra no navegador: http://localhost:8000/docs -``` - -Você verá a **Swagger UI** (interface visual da API). - ---- - -## PASSO 4: Testar Chat Endpoint - -```powershell -# Fazer uma requisição POST -curl -X POST "http://localhost:8000/chat" ` - -H "Content-Type: application/json" ` - -d @'{ - "message": "Quero um carro até 50000 reais", - "user_id": "test" - }' -``` - -Se receber resposta → Aplicação está funcionando! ✅ - ---- - -## PASSO 5: Parar a Aplicação - -No PowerShell onde a aplicação está rodando: - -```powershell -# Pressione: Ctrl + C -``` - ---- - -## ✅ Checklist - Fase 3 Concluída - -- [ ] Conectou ao banco de dados com sucesso -- [ ] Aplicação rodou localmente -- [ ] Swagger UI acessível em http://localhost:8000/docs -- [ ] Endpoint de chat respondeu - -**Próximo: Fase 4 - Deploy no Cloud Run** - ---- - -# FASE 4: Deploy no Cloud Run - -**⏱️ Tempo: ~10 minutos** - -Colocar sua aplicação online no Google Cloud! - ---- - -## PASSO 1: Usar o Script de Deploy - -Na raiz do projeto, existe um script `deploy.sh` que faz tudo automaticamente. - -### Para Windows (PowerShell): - -```powershell -# Ir para a pasta do projeto -cd D:\vitor\Pessoal\PJ\Orquestrador - -# Executar deploy -bash deploy.sh SEU-PROJECT-ID us-central1 - -# Exemplo: -bash deploy.sh orquestrador-mvp-12345 us-central1 -``` - -### O que este script faz: - -1. Faz build da imagem Docker -2. Envia a imagem para o Registro de Artefatos -3. Deploy automático no Cloud Run -4. Configura variáveis de ambiente -5. Libera acesso público - -**Aguarde ~5-10 minutos** enquanto o script roda. - ---- - -## PASSO 2: Monitorar o Deploy - -Você verá logs na tela mostrando o progresso: - -``` -Building Docker image... -Building image gcr.io/seu-projeto/orquestrador:latest -... -Pushing image to Container Registry... -... -Deploying to Cloud Run... -... -Deployment completed! -``` - ---- - -## PASSO 3: Obter URL de Acesso - -Quando o deploy terminar, execute: - -```powershell -# Obter URL do Cloud Run -gcloud run services describe orquestrador ` - --region=us-central1 ` - --format='value(status.url)' -``` - -Você verá algo como: - -``` -https://orquestrador-xxxxx.a.run.app -``` - -**Copie esta URL!** Você usará para acessar a aplicação. - ---- - -## ✅ Checklist - Fase 4 Concluída - -- [ ] Deploy script executado sem erros -- [ ] Imagem Docker criada -- [ ] Imagem enviada para Registro de Artefatos -- [ ] Serviço Cloud Run criado -- [ ] URL de acesso obtida -- [ ] URL de acesso: `_________________________________` - -**Próximo: Fase 5 - Verificar e Testar** - ---- - -# FASE 5: Verificar e Testar - -**⏱️ Tempo: ~3 minutos** - -Validar que tudo está funcionando online. - ---- - -## PASSO 1: Testar Swagger UI Online - -No navegador, acesse: - -``` -https://SUA-URL-DO-CLOUD-RUN/docs -``` - -Exemplo: - -``` -https://orquestrador-xxxxx.a.run.app/docs -``` - -Você deve ver a interface Swagger UI com todos os endpoints. - ---- - -## PASSO 2: Testar Chat Endpoint - -Na Swagger UI: - -1. Clique em **POST /chat** -2. Clique **"Try it out"** -3. No campo **"Request body"**, preencha: - ```json - { - "message": "Quero um carro até 50000 reais", - "user_id": "test" - } - ``` -4. Clique **"Execute"** - -Você deve receber uma resposta do LLM integrado! ✅ - ---- - -## PASSO 3: Testar via Curl (Terminal) - -```powershell -# Substituir pela sua URL -$URL = "https://orquestrador-xxxxx.a.run.app" - -curl -X POST "$URL/chat" ` - -H "Content-Type: application/json" ` - -d @'{ - "message": "Quero um carro até 50000 reais", - "user_id": "test" - }' -``` - ---- - -## PASSO 4: Ver Logs - -Para debugar se algo não funcionar: - -```powershell -# Ver últimos 50 logs -gcloud run logs read orquestrador --region=us-central1 --limit=50 - -# Ver logs em tempo real (streaming) -gcloud run logs read orquestrador --region=us-central1 --follow -``` - ---- - -## ✅ Checklist - Fase 5 Concluída - -- [ ] Swagger UI acessível online -- [ ] Chat endpoint respondeu -- [ ] Curl funcionou -- [ ] Aplicação está ONLINE! 🎉 - ---- - -## 🎉 Sucesso! - -Sua aplicação está **online e funcionando**! - -### Resumo do que você fez: - -1. ✅ Ativou 6 APIs no Google Cloud -2. ✅ Criou Cloud SQL PostgreSQL com usuário e banco -3. ✅ Criou Service Account com permissões -4. ✅ Criou Registro de Artefatos -5. ✅ Configurou arquivo `.env` localmente -6. ✅ Testou localmente -7. ✅ Fez deploy no Cloud Run -8. ✅ Validou que funciona online - ---- - -## 📋 Referência Rápida para Próximas Vezes - -### Fazer novo deploy após mudanças: - -```powershell -cd D:\vitor\Pessoal\PJ\Orquestrador -bash deploy.sh SEU-PROJECT-ID us-central1 -``` - -### Ver status do serviço: - -```powershell -gcloud run services describe orquestrador --region=us-central1 -``` - -### Ver logs: - -```powershell -gcloud run logs read orquestrador --region=us-central1 --limit=50 --follow -``` - -### Parar o serviço: - -```powershell -gcloud run services delete orquestrador --region=us-central1 -``` - ---- - -# Troubleshooting - -## Problema: "Erro ao conectar ao banco de dados" - -**Solução:** - -1. Verifique se IP público está correto: `gcloud sql instances describe orquestrador-db --format="value(ipAddresses[0].ipAddress)"` -2. Verifique arquivo `.env` - DATABASE_URL está correto? -3. Verifique se usuário `orquestrador` foi criado -4. Teste: `psql -h IP -U orquestrador -d orquestrador_db -c "SELECT 1"` - -## Problema: "Cloud Run não consegue conectar ao banco" - -**Solução:** - -1. Verifique se Cloud SQL Connection Name está correto no `.env` -2. Verifique se a rede foi criada -3. Cloud Run precisa estar na mesma região do Cloud SQL - -## Problema: "Imagem Docker não está sendo enviada" - -**Solução:** - -1. Verifique se Docker está instalado: `docker --version` -2. Verifique se Registro de Artefatos foi criado no console -3. Verifique autenticação: `gcloud auth login` - -## Problema: "Erro ao ativar API" - -**Solução:** - -1. Confirme que você tem permissão no projeto (pedir ao admin) -2. Espere 1-2 minutos e tente novamente -3. Ao comando: `gcloud services enable cloudrun.googleapis.com` - -## Problema: "404 - Endpoint não encontrado" - -**Solução:** - -1. Confirme a URL está correta: `gcloud run services describe orquestrador --region=us-central1 --format="value(status.url)"` -2. Verifique se o deploy completou: `gcloud run services describe orquestrador --region=us-central1` -3. Aguarde ~1 minuto após o deploy terminar - ---- - -## 📞 Próximos Passos - -- **Integrar com Banco de Dados Real**: Configurar seeders de dados -- **CI/CD Automático**: GitHub Actions para deploy automático -- **Monitoramento**: Configurar alertas e dashboards -- **Escalabilidade**: Ajustar autoscaling de Cloud Run - ---- - -**Dúvidas? Refer-se a:** - -- [DEPLOY_5_PASSOS.md](DEPLOY_5_PASSOS.md) - Resumo rápido -- [TROUBLESHOOTING.md](TROUBLESHOOTING.md) - Problemas específicos -- [PROJECT_STRUCTURE.md](PROJECT_STRUCTURE.md) - Estrutura do projeto - -**Bom deployment! 🚀** diff --git a/README.md b/README.md index 726e548..f52aeae 100644 --- a/README.md +++ b/README.md @@ -38,9 +38,7 @@ Retorna: "Encontrei 5 veículos sedans disponíveis até R$ 50.000..." | **IA/LLM** | Google Vertex AI | Plataforma de IA empresarial com Gemini 1.5 Pro | | **Banco de Dados (Tools)** | PostgreSQL | Banco relacional para metadados de ferramentas | | **Banco Fictício (Mock)** | MySQL | Dados de negócio simulados usados pelos handlers | -| **Containerização** | Docker | Isolamento e deploy consistente | -| **Orquestração** | Google Cloud Build | Pipeline automatizado de build e deploy | -| **Computação** | Google Cloud Run | Plataforma serverless escalável | +| **Containerização** | Docker | Isolamento e execução consistente | | **Runtime** | Python 3.11+ | Linguagem principal da aplicação | --- @@ -79,9 +77,7 @@ Orquestrador/ │ └── integrations/ # Integrações externas │ ├── Dockerfile # Imagem Docker da aplicação -├── cloudbuild.yaml # Configuração CI/CD (Cloud Build) ├── docker-compose.yml # Stack local com PostgreSQL -├── deploy.sh # Script de deploy no Cloud Run ├── requirements.txt # Dependências Python ├── .env.example # Exemplo de configuração └── README.md # Esta documentação @@ -121,12 +117,6 @@ Banco de dados relacional de código aberto com suporte a JSON, transações ACI Containerização da aplicação garantindo consistência entre ambientes de desenvolvimento, teste e produção. -### Google Cloud Build + Cloud Run - -Pipeline CI/CD totalmente gerenciado que faz build da imagem, realiza testes e faz deploy automático no Cloud Run (plataforma serverless que escala automaticamente conforme a demanda). - ---- - ## 📊 Fluxograma de Funcionamento ``` @@ -180,11 +170,10 @@ Pipeline CI/CD totalmente gerenciado que faz build da imagem, realiza testes e f O sistema foi construído com foco em boas práticas de segurança: - **Variáveis sensíveis**: Armazenadas em `.env` e variáveis de ambiente, nunca commitadas -- **Autenticação Google Cloud**: Utiliza credenciais de serviço (service account) com roles específicas +- **Autenticação do Vertex AI**: Utilize credenciais com permissão para uso do Vertex AI - **Isolamento de banco de dados**: Credenciais separadas por ambiente - **Validação de dados**: Pydantic garante tipagem e validação em todos os endpoints - **CORS**: Configurável para ambientes específicos -- **Cloud Run**: Ambiente gerenciado com certificados SSL automáticos --- @@ -192,8 +181,7 @@ O sistema foi construído com foco em boas práticas de segurança: Para mais detalhes sobre instalação, configuração e uso, consulte os documentos: -- [GUIA_COMPLETO_CONFIGURE_E_DEPLOY.md](GUIA_COMPLETO_CONFIGURE_E_DEPLOY.md) - Setup completo do Google Cloud -- [CLOUD_SQL_PROXY.md](CLOUD_SQL_PROXY.md) - Configuração de Cloud SQL Proxy +- [DEPLOY_SERVIDOR.md](DEPLOY_SERVIDOR.md) - Deploy em servidor Linux (systemd + Nginx) - [TEST_CASES.md](TEST_CASES.md) - Casos de teste e exemplos --- @@ -227,16 +215,6 @@ Logs de todas as chamadas para fins de auditoria e análise. --- -## 📈 Monitoramento na Produção - -Quando implantado no Google Cloud Run, o sistema aproveita: - -- **Cloud Logging**: Logs centralizados e estruturados -- **Cloud Monitoring**: Métricas de CPU, memória, latência e requisições -- **Cloud Trace**: Rastreamento distribuído para análise de performance - ---- - ## 🔄 Próximas Melhorias O projeto está em evolução contínua com planos para: diff --git a/app.yaml b/app.yaml deleted file mode 100644 index 9580259..0000000 --- a/app.yaml +++ /dev/null @@ -1,13 +0,0 @@ -runtime: python311 -entrypoint: uvicorn app.main:app --host 0.0.0.0 --port 8080 - -env: standard -instance_class: F2 - -automatic_scaling: - min_instances: 1 - max_instances: 10 - -env_variables: - GOOGLE_LOCATION: "us-central1" - USE_MOCKAROO_WRITES: "false" diff --git a/app/core/settings.py b/app/core/settings.py index a9fea0c..df9173b 100644 --- a/app/core/settings.py +++ b/app/core/settings.py @@ -31,7 +31,7 @@ class Settings(BaseSettings): # Cloud SQL (legacy Postgres var kept only for backward compatibility in deploy scripts) cloud_sql_connection_name: str | None = None - # Cloud Run networking (for deploy script / documentation) + # Parametros de rede legados (mantidos por compatibilidade) run_vpc_connector: str | None = None run_vpc_egress: str = "private-ranges-only" diff --git a/cloudbuild.yaml b/cloudbuild.yaml deleted file mode 100644 index df1dfbb..0000000 --- a/cloudbuild.yaml +++ /dev/null @@ -1,44 +0,0 @@ -# Cloud Build Configuration para Artifact Registry + Cloud Run -# Substitutions: _REGION, _REPO_NAME, _IMAGE_NAME (passados pelo deploy.sh) - -steps: - # Step 1: Build Docker image para Artifact Registry - - name: "gcr.io/cloud-builders/docker" - args: - - "build" - - "-t" - - "${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPO_NAME}/${_IMAGE_NAME}:latest" - - "-t" - - "${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPO_NAME}/${_IMAGE_NAME}:$BUILD_ID" - - "." - - # Step 2: Push para Artifact Registry - - name: "gcr.io/cloud-builders/docker" - args: - - "push" - - "${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPO_NAME}/${_IMAGE_NAME}:$BUILD_ID" - - # Step 3: Mostrar URL da imagem (opcional, útil para debug) - - name: "gcr.io/cloud-builders/gcloud" - entrypoint: "bash" - args: - - "-c" - - "echo 'Imagem pronta: ${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPO_NAME}/${_IMAGE_NAME}:$BUILD_ID'" - -# Configuração de imagens para armazenar no Artifact Registry -images: - - "${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPO_NAME}/${_IMAGE_NAME}:latest" - - "${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPO_NAME}/${_IMAGE_NAME}:$BUILD_ID" - -# Configurações de build -options: - machineType: "N1_HIGHCPU_8" - logging: CLOUD_LOGGING_ONLY - -timeout: "1800s" - -# Substitutions padrão (podem ser sobrescritos pelo deploy.sh) -substitutions: - _REGION: "us-central1" - _REPO_NAME: "orquestrador" - _IMAGE_NAME: "orquestrador" diff --git a/deploy.sh b/deploy.sh deleted file mode 100644 index 0afc960..0000000 --- a/deploy.sh +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/bash - -# Deploy script for Google Cloud Run + Artifact Registry -# Usage: ./deploy.sh - -set -euo pipefail - -ENV_FILE="${ENV_FILE:-.env.prod}" -if [ ! -f "${ENV_FILE}" ] && [ -f ".env" ]; then - ENV_FILE=".env" -fi -if [ ! -f "${ENV_FILE}" ]; then - echo "ERROR: env file not found. Expected ${ENV_FILE} (or .env)." - exit 1 -fi - -get_env_value() { - local key="$1" - grep -E "^${key}=" "${ENV_FILE}" | tail -n 1 | cut -d'=' -f2- | tr -d '\r' -} - -PROJECT_ID=$(gcloud config get-value project) -REGION="us-central1" -SERVICE_NAME="orquestrador" -REPO_NAME="orquestrador" -IMAGE_NAME="${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/${SERVICE_NAME}" - -if [ -z "${PROJECT_ID}" ]; then - echo "ERROR: gcloud project is not configured." - echo "Run: gcloud config set project " - exit 1 -fi - -echo "Starting deploy to Cloud Run" -echo "Project: ${PROJECT_ID}" -echo "Region: ${REGION}" -echo "Env file: ${ENV_FILE}" - -echo "1) Checking auth..." -ACTIVE_ACCOUNT=$(gcloud auth list --filter=status:ACTIVE --format="value(account)") -if [ -z "${ACTIVE_ACCOUNT}" ]; then - echo "ERROR: no active gcloud account. Run: gcloud auth login" - exit 1 -fi -echo "Authenticated as: ${ACTIVE_ACCOUNT}" - -echo "2) Enabling required APIs..." -gcloud services enable \ - run.googleapis.com \ - cloudbuild.googleapis.com \ - artifactregistry.googleapis.com \ - aiplatform.googleapis.com \ - sqladmin.googleapis.com \ - --quiet - -echo "3) Building image with Cloud Build..." -gcloud builds submit \ - --config=cloudbuild.yaml \ - --substitutions=_REGION="${REGION}",_REPO_NAME="${REPO_NAME}",_IMAGE_NAME="${SERVICE_NAME}" - -echo "4) Deploying to Cloud Run..." - -ENV_VARS="" -while IFS= read -r line || [[ -n "$line" ]]; do - [[ "$line" =~ ^[[:space:]]*# ]] && continue - [[ -z "${line// }" ]] && continue - if [[ "$line" == *"="* ]]; then - clean_line=$(echo "$line" | tr -d '\r') - ENV_VARS="${ENV_VARS}${clean_line}," - fi -done < "${ENV_FILE}" -ENV_VARS="${ENV_VARS%,}" - -# Prefer new key (MySQL tools), fallback to legacy key -CLOUD_SQL_CONN=$(get_env_value "DB_CLOUD_SQL_CONNECTION_NAME") -if [ -z "${CLOUD_SQL_CONN}" ]; then - CLOUD_SQL_CONN=$(get_env_value "CLOUD_SQL_CONNECTION_NAME") -fi -RUN_VPC_CONN=$(get_env_value "RUN_VPC_CONNECTOR") -RUN_VPC_EGRESS=$(get_env_value "RUN_VPC_EGRESS") - -DEPLOY_ARGS=( - --image="${IMAGE_NAME}:latest" - --region="${REGION}" - --platform=managed - --memory=512Mi - --cpu=1 - --timeout=3600 - --max-instances=10 - --allow-unauthenticated -) - -if [ -n "${ENV_VARS}" ]; then - DEPLOY_ARGS+=(--set-env-vars="${ENV_VARS}") -else - echo "WARN: no env vars found in ${ENV_FILE}" -fi - -if [ -n "${CLOUD_SQL_CONN}" ]; then - DEPLOY_ARGS+=(--add-cloudsql-instances="${CLOUD_SQL_CONN}") - echo "Cloud SQL socket enabled: ${CLOUD_SQL_CONN}" -fi - -if [ -n "${RUN_VPC_CONN}" ]; then - DEPLOY_ARGS+=(--vpc-connector="${RUN_VPC_CONN}") - DEPLOY_ARGS+=(--vpc-egress="${RUN_VPC_EGRESS:-private-ranges-only}") - echo "VPC connector enabled: ${RUN_VPC_CONN}" -fi - -gcloud run deploy "${SERVICE_NAME}" "${DEPLOY_ARGS[@]}" - -echo "Deploy finished." -echo "Service URL:" -gcloud run services describe "${SERVICE_NAME}" --region="${REGION}" --format='value(status.url)' - diff --git a/setup-database.sh b/setup-database.sh deleted file mode 100644 index 46839eb..0000000 --- a/setup-database.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash - -# Script para setup inicial no Google Cloud SQL -# Uso: ./setup-database.sh - -set -e - -PROJECT_ID=${1:-seu-projeto-id} -INSTANCE_NAME=${2:-orquestrador-db} -REGION=${3:-us-central1} -DB_NAME="orquestrador" -DB_USER="postgres" - -echo "📊 Criando instância Cloud SQL PostgreSQL" -echo "📦 Projeto: $PROJECT_ID" -echo "🏢 Instância: $INSTANCE_NAME" -echo "🌍 Região: $REGION" - -# Habilitar SQL Admin API -echo "📡 Habilitando Cloud SQL Admin API..." -gcloud services enable sqladmin.googleapis.com - -# Criar instância PostgreSQL -echo "🔨 Criando instância PostgreSQL..." -gcloud sql instances create $INSTANCE_NAME \ - --project=$PROJECT_ID \ - --database-version=POSTGRES_15 \ - --region=$REGION \ - --tier=db-f1-micro \ - --availability-type=ZONAL \ - --backup-start-time=03:00 \ - --enable-bin-log \ - --no-assign-ip - -# Criar banco de dados -echo "🗄️ Criando banco de dados..." -gcloud sql databases create $DB_NAME \ - --instance=$INSTANCE_NAME \ - --project=$PROJECT_ID - -# Criar usuário -echo "👤 Criando usuário de banco de dados..." -gcloud sql users create $DB_USER \ - --instance=$INSTANCE_NAME \ - --project=$PROJECT_ID - -echo "" -echo "✅ Setup do banco de dados concluído!" -echo "" -echo "📋 Configurações do Cloud SQL:" -echo "🏢 Instância: $INSTANCE_NAME" -echo "📦 Banco: $DB_NAME" -echo "👤 Usuário: $DB_USER" -echo "" -echo "próximos passos:" -echo "1. Defina a senha do usuário postgres no Cloud Console" -echo "2. Configure a connection string:" -echo " postgresql://$DB_USER:SENHA@/cloudsql/$PROJECT_ID:$REGION:$INSTANCE_NAME/$DB_NAME" - diff --git a/setup-gcp.sh b/setup-gcp.sh deleted file mode 100644 index 0e1e656..0000000 --- a/setup-gcp.sh +++ /dev/null @@ -1,245 +0,0 @@ -#!/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 "" -