Pular para conteúdo

Deploy e Infraestrutura

📋 Visão Geral

O Motor de Pricing é deployado como um container Docker na infraestrutura Google Cloud (Cloud Run / App Engine), utilizando Gunicorn como servidor WSGI.


🐳 Docker

Dockerfile

FROM python:3.11-slim AS base

ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1

WORKDIR /app

RUN apt-get update \
    && apt-get install -y --no-install-recommends build-essential \
    && rm -rf /var/lib/apt/lists/*

COPY requirements.txt ./
RUN pip install --upgrade pip \
    && pip install --no-cache-dir -r requirements.txt \
    && pip install --no-cache-dir gunicorn==23.0.0

COPY . ./

EXPOSE 8000

CMD ["gunicorn", "app:server", "--bind", "0.0.0.0:8000", \
     "--timeout", "300", "--workers", "2", "--threads", "4", \
     "--worker-class", "gthread"]

Detalhes da Configuração

Parâmetro Valor Justificativa
Imagem base python:3.11-slim Imagem leve, apenas o essencial
Servidor Gunicorn 23.0.0 Servidor WSGI de produção
Workers 2 Processos separados para lidar com requisições
Threads 4 Threads por worker (total: 8 threads)
Worker class gthread Thread-based para I/O concorrente
Timeout 300s (5 min) Timeout alto para operações BigQuery/Dataform
Porta 8000 Porta exposta para o serviço

PYTHONDONTWRITEBYTECODE=1

Evita criação de arquivos .pyc dentro do container, reduzindo tamanho da imagem.


☁️ Google Cloud

A aplicação detecta automaticamente o ambiente GCP via variáveis de ambiente:

if not (os.getenv('GAE_ENV') or os.getenv('CLOUD_RUN_SERVICE') or os.getenv('GOOGLE_CLOUD_PROJECT')):
    load_dotenv()  # Apenas em desenvolvimento local
Variável Detecta
GAE_ENV Google App Engine
CLOUD_RUN_SERVICE Cloud Run
GOOGLE_CLOUD_PROJECT Qualquer serviço GCP

Variáveis de Ambiente Necessárias

Variável Obrigatória Descrição
ENVIRONMENT Sim dev para desenvolvimento, outro valor para produção
GCP_PROJECT_ID Dev only ID do projeto GCP (produção usa default)
GCP_DATASET_ID Dev only Dataset BigQuery (produção usa gold_pricing)
BUCKET_NAME Sim Bucket GCS para armazenamento
GOOGLE_APPLICATION_CREDENTIALS Dev only Caminho para JSON de credenciais
SERVICE_ACCOUNT_EMAIL Referência Email da service account

Credenciais em Produção

Em produção (Cloud Run/GAE), as credenciais são gerenciadas automaticamente pela service account do serviço. O arquivo google_credentials.json é necessário apenas para desenvolvimento local.


⚙️ Ambientes

Desenvolvimento Local

# Configuração
ENVIRONMENT=dev

# Logging
logging: DEBUG level

# Servidor
python app.py  →  Dash dev server (porta 8000, debug=True)

Produção

# Configuração
ENVIRONMENT=prod (ou qualquer valor != "dev")

# Logging
logging: INFO level

# Servidor
gunicorn app:server --bind 0.0.0.0:8000

Diferenças por Ambiente

Aspecto Desenvolvimento Produção
Servidor Dash dev server Gunicorn
Debug Ativado (hot reload) Desativado
Logging DEBUG INFO
Credenciais Arquivo .env + google_credentials.json Service account automática
GCP Project Via GCP_PROJECT_ID driven-strength-374020
Dataset Via GCP_DATASET_ID gold_pricing

🔒 Segurança

Arquivos Sensíveis

Os seguintes arquivos não devem ser commitados (configurados no .gitignore):

  • .env — Variáveis de ambiente e secrets
  • google_credentials.json — Credenciais GCP
  • *.pyc e __pycache__/ — Bytecode Python

Templates Disponíveis

Arquivo Uso
.env-example Modelo para criar o .env local
google_credentials-example.json Modelo para o arquivo de credenciais

📊 Performance

Configuração do Gunicorn

Aspecto Valor Impacto
Workers × Threads 2 × 4 = 8 8 requisições simultâneas
Timeout 300s Suporta operações longas (Dataform pipelines)
Flask-Compress Ativado Compressão gzip nas respostas

Otimizações da Aplicação

Otimização Descrição
Pre-loading paralelo 18 tabelas carregadas em paralelo após login (8 threads)
Cache em memória dcc.Store(storage_type='memory') para dados frequentes
Filtros client-side Filtragem opera sobre cache, sem chamadas à API
ThreadPoolExecutor Fetches paralelos para BigQuery

Última atualização: Março 2026 | Versão 1.0