feat(admin-api): деплой admin-api на vds (стек 25) — admin-api.vds.kzntsv.site
Образ registry.kzntsv.site/admin-api:ca0dfa3 (ESM-фикс). Stack 25, proxy-сеть, env 8/8 (DATABASE_URL/JWT_SECRET/S3), mem_limit 512m, traefik + LE. Live GREEN: /health ok, ключ pilorama98 проходит, LE-серт выдан. Coord-таска обновлена (Number resolved, staging, deploy). Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -16,16 +16,69 @@
|
||||
S2 `@snolla/admin-api-client`, S3 `@snolla/admin-schema-gen`. Канал: snolla шлёт
|
||||
ревью-запрос в мой inbox (commit/hash + что смотреть), я ревьюю и возвращаю финайдинги.
|
||||
Ревью S2 — **до публикации в Verdaccio** (pilorama98 завязан на клиент).
|
||||
- **Ревьюер загрузчика pilorama98** (назначен vitya 2026-08-04): код миграции —
|
||||
`ApiCatalogStore`, contract-tests, identity-тест. Канал: pilorama98 шлёт commit'ы + что
|
||||
смотреть; фокус — identity (API vs DB одинаковое состояние) и byte-for-byte `Content`.
|
||||
|
||||
## Ревью-чекпойнты (snolla)
|
||||
|
||||
- [x] S2 + S3 — **ревью DONE, F1 CONFIRMED 2026-08-04T14:48Z, publish разрешён.**
|
||||
Фиксы `f9714f2`+`ddf47a1`: F1a server-guard `Fields.length>0`, F1b typed-save без Fields при
|
||||
пустых defs (Content byte-for-byte), F3 джанкции в `$transaction` (tx прокинут), F5 pascal-сан,
|
||||
F6 no-clobber. Пере-ревью + тесты: admin-api **13/13**, schema-gen **19/19**, client 19/19+tsc0,
|
||||
остатков `[TEST]` в проде 0. Нюанс F2: variants `?sku=` ✅, Sku в products search-OR не добавлен
|
||||
(не блокер; loader матчит продукты списком/ProductId). Жду: publish 0.2.0/0.1.0 + API Key.
|
||||
- [ ] S1 auth-плагин (PAT+cookie-JWT) + keys-эндпоинты — после завершения
|
||||
- [ ] S2 `@snolla/admin-api-client` — **до publish**
|
||||
- [ ] S3 `@snolla/admin-schema-gen` — после завершения
|
||||
|
||||
## Текущий статус
|
||||
|
||||
- 🔵 **2026-08-04T14:29Z — зазор СНЯТ, скоуп расширен, контракт зафиксирован.**
|
||||
- 🔵 **2026-08-04T15:26Z — деплой admin-api: стек 25 создан, блокер в Dockerfile.**
|
||||
- Образ `admin-api:e1540de` собран+запушен. Стек 25 (`admin-api.vds.kzntsv.site`, env 8/8,
|
||||
proxy-сеть, mem_limit 512m) создан. **Контейнер крашится**: ESM `ERR_MODULE_NOT_FOUND`
|
||||
dist/plugins/prisma — 32 файла extensionless импортов + tsconfig `moduleResolution:bundler`.
|
||||
Фикс маршрутизирован snolla (15-26-16Z): добавить `.js` + node16, или bundle esbuild.
|
||||
Staging 4732 (tsx) работает — identity не блокируется. Жду sha фикса → пересборка + PUT.
|
||||
- 🟢 **2026-08-04T15:18Z — staging admin-api перезапущен с Number-fix (911b9b7).**
|
||||
Write-probe сам: Number 424242→424242 ✅, throwaway удалён. pilorama98 запускает
|
||||
identity-прогон (bump 0.2.1 + Number в ApiCatalogStore, 104/104).
|
||||
- 🟢 **2026-08-04T15:14Z — Number РЕШЁН, identity-тест разблокирован.**
|
||||
- snolla: `Number` добавлен в products/save (`911b9b7`/`6fe1088`, client **0.2.1**): create —
|
||||
присланный иначе findNextNumber, update — ставит если прислан. Тесты 23/23+19/19, чисто.
|
||||
- pilorama98: F1 (apiKey→local.json gitignored)+F2 (TypeId из чтения) пофикшены (4372c59, 103/103).
|
||||
Собирают identity-тест на staging (bump 0.2.1 + Number в ApiCatalogStore).
|
||||
- **Ротация ключа** (был в истории git fb07849): рекомендация — принять риск (приватный Gitea),
|
||||
решение за vitya.
|
||||
- Деплой: жду Dockerfile от snolla.
|
||||
- 🟢 **2026-08-04T15:12Z — ревью ApiCatalogStore DONE (тесты 102/102).**
|
||||
- **F1 🔴** API-ключ `sk_6a83…` закоммичен в `apps/loader/config/default.json` (трекаемый) —
|
||||
нарушение acceptance №4; фикс: `config/local.json` gitignored + ротация (по решению pilorama98).
|
||||
- **F2 🟡** `updateProduct` хардкодит `TypeId` (расходится с DB-путем для др. типа); F3 🟡 get+save
|
||||
на джанкции (перф). Content byte-for-byte/джанкции/пагинация/store-selection ✅.
|
||||
- Number: зазор подтверждён, вопрос у snolla (15:06Z).
|
||||
- 🟢 **2026-08-04T15:06Z — staging write-probe: ок, но зазор `Number`.**
|
||||
- pilorama98: products/save Content byte-for-byte ✅, variants/save ✅. ⚠️ **`Number`
|
||||
серверно-манится** (saveSchema без Number, create = findNextNumber max+1) → identity по
|
||||
Number ломается (лоадер пишет явно). Вопрос маршрутизирован snolla (15-06-26Z),
|
||||
рекомендация — добавить `Number` в save-schema. Если server-managed → решение vitya
|
||||
(ослабить identity по Number / гибрид).
|
||||
- **Деплой-план согласован с snolla** (14-56-38Z): Dockerfile — snolla коммитит,
|
||||
оркестрация/деплой — я; хостнейм `admin-api.vds.kzntsv.site`; один общий инстанс;
|
||||
env JWT_SECRET (реальный)/DATABASE_URL/S3; mem_limit 512m.
|
||||
|
||||
## Хронология
|
||||
- **Staging admin-api поднят** `127.0.0.1:4732` → `MoreThenCmsStaging` (свежая копия
|
||||
MoreThenCms на vds mssql, restore из COPY_ONLY-бэкапа, snolla=db_owner, логи сжаты).
|
||||
Ключ pilorama98 проходит (scope read-write). Письмо pilorama98 14-59-32Z (staging +
|
||||
роль ревьюера).
|
||||
- **Лог-чистка (вопрос vitya):** MoreThenCms 10ГБ→1ГБ (SIMPLE recovery + SHRINK, кап-риск
|
||||
Express устранён), staging log 10ГБ→259МБ. Диск 35ГБ свободно.
|
||||
- **Деплой-план согласован с snolla** (14-56-38Z): Dockerfile — snolla коммитит,
|
||||
оркестрация/деплой — я; хостнейм `admin-api.vds.kzntsv.site`; один общий инстанс;
|
||||
env JWT_SECRET (реальный)/DATABASE_URL/S3; mem_limit 512m.
|
||||
- Инцидент snolla: cleanup-live-keys `[CLIENT-VERIFY]` — LIKE character class снёс ключ,
|
||||
перевыпущен + скрипт починен (7eb1bb8).
|
||||
|
||||
## Хронология
|
||||
- **Решение vitya: расширять snolla** (AskUserQuestion). snolla подтвердила независимо —
|
||||
variants/categories/tags + джанкции в текущем скоупе, реализует после ядра кодгена.
|
||||
- **Контракт от snolla relay'нут pilorama98** (14-29-11Z): query (GET list?scope&skip&take /
|
||||
|
||||
Reference in New Issue
Block a user