feat(labtools): v3 cutover LIVE — snolla 0.42.1→0.43.2 (aws-sdk v2→v3)

3rd site of v3 тираж (after on-snolla + kupimknigi, 3/6 GREEN).
Bump 0dc0b4e: apps/web snolla→0.43.2 + resolutions (root). Endpoint fix
4f3314f (minio.vds.kzntsv.site) was in master but not in running v2 image
566d41c — v3 cutover also moved S3-direct read to vds minio.

Staging :5080 parity-gate GREEN (home/theme byte-identical, sitemap 38
locs == live, order-parity). Portainer PUT stack 17 env-preserving 8/8,
mem_limit 512m, prune:false pullImage:true. Live smoke GREEN, TLS untouched.
Rollback = 566d41c (v2, in registry).

Compose source-of-truth 566d41c→0dc0b4e. Runbook + handoff updated.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-07-30 17:19:26 +03:00
parent 7795fa4dee
commit 387560c9f8
4 changed files with 34 additions and 13 deletions

View File

@@ -1,14 +1,25 @@
---
_last_updated_: 2026-07-30T13:05:00Z
session_id: 2026-07-30-kupimknigi-v3-cutover
prev_session_id: 2026-07-30-on-snolla-v3-cutover
_last_updated_: 2026-07-30T14:30:00Z
session_id: 2026-07-30-labtools-v3-cutover
prev_session_id: 2026-07-30-kupimknigi-v3-cutover
---
# Next session handoff
## Предыдущая сессия — on.snolla.com v3 cutover (конечная цель). ЗАВЕРШЁН ✅
## Предыдущая сессия — kupimknigi.spb.ru v3 cutover. ЗАВЕРШЁН ✅
## Эта сессия — kupimknigi.spb.ru v3 cutover. ЗАВЕРШЁН ✅
## Эта сессия — labtools.ru v3 cutover. ЗАВЕРШЁН ✅
Третий сайт тиража (после on-snolla + kupimknigi). Тот же паттерн, отработан чисто. 3/6 GREEN.
### Что сделано
- **Bump:** `@snollajs/snolla 0.42.1→0.43.2` в `apps/web/package.json` + resolutions-блок в root `package.json` (commit `0dc0b4e`, pushed victor/labtools.ru master). yarn install: single `@smithy/signature-v4@5.3.11` (deduped). Endpoint fix `4f3314f` (s3.endpoint→minio.vds.kzntsv.site) был в master с 2026-07-29, но в бегущем образе `566d41c` (v2) его не было — v3 cutover заодно перевёл S3-direct read на vds minio.
- **Build на VDS:** `git archive 0dc0b4e``~/build/labtools``docker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKEN``registry.kzntsv.site/labtools:0dc0b4e` (+latest), EXIT=0.
- **Staging :5080 parity-gate GREEN:** throwaway контейнер из env живого стека 17 (8 секретов). `/` byte-identical с real Host (18594B), theme asset `lato.css` 200 9239B byte-identical (v3 aws-sdk v3 S3-direct read из vds MinIO 2025), robots 200/200, sitemap = index 38 page-locs == live (identical set, 0 diff), self-consistency 0 bad (все 200/3xx), catalog section `/products/accessories` byte-identical (order-parity ✅).
- **Portainer PUT stack 17 LIVE:** node in-memory `put-stack` (НЕ PS), env 8/8 preserved, `mem_limit 512m` уже в compose, `prune:false pullImage:true`. PUT 200. Контейнер `0dc0b4e` healthy сразу. Source-of-truth compose синхронно закоммичен (admin).
- **Live smoke GREEN:** `/` 200, www 200, robots/sitemap 200, menu pages (about/clients/contacts/cookie/privacy) 200, `/products/press-forms`+`/products/accessories`+`/products/laboratory-ball-mills` 200, theme `lato.css` 200 9239B (v3 S3-direct). TLS CN=labtools.ru не тронут (LE до Sep 30). `/products` (bare)+`/products/presses`→404 = ожидаемо (не в sitemap; real section = `/products/press-forms`). **Rollback = `566d41c`** (v2 0.42.1, жив в registry).
## Предыдущая сессия — kupimknigi.spb.ru v3 cutover. ЗАВЕРШЁН ✅
Второй сайт тиража (после on-snolla пилота). Тот же паттерн, отработан чисто.
@@ -20,8 +31,6 @@ prev_session_id: 2026-07-30-on-snolla-v3-cutover
- **Live smoke GREEN:** `/` 200 17708 B, H1 «Скупка книг на дому в СПб…», robots/sitemap 200, `/callback-order/`→301, theme asset 200 35799 B. Контейнер `5364353` healthy. TLS LE до Oct 3 (не тронут). **Rollback = `9608ff6`** (v2, жив в registry).
- **Bundles a83e2a9 endpoint fix** (minio.kzntsv.site→minio.vds.kzntsv.site) — был в репо с 2026-07-29, но в бегущем образе 9608ff6 его не было; v3 cutover заодно перевёл S3-direct read на vds minio.
## Предыдущая сессия — on.snolla.com v3 cutover (конечная цель). ЗАВЕРШЁН ✅
User разворот 2026-07-30: v3 (aws-sdk v2→v3) — **конечная цель**, v2-пилот был промежуточным
доказательством. on.snolla.com = v3-пилот. Скоординировано с snolla-сессией (peer, inter-session):
snolla опубликовала v3, admin зарезал боевой cutover.
@@ -63,15 +72,17 @@ snolla опубликовала v3, admin зарезал боевой cutover.
## Open треки
| Трек | Готовность | Entry-point |
|---|---|---|
| **B3 v3 — kupimknigi** | ✅ LIVE 2026-07-30 | эта сессия — см. ↑ §Эта сессия |
| **B3 v3 — остальные 4 сайта** (labtools/labtools.pro/emspb/tandemmebel) | ⏳ TODO — v3-паттерн отработан на on-snolla + kupimknigi (2 GREEN) | `.wiki/concepts/minio-split-cutover-runbook.md` §B3-v3 + `on-snolla-vds-deploy-runbook.md` In-place bumps |
| **B3 v3 — labtools.ru** | ✅ LIVE 2026-07-30 | эта сессия — см. ↑ §Эта сессия |
| **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` |
| 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** (user выбрал 2026-07-30, конец сессии — НЕ начат, работа в следующей сессии). Паттерн: bump `@snollajs/snolla→0.43.2` + resolutions (optional) → build на VDS → staging :50XX parity-gate → Portainer PUT env-preserving. labtools.ru = стек 17. Сосед labtools.pro = стек 19 (возможно общий кодбейс — проверить, можно парой). tandemmebel был BLOCKED (sharp-staging дефект) — проверить перед бампом. kupimknigi + on-snolla GREEN (2/6).
- **Следующий сайт тиража v3** — 3/6 GREEN (on-snolla, kupimknigi, labtools.ru). Остались: **labtools.pro** (стек 19, возможно общий кодбейс с 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.
- stostayer v3-трек (0.43.1/0.7.8/0.17.2) — HOLD, snolla-scope, НЕ подхватывать без GO user (snolla ждёт stostayer-specific).
## Не делать (preemptive guards)

View File

@@ -3,7 +3,7 @@ title: labtools.ru snolla-app — VDS deploy runbook (stack / traefik / env / cu
type: concept
tags: [labtools, snolla, vds, deploy, docker, portainer, traefik, runbook, migration]
related: [[../entities/vds-kzntsv]], [[../entities/ruvds-iis-host]], [[portainer-stack-management-vds]], [[minio-imgproxy-on-vds]], [[snolla-live-prod-inplace-image-bump]]
updated: 2026-07-05
updated: 2026-07-30
---
# labtools.ru → VDS deploy runbook
@@ -79,3 +79,12 @@ PORT — не переопределять (образ дефолтит 5000; EX
- **Swap:** Portainer PUT стека 17 (env 8/8 сохранён, pullImage=true) → healthy → live-smoke GREEN, TLS CN=labtools.ru не тронут (без LE-churn).
- **Rollback:** тег `labtools:43e28ba` (0.28.2, в registry) / стек 17 PUT назад / DNS→RUVDS.
- Compose обновлён на `566d41c`. Таска `[labtools-ru-deploy-snolla-0-42-1]` 🟢. Notify=victor/labtools.ru.
## 0.43.2 v3 bump (aws-sdk v2→v3) — ✅ ВЫПОЛНЕН 2026-07-30
Тираж v3 (MinIO split Track B3-v3, 3-й сайт после on-snolla + kupimknigi). Домен на VDS, DNS не трогали.
Рецепт — [[snolla-live-prod-inplace-image-bump]] + [[minio-split-cutover-runbook]] §B3-v3.
- **Bump:** `@snollajs/snolla 0.42.1→0.43.2` в `apps/web/package.json` + `resolutions`-блок в root `package.json` (commit `0dc0b4e`, pushed victor/labtools.ru master). yarn install: single `@smithy/signature-v4@5.3.11` (deduped). Endpoint fix `4f3314f` (s3.endpoint→minio.vds.kzntsv.site) был в master с 2026-07-29, но в бегущем образе `566d41c` (v2) его не было — v3 cutover заодно перевёл S3-direct read на vds minio.
- **Build на VDS:** `git archive 0dc0b4e``~/build/labtools``docker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKEN``registry.kzntsv.site/labtools:0dc0b4e`(+latest), EXIT=0.
- **Throwaway staging :5080 parity-gate GREEN** (из env живого стека 17, 8 секретов): `/` byte-identical с real Host (18594B), theme asset `lato.css` 200 9239B byte-identical (v3 aws-sdk v3 S3-direct read из vds MinIO 2025), robots 200/200, sitemap = index 38 page-locs == live (identical set, 0 diff), self-consistency 0 bad (все 200/3xx), catalog section `/products/accessories` byte-identical (order-parity ✅).
- **Portainer PUT stack 17 LIVE:** node in-memory `put-stack` (НЕ PS), env 8/8 preserved, `mem_limit 512m` уже в compose, `prune:false pullImage:true`. PUT 200. Контейнер `0dc0b4e` healthy сразу. Source-of-truth compose синхронно закоммичен (admin).
- **Live smoke GREEN:** `/` 200, www 200, robots/sitemap 200, menu pages (about/clients/contacts/cookie/privacy) 200, `/products/press-forms` + `/products/accessories` + `/products/laboratory-ball-mills` 200, theme `lato.css` 200 9239B (v3 S3-direct). TLS CN=labtools.ru не тронут (LE до Sep 30). `/products` (bare) + `/products/presses` → 404 = ожидаемо (не в sitemap, не real pages; real section = `/products/press-forms`). **Rollback = `566d41c`** (v2 0.42.1, жив в registry).

View File

@@ -33,7 +33,8 @@ updated: 2026-07-30
| **B3 on-snolla v2-пилот (S3-direct-path)** | ✅ LIVE 2026-07-30 | in-place bump стека 22 `473923e494db→07db7e3` (snolla 0.42.1 v2, config endpoint → minio.vds.kzntsv.site, без бампа package.json). Theme-assets `/themes/c406…/…` → 200 97324 B == live (aws-sdk v2 → vds minio 2025 — compat подтверждена, главный риск закрыт). Sitemap 3/3 parity, `/c` 404 parity. Rollback-тег `473923e494db` в registry. **Промежуточный** шаг — v2 совместим, но v3 — конечная цель (user 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). |
| B3 остальные 4 сайта (tandemmebel/labtools/labtools.pro/emspb) | ⏳ TODO | тот же паттерн (bump @snollajs/snolla→0.43.2 + **resolutions** + rebuild). tandemmebel BLOCKED (визуальный дефект sharp-staging) — проверить перед бампом |
| **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) — проверить перед бампом |
| 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 |

View File

@@ -24,7 +24,7 @@
services:
labtools:
container_name: labtools
image: registry.kzntsv.site/labtools:566d41c # git-sha victor/labtools.ru master (snolla 0.42.1, bump 2026-07-05; prev 43e28ba=0.28.2=rollback)
image: registry.kzntsv.site/labtools:0dc0b4e # git-sha victor/labtools.ru master (snolla 0.43.2 v3 aws-sdk v2→v3, bump 2026-07-30; prev 566d41c=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: