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.)
X-Omnilink-Signature)./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.
| Camada | Tecnologia |
|---|---|
| API | Python 3.11, FastAPI, Uvicorn, Pydantic Settings |
| Banco | PostgreSQL (driver psycopg v3, SQLAlchemy 2.x, Alembic) |
| Fila | Redis + Celery 5 |
| Browser | Playwright + Chromium (instalados na imagem) |
| Segurança de dados sensíveis | Fernet (ENCRYPTION_KEY), hash SHA-256 da API key no backend |
| Observabilidade | JSON logging, Prometheus client, middleware de latência/status |
{platform} nas rotas)| Plataforma | Cofre POST /v1/accounts | POST .../affiliate/.../generate-link | POST .../fetch/.../list |
|---|---|---|---|
amazon | Sim | Sim | Sim |
mercadolivre | Sim | Sim | Sim |
shopee | Sim | 503 (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.
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étodo | Caminho |
|---|---|
| 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ável | Uso |
|---|---|
APP_ENV | development, staging ou production (validações de segurança mais estritas nos últimos). |
APP_DEBUG | false recomendado em produção (true aumenta superfície de erro). |
DATABASE_URL | Ex.: postgresql+psycopg://usuario:senha@host:5432/omnilink |
REDIS_URL | Redis principal (ex.: redis://redis:6379/0) |
CELERY_BROKER_URL / CELERY_RESULT_BACKEND | Filas Celery em DBs índices distintos (ex.: /1, /2) |
ENCRYPTION_KEY | Chave Fernet (44 caracteres URL-safe Base64). Obrigatória e própria em staging/production. |
WEBHOOK_SIGNING_SECRET | HMAC dos webhooks (mínimo 16 caracteres fora dev; não use change-me). |
METRICS_TOKEN | Mín. 16 caracteres em staging/production; opcional em dev mas, se definido, protege /metrics e /health/diagnostics. |
DEFAULT_AFFILIATE_TAG | Tag 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.
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.
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.
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.
Content type
Image
Digest
sha256:14384b281…
Size
562.2 MB
Last updated
about 2 months ago
docker pull automacaodebaixocusto/omnilink-api