OmniLink API
Instalação

Variáveis de ambiente

O que cada variável faz em local e em produção.

A aplicação lê settings via ambiente (e .env quando presente).
x-api-key não é variável de ambiente — é header HTTP nas rotas /v1/*.

Tabela

NomeObrigatóriaDefaultLocalProduçãoO que faz
APP_NAMENãoOmniLink APIigualigualTítulo da app / OpenAPI
APP_ENVNãodevelopmentdevelopmentproductiondevelopment | staging | production. Em staging/production valida segredos
APP_DEBUGNãofalsefalsefalseDebug FastAPI — nunca true em produção exposta
API_KEY_HEADERNãox-api-keyx-api-keyx-api-keyNome lógico; a auth atual aceita somente x-api-key
ENCRYPTION_KEYSim em staging/productionvazio → default interno só em developmentvazio ok em devFernet 44 charsCriptografa o cofre (cookies/CSRF)
WEBHOOK_SIGNING_SECRETSim em staging/productiondefault de devvazio ok em dev≥ 16, ≠ change-meHMAC do webhook (X-Omnilink-Signature)
METRICS_TOKENSim em staging/production""opcional≥ 16Protege /metrics e /health/diagnostics
DATABASE_URLSim...@localhost:5432/omnilinkcompose usa @postgres:5432host do serviço SwarmSQLAlchemy/Alembic (psycopg v3)
REDIS_URLDeclaradaredis://localhost:6379/0redis://redis:6379/0serviço SwarmReservada; health/Celery não usam esta var
CELERY_BROKER_URLSim (worker + ready).../1redis://redis:6379/1serviço SwarmBroker Celery; /health/ready faz PING aqui
CELERY_RESULT_BACKENDSim (Celery).../2redis://redis:6379/2serviço SwarmBackend de resultados
DEFAULT_AFFILIATE_TAGNãovalor da imagemafiliadosLAB (recomendado)sua tagTag Amazon quando o body não envia tag
DATABASE_WAIT_ATTEMPTSNão10ex. 40Tentativas de conexão no startup da API
POSTGRES_DBSó no PostgresomnilinkomnilinkBanco inicial
POSTGRES_USERSó no PostgresomnilinkomnilinkDeve bater com DATABASE_URL
POSTGRES_PASSWORDSó no Postgresomnilinksenha forteDeve bater com DATABASE_URL

Na imagem também existem PYTHONDONTWRITEBYTECODE=1, PYTHONUNBUFFERED=1 e PLAYWRIGHT_BROWSERS_PATH=/ms-playwright.

Destaques

Tenant (x-api-key)

  • Obrigatório nas rotas /v1/*.
  • Multi-tenant por SHA-256 da chave (não há lista de chaves em env).
  • Credenciais de loja vão no cofre (POST /v1/accounts), criptografadas com ENCRYPTION_KEY.

METRICS_TOKEN

  • Obrigatório no startup se APP_ENV é production ou staging.
  • Em development, vazio = rotas de métricas abertas.
  • Uso: Authorization: Bearer ... ou header x-metrics-token.

Banco

  • Formato: postgresql+psycopg://USER:PASS@HOST:5432/DB
  • A API roda alembic upgrade head antes do Uvicorn.
  • No Docker, o host é o nome do serviço (postgres / postgres_omnilink), não localhost.

Redis / Celery

Um Redis, três DBs lógicos:

DBVariávelUso
/0REDIS_URLSem uso de negócio hoje
/1CELERY_BROKER_URLBroker + health ready
/2CELERY_RESULT_BACKENDResultados Celery

API e worker precisam das mesmas URLs de broker/backend.

Webhooks

  • Não é endpoint desta API: o worker faz POST de saída.
  • Segredo: WEBHOOK_SIGNING_SECRET
  • Header: X-Omnilink-Signature (HMAC-SHA256 do JSON canônico)
  • Até 3 tentativas, timeout 10 s
  • URL: webhook_url da conta ou webhook_override no body

Mais contexto: Tasks e webhooks.

Gerar valores de produção

python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
python3 -c "import secrets; print(secrets.token_urlsafe(32))"
python3 -c "import secrets; print(secrets.token_urlsafe(32))"
  1. ENCRYPTION_KEY
  2. WEBHOOK_SIGNING_SECRET
  3. METRICS_TOKEN

On this page