Sign inSign up

automacaodebaixocusto/omnilink-api

By automacaodebaixocusto

•Updated 26 days ago

Image
0

3.5K

automacaodebaixocusto/omnilink-api repository overview

Motor REST assíncrono para scraping de listagens com seletores CSS e geração de links de afiliado (Amazon, Mercado Livre), com cofre por tenant (x-api-key), filas Celery e Playwright/Chromium já incluídos na imagem.

Versão recomendada da imagem: automacaodebaixocusto/omnilink-api:latest (ajuste conforme sua organização no Hub.)


⁠O que esta imagem faz

  • Expõe uma API HTTP (FastAPI), tipicamente na porta 8000.
  • Processa trabalhos pesados (scraping com navegador headless + adaptadores por loja) em workers Celery, usando Redis como broker/backend.
  • Persiste dados em PostgreSQL (Alembic para migrações).
  • Opcionalmente chama webhooks HTTPS ao concluir tarefas (assinatura HMAC X-Omnilink-Signature).
  • Exporta métricas no formato Prometheus (/metrics) e oferece health check (/health).

Um único Dockerfile compõe runtime com deps do Playwright/Chromium: o mesmo artefato serve para rodar só a API (uvicorn) ou também o worker (celery), desde que passe o comando adequado ao subir o container/orquestração.


⁠Stack tecnica

CamadaTecnologia
APIPython 3.11, FastAPI, Uvicorn, Pydantic Settings
BancoPostgreSQL (driver psycopg v3, SQLAlchemy 2.x, Alembic)
FilaRedis + Celery 5
BrowserPlaywright + Chromium (instalados na imagem)
Segurança de dados sensíveisFernet (ENCRYPTION_KEY), hash SHA-256 da API key no backend
ObservabilidadeJSON logging, Prometheus client, middleware de latência/status

⁠Plataformas de negócio ({platform} nas rotas)

PlataformaCofre POST /v1/accountsPOST .../affiliate/.../generate-linkPOST .../fetch/.../list
amazonSimSimSim
mercadolivreSimSimSim
shopeeSim503 (standby até integração ativa)503 (idem)

Erros típicos: 401 sem x-api-key, 422 validação OpenAPI (ex.: mais de 25 URLs em afiliação), 404 recurso/task do tenant não encontrado, 503 Shopee nas rotas assíncronas citadas.


⁠Endpoints (resumo)

Públicos / observabilidade

  • GET /health — sinal vivo (sem autenticação).
  • GET /metrics — formato Prometheus; em produção costuma exigir METRICS_TOKEN (Authorization: Bearer ... ou x-metrics-token).
  • GET /health/diagnostics — snapshot de contagens por template de rota (mesmo esquema de token que métricas em ambientes onde está configurado).

Protegidos — header x-api-key

MétodoCaminho
POST/v1/accounts
PUT/v1/accounts/{platform}
GET/v1/accounts/{platform}/status
POST/v1/affiliate/{platform}/generate-link
POST/v1/fetch/{platform}/list
GET/v1/tasks/{task_id}/status

OpenAPI/Swagger em /docs (quando a API está no ar).

Modelo de trabalho: generate-link e fetch/list respondem 202 com task_id, task_ids (lista na ordem: afiliação até 25 URLs) e status_url; o cliente faz polling em GET /v1/tasks/... ou recebe webhook.


⁠Variáveis de ambiente essenciais

VariávelUso
APP_ENVdevelopment, staging ou production (validações de segurança mais estritas nos últimos).
APP_DEBUGfalse recomendado em produção (true aumenta superfície de erro).
DATABASE_URLEx.: postgresql+psycopg://usuario:senha@host:5432/omnilink
REDIS_URLRedis principal (ex.: redis://redis:6379/0)
CELERY_BROKER_URL / CELERY_RESULT_BACKENDFilas Celery em DBs índices distintos (ex.: /1, /2)
ENCRYPTION_KEYChave Fernet (44 caracteres URL-safe Base64). Obrigatória e própria em staging/production.
WEBHOOK_SIGNING_SECRETHMAC dos webhooks (mínimo 16 caracteres fora dev; não use change-me).
METRICS_TOKENMín. 16 caracteres em staging/production; opcional em dev mas, se definido, protege /metrics e /health/diagnostics.
DEFAULT_AFFILIATE_TAGTag de afiliado padrão (ex.: Amazon).
DATABASE_WAIT_ATTEMPTS(Opcional) Número de tentativas de SELECT 1 no lifespan antes do boot falhar útil atrás do Postgres ou Swarm).

Credenciais de loja são enviadas à API e gravadas criptografadas no PostgreSQL conforme modelo do projeto.


⁠Comandos típicos (referência rápida)

API (imagens buildadas a partir deste Dockerfile):

docker run --rm -p 8000:8000 \
  -e DATABASE_URL=postgresql+psycopg://USER:PASS@HOST:5432/omnilink \
  -e REDIS_URL=redis://HOST:6379/0 \
  -e CELERY_BROKER_URL=redis://HOST:6379/1 \
  -e CELERY_RESULT_BACKEND=redis://HOST:6379/2 \
  -e APP_ENV=production \
  -e ENCRYPTION_KEY='SUA_CHAVE_FERNET_44_CHARS' \
  -e WEBHOOK_SIGNING_SECRET='secreto_seguro_min_16' \
  -e METRICS_TOKEN='token_seguro_min_16' \
  automacaodebaixocusto/omnilink-api:latest \
  sh -c "PYTHONPATH=/app alembic upgrade head && uvicorn app.main:app --host 0.0.0.0 --port 8000"

Worker Celery:

docker run --rm \
  -e DATABASE_URL=... -e REDIS_URL=... \
  -e CELERY_BROKER_URL=... -e CELERY_RESULT_BACKEND=... \
  -e APP_ENV=production \
  -e ENCRYPTION_KEY=... -e WEBHOOK_SIGNING_SECRET=... -e METRICS_TOKEN=... \
  automacaodebaixocusto/omnilink-api:latest \
  celery -A app.workers.celery_app.celery_app worker --loglevel=INFO --concurrency=1

Performance: scraping com Playwright consome RAM/CPU — use --concurrency=1 (ou baixo) no worker em produção.


⁠Documentação fonte no repositorio Git

Consulte na raíz do projeto: README, DOCUMENTACAO_COMPLETA_API.md, GUIA_AMBIENTE_LOCAL.md, docker-stack.yml / docker-compose.yml, coleção Postman sob postman/, exemplo de .env em .env.example.


⁠English overview (Docker Hub visibility)

OmniLink API is an async FastAPI backend combining listing scraping (Playwright/Chromium bundled in-image) with affiliate link generation for Amazon and Mercado Livre, PostgreSQL persistence, Celery workers on Redis, optional webhook callbacks signed with HMAC, and Prometheus metrics at /metrics.


Licença e suporte: conforme arquivo LICENSE/repositório público principal do projeto OmniLink API.

Tag summary

Content type

Image

Digest

sha256:14384b281…

Size

562.2 MB

Last updated

about 2 months ago

docker pull automacaodebaixocusto/omnilink-api