diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..bd3dab6 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,22 @@ +__pycache__/ +*.pyc +*.pyo +*.egg-info/ +dist/ +build/ +.env +.env.local +venv/ +.venv/ +env/ +.git/ +.gitignore +.github/ +.pytest_cache/ +.coverage +htmlcov/ +.DS_Store +*.log +.vscode/ +.idea/ + diff --git a/.gcloudignore b/.gcloudignore new file mode 100644 index 0000000..5ce3af4 --- /dev/null +++ b/.gcloudignore @@ -0,0 +1,19 @@ +.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 new file mode 100644 index 0000000..f901141 --- /dev/null +++ b/CLOUD_SQL_PROXY.md @@ -0,0 +1,56 @@ +# 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/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a76d0e4 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,44 @@ +# Build stage +FROM python:3.11-slim as builder + +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 + +WORKDIR /build + +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + libpq-dev \ + && rm -rf /var/lib/apt/lists/* + +COPY requirements.txt . +RUN pip install --user --no-cache-dir -r requirements.txt + +# Runtime stage +FROM python:3.11-slim + +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 +ENV PORT=8080 + +WORKDIR /app + +# Install runtime dependencies only +RUN apt-get update && apt-get install -y --no-install-recommends \ + libpq5 \ + && rm -rf /var/lib/apt/lists/* + +# Copy Python dependencies from builder +COPY --from=builder /root/.local /root/.local + +# Copy application code +COPY app /app/app + +ENV PATH=/root/.local/bin:$PATH + +EXPOSE 8080 + +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD python -c "import httpx; httpx.get('http://localhost:8080/docs', timeout=5)" || exit 1 + +CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"] diff --git a/GUIA_COMPLETO_CONFIGURE_E_DEPLOY.md b/GUIA_COMPLETO_CONFIGURE_E_DEPLOY.md new file mode 100644 index 0000000..ea89ff0 --- /dev/null +++ b/GUIA_COMPLETO_CONFIGURE_E_DEPLOY.md @@ -0,0 +1,765 @@ +# 🚀 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/app.yaml b/app.yaml new file mode 100644 index 0000000..9580259 --- /dev/null +++ b/app.yaml @@ -0,0 +1,13 @@ +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/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..7ebad16 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,45 @@ +version: "3.8" + +services: + postgres: + image: postgres:15-alpine + container_name: orquestrador_postgres + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: orquestrador + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 10s + timeout: 5s + retries: 5 + + app: + build: . + container_name: orquestrador_app + ports: + - "8000:8080" + environment: + GOOGLE_PROJECT_ID: ${GOOGLE_PROJECT_ID} + GOOGLE_LOCATION: ${GOOGLE_LOCATION:-us-central1} + DB_HOST: postgres + DB_PORT: 5432 + DB_USER: postgres + DB_PASSWORD: postgres + DB_NAME: orquestrador + MOCKAROO_API_KEY: ${MOCKAROO_API_KEY} + MOCKAROO_BASE_URL: ${MOCKAROO_BASE_URL:-https://my.api.mockaroo.com} + USE_MOCKAROO_WRITES: ${USE_MOCKAROO_WRITES:-false} + depends_on: + postgres: + condition: service_healthy + volumes: + - .:/app + command: uvicorn app.main:app --host 0.0.0.0 --port 8080 --reload + +volumes: + postgres_data: