meta(tasks): create [books-scheduler-registry-auth-cred] in OpeItcLoc03/admin

This commit is contained in:
2026-06-18 06:57:05 +00:00
parent 97fce8be92
commit 120af8bfcb

View File

@@ -643,3 +643,65 @@ vehicles-loader (stostayer) деплоится в Docker у клиента (lite
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: victor/stostayer.new / 2026-06-17T12:56:53.300Z -->
---
## ⚪ [books-scheduler-registry-auth-cred] — ## Проблема (простыми словами)
Планировщик books (`books-job-scheduler` на books-vds) умеет запускать «docker-таски» — для каждой такой задачи он скачивает (pull) готовый образ-инструмент из реестра `registry.kzntsv.site` и запускает его контейнером. Один из таких инструментов — `books-tool-create-picking-list-pdf` (рендерит PDF листа подбора FBS).
С 23 мая каждый такой запуск падает на стадии скачивания образа с ошибкой:
`pull/create failed: (HTTP 500) ... no basic auth credentials`.
Причина (разобрана совместно с admin): `registry.kzntsv.site` — это standalone `registry:2` за htpasswd Basic-авторизацией (так с самого bootstrap 20.05, анонимного доступа не было никогда). Раньше образ просто лежал в локальном кэше демона и pull не требовался; ночная чистка `vdsDockerCleanup` 23 мая вычистила кэш — и следующий pull впервые упёрся в всегда-бывшую auth-стену. Код планировщика звал pull **без креда** (анонимно) → реестр отвечал 401 → dockerode оборачивал в 500. Итог: ~80 фейлов, PDF листов подбора не генерятся с 23 мая.
Approach ратифицирован человеком (вариант A): код планировщика будет слать креды в pull (это делаю я, books, отдельно, под TDD), а реестру нужен отдельный htpasswd-юзер `books-ci` (его ты уже завёл, кред в `pass vds-kzntsv/registry-books-ci`, проверен live: authed HEAD manifests/master → 200).
## Что нужно сделать (твоя зона — admin)
Положить кред `books-ci` в config-volume планировщика на **books-vds (89.253.255.133)**:
- **Файл (bind-mount):** `/opt/books/job-scheduler/config/default.json`
- В этом JSON уже есть объект верхнего уровня `"docker"` (там `host`, `maxConcurrent`, `pullBackoffMs` и т.д.). Добавить в него ключ `registryAuth`:
```json
"docker": {
"...": "... существующие поля не трогать ...",
"registryAuth": {
"username": "books-ci",
"password": "<пароль из pass vds-kzntsv/registry-books-ci>",
"serveraddress": "registry.kzntsv.site"
}
}
```
- `serveraddress` — ровно `registry.kzntsv.site` (без `https://`, без `/v2`).
- После правки **перезапустить контейнер `books-job-scheduler`** (через Portainer/compose), чтобы node перечитал config — bind-mount подхватывается только на старте процесса.
## Acceptance
- Ключ `docker.registryAuth` присутствует в `/opt/books/job-scheduler/config/default.json`, пароль соответствует `books-ci` в реестре.
- Контейнер `books-job-scheduler` перезапущен и `healthy`.
- (Финальная проверка — за books: после деплоя code-части убедиться что `createPickingListPdf` перестал падать на pull. Образ и тег `master` на месте, допушивать ничего не надо — pull заработает сразу как кред доедет + выйдет code-часть.)
## Замечания
- Кред **не хардкодить** в git — только в config-volume на хосте (как mongo/s3/mariadb-креды рядом).
- registryGc (вторая docker-related задача, падает «gitea config missing») — **в эту таску НЕ входит**, разбирается отдельно на стороне books (мис-таргетирован на Gitea-packages, переписывается на registry v2 DELETE позже).
## Обязательные скилы — вызвать до начала работы
- invoke `using-tasks` — для управления статусом этой задачи
- invoke `using-projects-meta` — cross-project координация / нотификация
- invoke `project-discipline` — дисциплина изменений на проде (config-volume, рестарт)
- invoke `using-vds-ops` или `books-ops-mcp` — read-only проверка `books-job-scheduler` (health/env) после рестарта
**TDD:** нет — ops-задача (размещение креда + рестарт контейнера), кода нет.
**Разрешения:** интерны: нет (секрет) | автопуш: н/п (не git-код books)
**weight:** needs-human
**notify:** victor/books
**Status:** ready
**Where I stopped:** (not started)
**Next action:** Добавить ключ docker.registryAuth (кред books-ci из pass vds-kzntsv/registry-books-ci) в config-volume scheduler'а на books-vds, затем перезапустить контейнер books-job-scheduler чтобы он перечитал config.
**Branch:** n/a
**Notify:** victor/books
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: victor/books / 2026-06-18T06:57:04.379Z -->
---