wiki: sched docker-runner урок — config.json naming, docker-формат образов для registry 2.8.3, host-GC нецелесообразен

This commit is contained in:
2026-08-24 07:56:32 +03:00
parent 5e73b20806
commit b64887f301
4 changed files with 26 additions and 2 deletions

View File

@@ -13,6 +13,7 @@
## [2026-08-12] implement | NEW concepts/keenetic-rci-api.md — разобрана автоматизация KeeneticOS 5.1.3 (RCI: GET /rci/show/*, POST /rci/ массив parse-команд). Через API добавлены DNS-записи git.kreknin.site/kreknin.site → 192.168.1.43 (решение сломанного hairpin). Проверено с LAN: всё 200. Правила порт-форвардинга в 5.x лежат в ip.static (to-host=MAC).
## [2026-08-12] implement | UPDATE entities/kreknin-synology.md — Gitea 1.27.1 + postgres 16 на kreknin (для Алексея), traefik починен (restart policy), LE-серт git.kreknin.site, проброс 80/443→8000/4443 на Keenetic. KeeneticOS Viva API закрыт — правила в GUI. NAT loopback сломан → нужен DNS-override git.kreknin.site→192.168.1.43. Пароли: pass kreknin/keenetic + pass kreknin/gitea.
# Wiki op-log
## [2026-08-23] ingest | UPDATE concepts/books-vds-no-gitea-actions.md + concepts/registry-oci-image-index-gc.md — разбор sched docker-runner `createPickingListPdf`: (1) docker CLI читает креды только из `${DOCKER_CONFIG}/config.json`, не `docker-config.json` (rename на slovo); (2) теги buildx/curl = OCI image-index, registry 2.8.3 отдаёт только на OCI-Accept, docker daemon → «manifest unknown» при отсутствующем child (после прежних host-GC) — фикс: перепуш docker schema2-манифестом (config mediaType `container.image.v1+json`, не `distribution.image.config.v2+json`); (3) production-конфиг daemon должен лежать в монтированной конфиг-дире (иначе плейсхолдер `<SET_IN_PROD_VOLUME_MOUNT>` в tasks.json). host-GC dry-run 2026-08-23: ~2.5МБ реклайма → нецелесообразен.
## [2026-08-23] ingest | UPDATE concepts/books-vds-no-gitea-actions.md — деплой books-web `master-a448cad` (фикс 8 embed-api роутов, оба тенанта, инцидент DELETE-404 закрыт). Уроки в ранбук: (1) `docker save` на Docker 29 сразу даёт OCI-layout (index.json+blobs) — конвертация не нужна, amd64 child manifest в `blobs/sha256/<index-digest>`; (2) `PUT /api/stacks/<id>` синхронный, тянет образ ВНУТРИ запроса — клиентский таймаут рвёт ожидание, оп доделывается server-side, НЕ пере-PUT, проверять контейнеры через `/api/endpoints/1/docker/containers/json` + images/json; (3) смоук sched: `docker exec <sched> node -e fetch(localhost:3031/api/runs)` (curl в контейнере нет), Nuxt `/admin/scheduler/**` требует JWT isAdmin — `?token=` 403. Процедура сборки шаг 3 уточнён.
## [2026-08-23] ingest | NEW concepts/sched-ozon-creds-stub-contract.md — контракт кредов Ozon slovo/bookva: мисматч-пары в обеих БД — намеренные заглушки (анти-утечка после tenant-split). Урок: .admin «починил» заглушку (slovo seller 1 ← bookva-ключ) → откат 12:07Z по подтверждению владельца; зеркальная заглушка bookva seller 2 (12:15Z). Безопасность: break-on-error 2a38fb5 задеплоен (фейл-фаст без спина). verify по SHA2 (d6227b = slovo-ключ, f700f3 = bookva-ключ). НЕ чинить. Связано: инцидент 2026-08-23, перевод slovo → file-managed (887bbae).
## [2026-08-14] ingest | NEW concepts/snolla-smtp-mail-delivery-2026-08.md — postmortem SMTP-инцидента 1214.08: 525 SMTP disabled (Яндекс 360, доменка) → переезд на e-16513832@yandex.ru (app-password); 554 SPAM на 2+ получателях от холодного ящика → @snolla/mailer@0.9.0 per-recipient (forms-api 0.2.0, web 0.44.0); 550 from not owned → mailSettings.from во всех production.json + шаблон pilorama98checkoutconfirm. Монитор SMTP на VDS (cron 08:00, ntfy) + parity-чек Portainer env. Рецепт деплоя тиража (порядок, гочи: ad-hoc контейнер vs Portainer, regex-парсинг image, yarn up -R data).