From fd48df6225ba73575ce4ac3916cd9e3a377e0071 Mon Sep 17 00:00:00 2001 From: vitya Date: Thu, 30 Jul 2026 17:46:19 +0300 Subject: [PATCH] =?UTF-8?q?feat(emspb):=20v3=20cutover=20LIVE=20=E2=80=94?= =?UTF-8?q?=20snolla=200.42.1=E2=86=920.43.2=20(aws-sdk=20v2=E2=86=92v3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 5-й сайт тиража v3 (5/6 GREEN). In-place bump стека 18 (DNS на VDS с 2026-07-02). Commit victor/emspb.ru 5afd8a1 (bump + resolutions + yarn.lock реген). Build на VDS → registry.kzntsv.site/emspb:5afd8a1 digest 72bb59fc. Staging :5082 parity-gate GREEN (29/29 routes 200, theme assets 7/7 md5 IDENTICAL — v3 S3-direct read из vds MinIO 2025). Portainer PUT stack 18 env-preserving (8/8, node in-memory put-stack), prune:false pullImage:true. Live smoke GREEN. Rollback = 95a5c42 (v2). - emspb.compose.yml: 95a5c42→5afd8a1 - emspb-vds-deploy-runbook: §0.43.2 - minio-split-cutover-runbook: progress-table emspb ✅, остался tandemmebel - NEXT_SESSION: 5/6 GREEN, остался tandemmebel (стек 20, был BLOCKED на sharp-staging дефекте — проверить перед бампом) Остался 1 сайт: tandemmebel. Co-Authored-By: Claude --- .tasks/NEXT_SESSION.md | 27 ++++++++++++++----- .wiki/concepts/emspb-vds-deploy-runbook.md | 14 ++++++++++ .wiki/concepts/minio-split-cutover-runbook.md | 3 ++- host-stacks/vds-kzntsv/emspb.compose.yml | 2 +- 4 files changed, 37 insertions(+), 9 deletions(-) diff --git a/.tasks/NEXT_SESSION.md b/.tasks/NEXT_SESSION.md index 6333962..9950c6d 100644 --- a/.tasks/NEXT_SESSION.md +++ b/.tasks/NEXT_SESSION.md @@ -1,12 +1,24 @@ --- -_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 +_last_updated_: 2026-07-30T14:45:00Z +session_id: 2026-07-30-emspb-v3-cutover +prev_session_id: 2026-07-30-labtools-pro-v3-cutover --- # Next session handoff -## Эта сессия — labtools.pro v3 cutover. ЗАВЕРШЁН ✅ +## Эта сессия — emspb.ru v3 cutover. ЗАВЕРШЁН ✅ + +5-й сайт тиража v3 (после on-snolla, kupimknigi, labtools.ru, labtools.pro). Тот же паттерн, отработан чисто. **5/6 GREEN.** emspb = стек 18, in-place bump (DNS на VDS с 2026-07-02). + +### Что сделано +- **Bump:** `@snollajs/snolla 0.42.1→0.43.2` в `apps/web/package.json` (commit `5afd8a1`) + resolutions-блок в root `package.json` (verbatim labtools.ru) + реген `yarn.lock` (single `@smithy/signature-v4@5.3.11` deduped). Pushed victor/emspb.ru master `218c3ae..5afd8a1`. Endpoint fix `218c3ae` (s3.endpoint→minio.vds.kzntsv.site) был в master с 2026-07-29, но в бегущем образе `95a5c42` (v2) его не было — v3 cutover заодно перевёл S3-direct read на vds minio. +- **Build на VDS:** `git archive 5afd8a1` → `~/build/emspb` → `docker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKEN` → `registry.kzntsv.site/emspb:5afd8a1`(+latest), digest `sha256:72bb59fc355d…`, EXIT=0. `yarn install --immutable` в Docker прошёл (yarn.lock matches, no YN0028). +- **Staging :5082 parity-gate GREEN:** throwaway контейнер из env живого стека 18 (8 секретов, `--network proxy`). robots md5 `940a0903…` identical (31B); sitemap index→`sitemap-pages-1.xml` **29 locs == live**; **29/29 sitemap-роутов 200/200, 0 status diffs** (+2B host-context benign); **theme assets 7/7 md5 IDENTICAL** (v3 aws-sdk v3 S3-direct read из vds MinIO 2025: snolla-framework/bootstrap/toolbox/theme/slick + images/2.jpg + /images/3.jpg 115618B); redirects 301 parity (modulo host), /index.php+/services 404 parity. +- **Portainer PUT stack 18 LIVE:** node in-memory `put-stack` (Node 22 global fetch, compose в JS-var; GET `/stacks/18` для Env + `/stacks/18/file` для StackFileContent — `StackFileContent` НЕ на `/stacks/{id}`, только на `/stacks/{id}/file`), env 8/8 preserved, `prune:false pullImage:true mem_limit 512m`. PUT 200. Контейнер `5afd8a1` healthy ~1s. +- **Live smoke GREEN:** `/` 200 54615B, /contacts+/portfolio+/prices 200, /services+/index.php 404, robots md5 identical, sitemap 29 locs, theme assets md5 LIVE==staging (v3 S3-direct), redirects 301 (target `www.emspb.ru` — byte-identical post-cutover), apex `emspb.ru` 200. Лог чист. TLS не тронут. **Rollback = `95a5c42`** (v2 0.42.1, жив в registry). +- Compose (admin source-of-truth) синхронно закоммичен `95a5c42`→`5afd8a1`. emspb-vds-deploy-runbook §0.43.2 + minio-split-cutover-runbook progress-table обновлены. + +## Предыдущая сессия — labtools.pro 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. @@ -81,18 +93,19 @@ snolla опубликовала v3, admin зарезал боевой cutover. ## Open треки | Трек | Готовность | Entry-point | |---|---|---| -| **B3 v3 — labtools.pro** | ✅ LIVE 2026-07-30 | эта сессия — см. ↑ §Эта сессия | +| **B3 v3 — emspb** | ✅ LIVE 2026-07-30 | эта сессия — см. ↑ §Эта сессия | +| **B3 v3 — labtools.pro** | ✅ LIVE 2026-07-30 | prev session | | **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 — остальные 2 сайта** (emspb/tandemmebel) | ⏳ TODO — v3-паттерн отработан x4 (4 GREEN) | `.wiki/concepts/minio-split-cutover-runbook.md` §B3-v3 + per-site `-vds-deploy-runbook.md` | +| **B3 v3 — ostatся 1 сайт** (tandemmebel) | ⏳ TODO — v3-паттерн отработан x5 (5 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'а -- **Следующий сайт тиража 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). +- **Следующий сайт тиража v3** — 5/6 GREEN (on-snolla, kupimknigi, labtools.ru, labtools.pro, **emspb**). Остался: **tandemmebel** (стек 20 — был BLOCKED на sharp-staging визуальном дефекте, проверить перед бампом). Паттерн отработан x5: 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 реген — обязателен; Portainer `StackFileContent` брать с `/stacks/{id}/file`, не `/stacks/{id}`. - 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/emspb-vds-deploy-runbook.md b/.wiki/concepts/emspb-vds-deploy-runbook.md index d7b6aa0..ff5ccfe 100644 --- a/.wiki/concepts/emspb-vds-deploy-runbook.md +++ b/.wiki/concepts/emspb-vds-deploy-runbook.md @@ -98,3 +98,17 @@ curl -ksS -X POST "https://portainer.vds.kzntsv.site/api/stacks/create/standalon - **Swap:** Portainer PUT стека 18 (env 8/8 сохранён) → healthy → live-smoke GREEN, sitemap 29 вживую. - **Rollback:** тег `emspb:b6e361a` (0.28.4, в registry) / стек 18 PUT назад / DNS→RUVDS. - Compose обновлён на `95a5c42`. Таска `[emspb-deploy-snolla-0-42-1]` 🟢. Notify=victor/emspb.ru. + +## 0.43.2 v3 cutover (aws-sdk v2→v3) — ✅ ВЫПОЛНЕН 2026-07-30 +5-й сайт тиража v3 (после on-snolla, kupimknigi, labtools.ru, labtools.pro — 4 GREEN). In-place bump стека 18 (DNS на VDS с 2026-07-02, не трогали). Рецепт — [[minio-split-cutover-runbook]] §B3-v3. +- **Bump:** `@snollajs/snolla 0.42.1→0.43.2` в `apps/web/package.json` (commit `5afd8a1`) + `resolutions`-блок в root `package.json` (verbatim labtools.ru: @aws-sdk/client-s3 3.1005.0 + @smithy chain 5.3.11) + реген `yarn.lock` (single @smithy/signature-v4@5.3.11 deduped). Pushed victor/emspb.ru master `218c3ae..5afd8a1`. Endpoint fix `218c3ae` (s3.endpoint→minio.vds.kzntsv.site) в master с 2026-07-29, но в бегущем образе `95a5c42` (v2) его не было — v3 cutover заодно перевёл S3-direct read на vds minio. +- **Build на VDS:** `git archive 5afd8a1` → `~/build/emspb` → `docker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKEN` → `registry.kzntsv.site/emspb:5afd8a1`(+latest), digest `sha256:72bb59fc355d4f020fe49e1c410e6be411779ee1002d91cd4db7c3250f2c3358`, EXIT=0. `yarn install --immutable` в Docker прошёл (yarn.lock matches, no YN0028). +- **Staging :5082 parity-gate GREEN** (throwaway контейнер из env живого стека 18, 8 секретов, `--network proxy`): + - robots.txt md5 `940a0903…` byte-identical (31 B); sitemap index→`sitemap-pages-1.xml` **29 locs == live 29**. + - **29/29 sitemap-роутов 200/200, 0 status diffs**, content present (34-38 KB real bodies). Дельта **+2 B** = `localhost:5082` (14) vs `www.emspb.ru` (13) ×2 (canonical+og:url) — benign host-context, post-cutover byte-identical. + - **theme assets 7/7 md5 IDENTICAL** (v3 aws-sdk v3 S3-direct read из vds MinIO 2025): snolla-framework `5cb1031e…` 7529B, snolla-bootstrap `9a56500a…` 19624B, slick `e604b364…` 1183B, toolbox `382a2ccc…` 10215B, theme `e02370e3…` 5640B, images/2.jpg `0898d8df…` 387884B, **/images/3.jpg `48562843…` 115618B** (== runbook 2026-07-02 baseline). + - redirects parity: `/contacts/`→301→`/contacts`, `/Contacts`→301→lowercase, `/Portfolio`→301→lowercase, `/Services`→301 (target modulo host); `/index.php`+`/services`→404 parity. +- **Portainer PUT stack 18 LIVE:** node in-memory `put-stack` (НЕ PS — глобальный fetch, compose в JS-var без /tmp round-trip; GET `/stacks/18` для Env + `/stacks/18/file` для StackFileContent), env 8/8 preserved, `prune:false pullImage:true mem_limit 512m`. PUT 200. Контейнер `5afd8a1` healthy сразу (~1s). +- **Live smoke GREEN (via traefik):** `/` 200 54615B, `/contacts`+`/portfolio`+`/prices` 200, `/services`+`/index.php` 404, robots md5 `940a0903…`, sitemap 29 locs, theme assets md5 LIVE==staging (v3 S3-direct), redirects 301 (target `https://www.emspb.ru/...` — byte-identical post-cutover), apex `emspb.ru` 200. Лог чист (tedious deprecation + `emspb.ru (snolla) listening`). TLS не тронут. +- **Rollback:** `emspb:95a5c42` (0.42.1 v2, жив в registry) — Portainer PUT назад / compose revert. `b6e361a` (0.28.4) — deeper rollback. DNS→RUVDS 80.64.31.36 — крайний. +- Compose (admin source-of-truth) синхронно закоммичен `95a5c42`→`5afd8a1`. **5/6 v3 сайтов GREEN.** Остался: tandemmebel (стек 20 — был BLOCKED на sharp-staging визуальном дефекте, проверить перед бампом). diff --git a/.wiki/concepts/minio-split-cutover-runbook.md b/.wiki/concepts/minio-split-cutover-runbook.md index 81b2572..3ce2c33 100644 --- a/.wiki/concepts/minio-split-cutover-runbook.md +++ b/.wiki/concepts/minio-split-cutover-runbook.md @@ -35,7 +35,8 @@ updated: 2026-07-30 | **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. | | **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) — проверить перед бампом | +| **B3v3 emspb.ru** | ✅ LIVE 2026-07-30 | bump `@snollajs/snolla 0.42.1→0.43.2` + resolutions (commit `5afd8a1`, apps/web + root). Endpoint fix `218c3ae` в master, но в бегущем образе `95a5c42` (v2) его не было — v3 cutover заодно перевёл S3-direct read на vds minio. Build на VDS (archive → `~/build/emspb`) → `registry.kzntsv.site/emspb:5afd8a1`(+latest), digest `72bb59fc…`. Throwaway staging :5082 parity-gate GREEN: robots md5 identical (31B), sitemap 29 locs == live, 29/29 routes 200 (+2B host-context benign), theme assets 7/7 md5 IDENTICAL (v3 S3-direct: snolla-framework/bootstrap/toolbox/theme/slick + images/2.jpg + /images/3.jpg 115618B). Portainer PUT stack 18 env-preserving (8/8, node in-memory put-stack), `prune:false pullImage:true mem_limit 512m`. Live smoke GREEN: nav 200, /services+/index.php 404, theme assets md5 LIVE==staging, redirects 301 byte-identical post-cutover, apex 200. TLS не тронут. **Rollback = `95a5c42`** (v2, жив). См. [[emspb-vds-deploy-runbook]] §0.43.2. | +| B3 ostatся 1 сайт (tandemmebel) | ⏳ 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/emspb.compose.yml b/host-stacks/vds-kzntsv/emspb.compose.yml index 1926f7e..71cf137 100644 --- a/host-stacks/vds-kzntsv/emspb.compose.yml +++ b/host-stacks/vds-kzntsv/emspb.compose.yml @@ -25,7 +25,7 @@ services: emspb: container_name: emspb - image: registry.kzntsv.site/emspb:95a5c42 # git-sha victor/emspb.ru master (snolla 0.42.1, bump 2026-07-05; prev b6e361a=0.28.4=rollback) + image: registry.kzntsv.site/emspb:5afd8a1 # git-sha victor/emspb.ru master (snolla 0.43.2 v3 aws-sdk v2→v3, cutover 2026-07-30; prev 95a5c42=0.42.1 v2=rollback; b6e361a=0.28.4) 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: