From c3c79b996a6e6d4aa26ff169fa40eb317818155d Mon Sep 17 00:00:00 2001 From: vitya Date: Thu, 30 Jul 2026 17:36:36 +0300 Subject: [PATCH] =?UTF-8?q?feat(labtools.pro):=20v3=20cutover=20LIVE=20?= =?UTF-8?q?=E2=80=94=20snolla=200.42.1=E2=86=920.43.2=20(aws-sdk=20v2?= =?UTF-8?q?=E2=86=92v3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 4-й сайт тиража v3 (on-snolla, kupimknigi, labtools.ru, labtools.pro — 4/6 GREEN). Stack 19 image 0610432→a106622, env 8/8 preserved, mem_limit 512m. Staging :5081 parity-gate GREEN: theme lato.css 200 9994B md5-identical (v3 aws-sdk v3 S3-direct read из vds MinIO 2025), sitemap 7 детей == live, order-parity press-forms 12 изделий, / 4-байт diff = og:url/og:image request-host (benign). Live smoke GREEN, TLS CN=labtools.pro не тронут. Rollback = labtools-pro:0610432 (0.42.1, жив в registry). Compose source-of-truth + runbook v3 секция + handoff обновлены. Co-Authored-By: Claude --- .tasks/NEXT_SESSION.md | 26 +++++++++++++------ .../labtools.pro-vds-deploy-runbook.md | 21 ++++++++++++++- .wiki/concepts/minio-split-cutover-runbook.md | 3 ++- .../vds-kzntsv/labtools-pro.compose.yml | 2 +- 4 files changed, 41 insertions(+), 11 deletions(-) diff --git a/.tasks/NEXT_SESSION.md b/.tasks/NEXT_SESSION.md index 5703c72..6333962 100644 --- a/.tasks/NEXT_SESSION.md +++ b/.tasks/NEXT_SESSION.md @@ -1,14 +1,23 @@ --- -_last_updated_: 2026-07-30T14:30:00Z -session_id: 2026-07-30-labtools-v3-cutover -prev_session_id: 2026-07-30-kupimknigi-v3-cutover +_last_updated_: 2026-07-30T17:35:00Z +session_id: 2026-07-30-labtools-pro-v3-cutover +prev_session_id: 2026-07-30-labtools-v3-cutover --- # Next session handoff -## Предыдущая сессия — kupimknigi.spb.ru v3 cutover. ЗАВЕРШЁН ✅ +## Эта сессия — labtools.pro v3 cutover. ЗАВЕРШЁН ✅ -## Эта сессия — labtools.ru v3 cutover. ЗАВЕРШЁН ✅ +4-й сайт тиража v3 (после on-snolla, kupimknigi, labtools.ru). Тот же паттерн, отработан чисто. **4/6 GREEN.** labtools.pro = English-twin (`Culture=en`) labtools.ru, отдельный репо `victor/labtools.pro`, image name `labtools-pro` (НЕ `labtools`), стек 19. + +### Что сделано +- **Bump:** `@snollajs/snolla 0.42.1→0.43.2` в `apps/web/package.json` (commit `12f8992`) + resolutions-блок в root `package.json` (verbatim labtools.ru) + реген `yarn.lock` (commit `a106622`, single `@smithy/signature-v4@5.3.11` deduped). Pushed victor/labtools.pro master `6c7ea88..a106622`. Endpoint fix `6c7ea88` (s3.endpoint→minio.vds.kzntsv.site) был в master с 2026-07-29, но в бегущем образе `0610432` (v2) его не было — v3 cutover заодно перевёл S3-direct read на vds minio. +- **Build на VDS:** `git archive a106622` → `~/build/labtools-pro` → `docker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKEN` → `registry.kzntsv.site/labtools-pro:a106622` (+latest), digest `2152642c4b17`, 476MB, EXIT=0. +- **Staging :5081 parity-gate GREEN:** throwaway контейнер из env живого стека 19 (8 секретов). `/`+nav+catalog = 4-байт diff = `og:url`/`og:image` request-host (`localhost:5081` vs `www.labtools.pro`, benign → byte-identical post-cutover). Redirects IDENT, robots/sitemap IDENT (7 детей == live), **theme `lato.css` 200 9994B md5-identical** (v3 aws-sdk v3 S3-direct read из vds MinIO 2025), order-parity press-forms 12 изделий identical. Всё 200/3xx. +- **Portainer PUT stack 19 LIVE:** node in-memory `put-stack` (НЕ PS), env 8/8 preserved, `prune:false pullImage:true mem_limit 512m`. PUT 200. Контейнер `a106622` healthy сразу. Source-of-truth compose синхронно закоммичен (admin `0610432`→`a106622`). +- **Live smoke GREEN:** `/` 200 12736B, `/about`+`/contacts` 200, robots/sitemap 200 (7 детей 200), 3 каталог-секции 200, продукты 200, theme `lato.css` 200 9994B (v3 S3-direct), redirects parity, apex `labtools.pro` 200. TLS CN=labtools.pro не тронут (LE до Sep 30). `/clients`+`/cookie`+`/privacy`→404 = ожидаемо (не в sitemap .pro; real nav = `/ /about /contacts`). **Rollback = `0610432`** (v2 0.42.1, жив в registry). + +## Предыдущая сессия — labtools.ru v3 cutover. ЗАВЕРШЁН ✅ Третий сайт тиража (после on-snolla + kupimknigi). Тот же паттерн, отработан чисто. 3/6 GREEN. @@ -72,17 +81,18 @@ snolla опубликовала v3, admin зарезал боевой cutover. ## Open треки | Трек | Готовность | Entry-point | |---|---|---| -| **B3 v3 — labtools.ru** | ✅ LIVE 2026-07-30 | эта сессия — см. ↑ §Эта сессия | +| **B3 v3 — labtools.pro** | ✅ LIVE 2026-07-30 | эта сессия — см. ↑ §Эта сессия | +| **B3 v3 — labtools.ru** | ✅ LIVE 2026-07-30 | prev session | | **B3 v3 — kupimknigi** | ✅ LIVE 2026-07-30 | prev session | | **B3 v3 — on.snolla.com** | ✅ LIVE 2026-07-30 | prev session | -| **B3 v3 — остальные 3 сайта** (labtools.pro/emspb/tandemmebel) | ⏳ TODO — v3-паттерн отработан на 3 сайтах (3 GREEN) | `.wiki/concepts/minio-split-cutover-runbook.md` §B3-v3 + per-site `-vds-deploy-runbook.md` | +| **B3 v3 — остальные 2 сайта** (emspb/tandemmebel) | ⏳ TODO — v3-паттерн отработан x4 (4 GREEN) | `.wiki/concepts/minio-split-cutover-runbook.md` §B3-v3 + per-site `-vds-deploy-runbook.md` | | MinIO split Track A (books-vds minio 2020→2025) | ⏳ TODO — transparent, отдельно | runbook §Track A | | MinIO split B4 .NET catch-all админ s3 endpoint | ⏳ TODO — `C:\sites\snolla\Web.config` serviceURL → minio.vds.kzntsv.site | runbook §B4 | | MinIO split B5 Obsidian Remotely Save endpoint | ⏳ TODO — obsidian бакет смиррорен, можно менять | runbook §B5; memory `obsidian-remotely-save-endpoint-after-mirror` | | books-task-runner-registry-auth-cred | 🔵 blocked — cred в config-volume, рабочий образ содержит СТАРЫЙ registryGc; тега master-a3734d5 в реестре нет | `.tasks/STATUS.md` §books-task-runner | ## Спроси user'а -- **Следующий сайт = labtools.pro** (user выбрал 2026-07-30, конец этой сессии — НЕ начат, работа в следующей сессии). Стек 19, возможно общий кодбейс с labtools.ru — проверить, можно парой. 3/6 GREEN (on-snolla, kupimknigi, labtools.ru). Остались после: **emspb** (стек 18), **tandemmebel** (стек 20 — был BLOCKED на sharp-staging визуальном дефекте, проверить перед бампом). Паттерн отработан x3: bump `@snollajs/snolla→0.43.2` + resolutions → build на VDS → staging :50XX parity-gate → Portainer PUT env-preserving. +- **Следующий сайт тиража v3** — 4/6 GREEN (on-snolla, kupimknigi, labtools.ru, **labtools.pro**). Остались: **emspb** (стек 18), **tandemmebel** (стек 20 — был BLOCKED на sharp-staging визуальном дефекте, проверить перед бампом). Паттерн отработан x4: bump `@snollajs/snolla→0.43.2` + resolutions + реген `yarn.lock` (иначе Dockerfile `yarn install --immutable` падает) → build на VDS → staging :50XX parity-gate → Portainer PUT (node in-memory `put-stack`, env-preserving). NB: yarn.lock реген — обязателен, на labtools.pro сначала забыл (сборка упала YN0028). - stostayer v3-трек (0.43.1/0.7.8/0.17.2) — HOLD, snolla-scope, НЕ подхватывать без GO user (snolla ждёт stostayer-specific). ## Не делать (preemptive guards) diff --git a/.wiki/concepts/labtools.pro-vds-deploy-runbook.md b/.wiki/concepts/labtools.pro-vds-deploy-runbook.md index 1c40e15..dcce292 100644 --- a/.wiki/concepts/labtools.pro-vds-deploy-runbook.md +++ b/.wiki/concepts/labtools.pro-vds-deploy-runbook.md @@ -3,7 +3,7 @@ title: labtools.pro snolla-app — VDS deploy runbook (stack / traefik / env / c type: concept tags: [labtools-pro, labtools, snolla, vds, deploy, docker, portainer, traefik, runbook, migration, catalog] related: [[../entities/vds-kzntsv]], [[../entities/ruvds-iis-host]], [[portainer-stack-management-vds]], [[minio-imgproxy-on-vds]], [[emspb-vds-deploy-runbook]], [[labtools-vds-deploy-runbook]], [[snolla-live-prod-inplace-image-bump]] -updated: 2026-07-05 +updated: 2026-07-30 --- # labtools.pro → VDS deploy runbook @@ -86,3 +86,22 @@ curl -ksS -X POST "$BASE/api/stacks/create/standalone/string?endpointId=1" -H "X - **Swap:** Portainer PUT стека 19 (env 8/8 сохранён) → healthy → live-smoke GREEN (nav+presses+press-forms 200, order вживую), TLS CN=labtools.pro не тронут. - **Rollback:** тег `labtools-pro:7bd9fae` (0.28.7, в registry) / стек 19 PUT назад / DNS→RUVDS. - Compose обновлён на `0610432`. Таска `[labtools-pro-deploy-snolla-0-42-1]` 🟢. Notify=victor/labtools.pro. + +## 0.43.2 v3 cutover (aws-sdk v2→v3) — ✅ ВЫПОЛНЕН 2026-07-30 +4-й сайт тиража v3 (после on-snolla, kupimknigi, labtools.ru — все GREEN). MinIO split Track B3-v3. +Паттерн отработан x3; labtools.pro = English-twin (`Culture=en`) labtools.ru, отдельный репо `victor/labtools.pro`. +Оператор дал GO на боевой apply после staging parity-gate. +- **Bump:** `@snollajs/snolla 0.42.1→0.43.2` в `apps/web/package.json` (commit `12f8992`) + `resolutions`-блок в root `package.json` (verbatim labtools.ru: @aws-sdk/client-s3 3.1005.0 + @smithy chain 5.3.11) + реген `yarn.lock` (commit `a106622`, single @smithy/signature-v4@5.3.11 deduped). Pushed victor/labtools.pro master `6c7ea88..a106622`. +- **Endpoint fix `6c7ea88`** (s3.endpoint→minio.vds.kzntsv.site) был в master с 2026-07-29, но в бегущем образе `0610432` (v2) его не было — v3 cutover заодно перевёл S3-direct read на vds minio. +- **Build на VDS:** `git archive a106622` → `~/build/labtools-pro` → `docker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKEN` → `registry.kzntsv.site/labtools-pro:a106622` (+latest), digest `sha256:2152642c4b17…`, 476MB, EXIT=0. +- **Staging :5081 parity-gate GREEN** (throwaway контейнер из env живого стека 19, 8 секретов): + - `/` nav catalog = **4-байт diff = `og:url`+`og:image` request-host** (`localhost:5081` 13 chars vs `www.labtools.pro` 15 chars × 2 = 4B). **Benign request-context** — post-cutover (оба за traefik Host=www.labtools.pro) byte-identical. (Ср. kupimknigi 3-байт form-url diff.) + - Redirects (`/contacts/`→`/contacts`, `/products/laboratory-ball-mills`→`/lshm-750`) **IDENT** (301). + - `/robots.txt` `/sitemap.xml` **IDENT** (7 sitemap детей == live, locs identical, host=www). + - **theme `lato.css` 200 9994B md5-identical** — v3 aws-sdk v3 S3-direct read из vds MinIO 2025 WORKS (ключевая v3-верификация). + - **Order-parity** `/products/press-forms` = 12 изделий identical order (multi-position…vacuum-ring). + - Self-consistency: всё 200/3xx, 0 × 4xx/5xx. +- **Portainer PUT stack 19 LIVE:** node in-memory `put-stack` (НЕ PS Invoke-RestMethod — корраптит кириллицу compose; скрипт `scripts/tmp/put-stack-labtools-pro.mjs`), env 8/8 preserved, `prune:false pullImage:true mem_limit 512m`. PUT 200. Контейнер `a106622` healthy сразу. +- **Live smoke GREEN (via traefik):** `/` 200 12736B, `/about`+`/contacts` 200, `/robots.txt`+`/sitemap.xml` 200 (7 детей все 200), 3 каталог-секции 200, продукты (`press-forms/ring` 17255B, `laboratory-presses/plg-20` 22077B) 200, theme `lato.css` 200 9994B (v3 S3-direct), redirects parity, `labtools.pro` apex 200. Лог чист (tedious deprecation + cosmetic `labtools.ru listening` banner — known benign). TLS CN=labtools.pro не тронут (LE notBefore Jul 2 / notAfter Sep 30 2026). +- **Rollback:** `labtools-pro:0610432` (0.42.1, жив в registry) — Portainer PUT назад / compose revert. +- Compose (admin source-of-truth) синхронно закоммичен `0610432`→`a106622`. 4/6 v3 сайтов GREEN. Остались: **emspb** (стек 18), **tandemmebel** (стек 20 — был BLOCKED на sharp-staging визуальном дефекте, проверить перед бампом). diff --git a/.wiki/concepts/minio-split-cutover-runbook.md b/.wiki/concepts/minio-split-cutover-runbook.md index 01f6486..81b2572 100644 --- a/.wiki/concepts/minio-split-cutover-runbook.md +++ b/.wiki/concepts/minio-split-cutover-runbook.md @@ -34,7 +34,8 @@ updated: 2026-07-30 | **B3v3 on-snolla v3-пилот** | ✅ LIVE 2026-07-30 | `@snollajs/snolla 0.43.2` published (verdaccio latest). Live MinIO verify ЗЕЛЁНЫЙ (snolla, оба конфига). **v3 cutover 2026-07-30T11:28Z**: bump `@snollajs/snolla 0.42.1→0.43.2` + resolutions (root package.json), commit `eb8c143` pushed, build на VDS → `registry.kzntsv.site/on-snolla:eb8c143`, Portainer PUT stack 22 env-preserving (8/8), prune:false pullImage:true, mem_limit 512m. Throwaway staging :5078 parity-gate GREEN (theme asset 200 97324 B byte-identical, sitemapindex+3 sub-sitemaps byte-identical, /c 404 parity). Live smoke GREEN: / 200, robots/sitemap/sub-sitemaps 200, /yandex 200, theme asset 200 97324 B (v3 aws-sdk v3 S3-direct read из vds MinIO 2025). TLS не тронут (LE до Oct 18). Rollback = образ-тег `07db7e3` (v2, жив). | | **B3v3 kupimknigi.spb.ru** | ✅ LIVE 2026-07-30 | bump `@snollajs/snolla 0.42.0→0.43.2` + resolutions (commit `5364353`, apps/web + root). Build на VDS (archive → `~/build/kupimknigi`) → `registry.kzntsv.site/kupimknigi:5364353`(+latest). Bundles a83e2a9 endpoint fix (minio.vds.kzntsv.site) — был в репо, но в бегущем образе 9608ff6 (v2) его не было. Throwaway staging :5079 parity-gate GREEN: `/` byte-identical с real Host, theme asset `toolbox.css` 200 35799 B byte-identical (v3 aws-sdk v3 S3-direct read из vds MinIO 2025), robots 200, `/callback-order/`→301. Portainer PUT stack 21 env-preserving (8/8, node in-memory put-stack), `prune:false pullImage:true mem_limit 512m`. Live smoke GREEN: `/` 200, robots/sitemap 200, H1 «Скупка книг на дому в СПб…», theme asset 200 35799 B. TLS LE до Oct 3 (не тронут). **Rollback = `9608ff6`** (v2, жив в registry). | | **B3v3 labtools.ru** | ✅ LIVE 2026-07-30 | bump `@snollajs/snolla 0.42.1→0.43.2` + resolutions (commit `0dc0b4e`, apps/web + root). Endpoint fix `4f3314f` в master, но в бегущем образе `566d41c` (v2) его не было — v3 cutover заодно перевёл S3-direct read на vds minio. Build на VDS (archive → `~/build/labtools`) → `registry.kzntsv.site/labtools:0dc0b4e`(+latest). Throwaway staging :5080 parity-gate GREEN: `/` byte-identical (18594B), theme `lato.css` 200 9239B byte-identical (v3 S3-direct), sitemap 38 locs == live (0 diff, 0 bad), section order-parity byte-identical. Portainer PUT stack 17 env-preserving (8/8, node in-memory), `prune:false pullImage:true mem_limit 512m`. Live smoke GREEN: menu pages 200, theme 200 9239B, TLS CN не тронут (LE до Sep 30). **Rollback = `566d41c`** (v2, жив). См. [[labtools-vds-deploy-runbook]] §0.43.2. | -| B3 остальные 3 сайта (tandemmebel/labtools.pro/emspb) | ⏳ TODO | тот же паттерн (bump @snollajs/snolla→0.43.2 + **resolutions** + rebuild). tandemmebel BLOCKED (визуальный дефект sharp-staging) — проверить перед бампом | +| **B3v3 labtools.pro** | ✅ LIVE 2026-07-30 | bump `@snollajs/snolla 0.42.1→0.43.2` + resolutions (commits `12f8992` bump + `a106622` yarn.lock реген — обязателен, иначе `yarn install --immutable` падает YN0028). Endpoint fix `6c7ea88` в master, но в бегущем образе `0610432` (v2) его не было. Build на VDS (archive → `~/build/labtools-pro`) → `registry.kzntsv.site/labtools-pro:a106622`(+latest), digest `2152642c4b17`. Throwaway staging :5081 parity-gate GREEN: `/`+nav+catalog 4-байт diff = `og:url`/`og:image` request-host (benign), redirects IDENT, robots/sitemap IDENT (7 детей == live), theme `lato.css` 200 9994B md5-identical (v3 S3-direct), order-parity press-forms 12 изделий. Portainer PUT stack 19 env-preserving (8/8, node in-memory put-stack), `prune:false pullImage:true mem_limit 512m`. Live smoke GREEN: nav+каталог+продукты 200, theme 200 9994B, TLS CN=labtools.pro не тронут (LE до Sep 30). **Rollback = `0610432`** (v2, жив). См. [[labtools.pro-vds-deploy-runbook]] §0.43.2. | +| B3 остальные 2 сайта (tandemmebel/emspb) | ⏳ TODO | тот же паттерн (bump @snollajs/snolla→0.43.2 + **resolutions** + **реген yarn.lock** + rebuild). tandemmebel BLOCKED (визуальный дефект sharp-staging) — проверить перед бампом | | Track A (books-vds minio 2020→2025) | ⏳ TODO | transparent, отдельно от Track B | | B4 .NET catch-all админ s3 endpoint | ⏳ TODO | `C:\sites\snolla\Web.config` serviceURL → minio.vds.kzntsv.site | | B5 Obsidian Remotely Save endpoint | ⏳ TODO | после B1 миррора obsidian (готово) — менять endpoint | diff --git a/host-stacks/vds-kzntsv/labtools-pro.compose.yml b/host-stacks/vds-kzntsv/labtools-pro.compose.yml index b5eec6b..e84353d 100644 --- a/host-stacks/vds-kzntsv/labtools-pro.compose.yml +++ b/host-stacks/vds-kzntsv/labtools-pro.compose.yml @@ -27,7 +27,7 @@ services: labtools-pro: container_name: labtools-pro - image: registry.kzntsv.site/labtools-pro:0610432 # git-sha victor/labtools.pro master (snolla 0.42.1, bump 2026-07-05; prev 7bd9fae=0.28.7=rollback) + image: registry.kzntsv.site/labtools-pro:a106622 # git-sha victor/labtools.pro master (snolla 0.43.2 v3 aws-sdk v2→v3, bump 2026-07-30; prev 0610432=0.42.1=rollback) restart: unless-stopped mem_limit: 512m # guardrail от runaway: snolla baseline ~100-200M; OOM в контейнере → restart:unless-stopped поднимет. standalone-compose → mem_limit (НЕ deploy.resources — то swarm-only). environment: