Files
admin/host-stacks/local/sched-pipelines/README.md

65 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# sched-pipelines — локальный стенд
sched daemon + 2 HTTP-воркера (Yandex Market, Ozon Seller) + CDP-browser + локальный ntfy + alert-bridge.
## Расписание (sched daemon)
| Задача | Cron | URL |
|---|---|---|
| `ozon-seller-pipeline` | `0 2 * * *` (02:00) | http://ozon-seller-builder:8080/run |
| `yandex-market-pipeline` | `30 2 * * *` (02:30) | http://ym-client-builder:8080/run |
Воркеры в **DRY-RUN**: реальные npm publish / GitHub push не выполняются (озон — `DRY_RUN=1` + publish-стадии нет на sched-пути; яндекс — stages без publish/githubDistro). После отмашки оператора — снять DRY_RUN и добавить стадии.
## Состав
| Сервис | Порт на хосте | Заметки |
|---|---|---|
| `schedd` | 127.0.0.1:18080 | admin API, ключ `SCHED_ADMIN_KEY` |
| `ym-client-builder` | 127.0.0.1:18090 | воркер Yandex (envelope-контракт ✅) |
| `ozon-seller-builder` | 127.0.0.1:18091 | воркер Ozon (sched-путь без publish/notify — ТЗ отправлено) |
| `browser` | — | Chrome headless + CDP :9222 (антибот-стадии ozon) |
| `ntfy` | 127.0.0.1:8096 | локальный ntfy на период локального теста |
| `alert-bridge` | 127.0.0.1:19090 | sched webhook → ntfy + email (unisender go2) |
## Секреты
- `.env` — gitignored; источник правды — `pass sched-pipelines/local/*`:
`sched-api-key`, `admin-key`, `webhook-secret`, `unisender-go-api-key`.
- `SCHED_API_KEY` — общий токен sched→воркеры (x-sched-api-key). Сгенерирован, в pass.
- `WEBHOOK_SECRET` — HMAC-подпись sched-алертов (X-Sched-Signature-256).
## Команды
```bash
# рендер tasks.generated.json из tasks.json + .env (после смены секретов/расписания)
node render-tasks.cjs
# сборка + запуск
docker compose up -d --build
# логи
docker compose logs -f schedd
# health sched
curl -H "Authorization: Bearer $(pass show sched-pipelines/local/admin-key)" http://127.0.0.1:18080/api/health
# ручной триггер (dry-run безопасен: воркеры в DRY-RUN)
# через sched admin API: POST /api/tasks/:name/run — см. sched docs 09.admin-api.md
```
## Миграция на VDS
1. Запушить образы в registry.kzntsv.site, compose → Portainer-стек.
2. Сеть: `proxy` (traefik), ntfy → `https://ntfy.vds.kzntsv.site` (+ auth-топик), порты → traefik-правила.
3. Секреты → stack.env на Portainer (или pass, как принято).
4. `CRON_SCHEDULE` ozon остаётся выключенным (рулит sched).
5. Проверить IP-доступность: VDS IP для docs.ozon.ru / антибот — не заблокировать.
## Известные дыры (ТЗ отправлены командам apilki)
- **ozon**: sched-путь не отдаёт sched-envelope (всегда 200 + `{runId, verdict}`) → sched видит «succeeded» на фейле; нет notify на sched-пути; нет publish-стадии на sched-пути (publish только в внутреннем кроне, который тут выключен).
- **yandex**: email-эндпоинт unisender `go2.unisender.ru/api/v1/sendEmail` → 404; правильный — `go2.unisender.ru/ru/transactional/api/v1/email/send.json` (JSON body).
- **ozon**: email-эндпоинт `go.unisender.ru/...` (старый домен) + массив `to` → go2 + одиночный получатель.
- **unisender go2**: аккаунт требует настроенный backend/tracking domain («Custom backend domain or tracking domain required») — конфигурация в аккаунте go2.unisender.ru (руками оператора).