✨ feat: Adicionando configuração de deploy, Docker e documentação
parent
6a28119dbf
commit
ce74c77ea2
@ -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/
|
||||||
|
|
||||||
@ -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/
|
||||||
|
|
||||||
@ -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)
|
||||||
@ -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"]
|
||||||
@ -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! 🚀**
|
||||||
@ -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"
|
||||||
@ -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:
|
||||||
Loading…
Reference in New Issue