deploy(tandemmebel): 8df10ee LIVE — drop FB/Twitter/Google+ share buttons
In-place template bump на прод (stack 20): 0cd9351 → 8df10ee. fix(web) remove
FB/Twitter/Google+ share-кнопки (extremist-icon compliance РФ), keep VK+OK.
Template-only (apps/web/views/social_buttons.liquid, 1 file 12 delet), snolla pin
0.42.1 НЕ менялся.
Верификация перед сборкой поймала расхождение: tandemmebel-записка утверждала
live=ed96b18/0.42.0, фактически крутился 0cd9351/0.42.1 (in-place bump 2026-07-12).
gitea compare 0cd9351...8df10ee = total_commits:1 → фикс один коммит поверх 0.42.1
(правильная база), yarn.lock идентичен → регрессии sitemap нет.
Completeness-gate (staging :5020): sitemap NEW==PROD 184=184 identical, 0
регрессий. Live-smoke С VDS 4 share-block страницы (project-post ×2,
/furniture/bedrooms, /furniture/kitchens/classic) — vk+ok на месте, fb/tw/gp=0.
TLS-серт CN=tandemmebel.ru не дёрнут (in-place swap). Tandemmebel-сессия подтвердила.
- .tasks/STATUS.md: _Updated 2026-07-13 строка (deploy-результат + discrepancy)
- .wiki/concepts/tandemmebel-vds-deploy-runbook.md: секция In-place bump 8df10ee
(предсборочная верификация, build→staging→gate→swap, rollback, hygiene-заметка
про устаревшие STAGING-комменты в Portainer stack file)
- host-stacks/vds-kzntsv/tandemmebel.compose.yml: image 8df10ee + LIVE-комменты
+ история bump'ов (source-of-truth синхронен с Portainer)
Rollback: PUT стека 20 → 0cd9351 (0.42.1, {% order %} fix) / ed96b18 (0.42.0) /
b02ca18 в registry; ИЛИ revert DNS→80.64.31.36.
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
# Admin Task Board
|
||||
_Updated: 2026-07-13 — 🟢 **[tandemmebel-web-vds-deploy] in-place template bump 8df10ee LIVE.** Ops-handoff от tandemmebel-сессии (inbox-запрос): убрать FB/Twitter/Google+ share-кнопки (extremist-icon compliance РФ), оставить ВК+Одноклассники. Коммит `8df10ee` в `victor/tandemmebel.ru` master (template-only, `apps/web/views/social_buttons.liquid`, 1 file 12 deletions, snolla pin 0.42.1 НЕ менялся). **Верификация перед сборкой поймала расхождение:** записка утверждала live=`ed96b18`/0.42.0, фактически на проде крутился `0cd9351`/0.42.1 (in-place bump 2026-07-12). gitea compare `0cd9351...8df10ee` = `total_commits:1` → фикс ровно один коммит поверх 0.42.1 (правильная база), yarn.lock идентичен → регрессии sitemap 184→172 нет. Собрал `tandemmebel:8df10ee` на VDS (чистый архив 8df10ee из gitea API, build-arg VERDACCIO_TOKEN=books-ci JWT, digest `sha256:30a7e5ab82f2bf371042f1b5fa0cd7ac5ceda71379d1da59e148dee8166bd560`, layer-cache hit, push OK). Throwaway-staging :5020 → completeness-gate GREEN: sitemap NEW==PROD **184=184 identical** (0 prod-only/new-only), self-consistency 183×200+1×404(/articles benign parity staging==prod), share-block staging vk+ok/fb-tw-gp=0 vs prod-before vk+ok+fb+tw+gp (доказательство — фикс убирает ровно лишнее). Swap стека 20 (Portainer JWT, PUT `/api/stacks/20?endpointId=1`, env 8/8 preserve, `prune:false`, `pullImage:true`), контейнер healthy ~8s. **Live-smoke С VDS GREEN:** robots/`/`/sitemap 200, /articles 404 parity, sitemap 184 locs, 4 share-block страницы (project-post ×2, /furniture/bedrooms, /furniture/kitchens/classic) все 200 → **vk+ok на месте, fb/tw/gp=0** (экстремистские иконы УБРАНЫ с прода), TLS-серт CN=tandemmebel.ru не дёрнут (in-place swap). `/galleries/` нет на 0.42.1 (sitemap-реструктуризация 0.42.x → gallery рендерится на project-post роуте). Rollback = PUT стека 20 назад на `0cd9351` (0.42.1, {% order %} fix, template-only чистый откат) / `ed96b18` (0.42.0, в registry, стёрт с VDS при disk-cleanup 2026-07-13) / `b02ca18` / revert DNS→80.64.31.36. Source-of-truth compose `host-stacks/vds-kzntsv/tandemmebel.compose.yml` актуализирован (8df10ee + LIVE-комменты + история bump'ов). Hygiene-заметка: Portainer stack 20 file несёт устаревшие STAGING-комменты на строках 16-17/53 (rule line 55 уже LIVE) — косметика, не трогал при деплое. Ответ отправлен в tandemmebel inbox._
|
||||
_Updated: 2026-07-12 — 🟢 **[tandemmebel-web-vds-deploy] CUTOVER COMPLETE — LIVE на VDS.** Владелец флипанул DNS reg.ru `tandemmebel.ru`+`www`→89.253.255.94 (verify авторит. ns1/ns2.reg.ru = оба 89.253.255.94, не только резолвер). LE-порядок соблюдён: DNS first → traefik `Host()`-rule staging→боевой на стеке 20 (env 8/8 preserve, `prune:false`, `pullImage:false` — образ `ed96b18`/0.42.0 не менялся, без пересборки по решению оператора). LE-серт issued on first hit: CN=tandemmebel.ru, SAN оба, issuer YR2, until 2026-10-10. Live-smoke С VDS GREEN: `/`+`/projects`+3×gallery (office/bedrooms/kids)→200, `/articles`→404 (parity benign#3, так и на RUVDS), sitemap **184 page-locs** (было 172 — рост от blog-archive фичей 0.42.0, benign), self-consistency 30/30 sample (только /articles 404 = тот же parity), sharp media `image/webp 200 35KB`, robots из БД (ADR-0009). **Латентный прод-баг починен cutover'ом:** Gotham-Pro.css был 0B на RUVDS → теперь 200/4436B (шрифт заголовков живой). Rollback = revert DNS→80.64.31.36 (RUVDS IIS жив, не тронут) ИЛИ PUT стека 20 назад на `tandemmebel.vds.kzntsv.site`. Compose source-of-truth обновлён. Тираж snolla 0.42.x теперь **полностью живой** (5/5 стеков на VDS)._
|
||||
_Updated: 2026-07-04 (8) — 🟢 **[tandemmebel-web-vds-deploy] gallery-дефект ЗАКРЫТ на staging — GREEN.** Workshop прислал коррекцию sha → ребилд на `b02ca18` (core 0.16.2, SlugFeedPage-fix). Собрал `tandemmebel:b02ca18` (digest f8672218), передеплой стека 20 (env 8/8, healthy). DoD-чек **12/12 GREEN**: gallery-грид staging == prod ТОЧНО на всех роутах (bedrooms 80/80, kids 138/138, office 26/26 и т.д.). Крошки наполнены (`Главная/Мебель/Галерея идей`, были пустые), title полный (`Фото Офисная мебель…`), байты 28508≈прод 28253. Я флагал сомнение (мой DB-дамп показал: `/gallery` — конвенционный саб-роут, а не feed; SlugFeedPage-fix мог промахнуться) — но жёсткий рендер-чек показал GREEN, фикс сработал. **Cutover ОТЛОЖЕН оператором (не забыть!) — триггер запуска = владелец сайта меняет DNS reg.ru→89.253.255.94**, тогда verify авторит.NS→боевой Host в стек 20→live-smoke (порядок в [[NEXT_SESSION.md]]). Прогеру после разноса от оператора отправлен рабочий green-хендофф на свип 188 URL. RUVDS=rollback._
|
||||
_Updated: 2026-07-04 (7) — 🔵 **[tandemmebel-web-vds-deploy] дефект идентифицирован = gallery FeedPages-VM.** Workshop прислал ops-таск: ребилд стека 20 на `a173401` (FeedPages page-type портирован, чинит gallery 404→200). Гейт green (origin HEAD=a173401 ⊇ a173401+22bd8f2), собрал `tandemmebel:a173401` (snolla 0.35.0/core 0.16.0/data 0.13.0, digest 6962bd97), передеплоил стек 20 (Portainer API, env 8/8, healthy). Роутинг чинится: 12/12 furniture gallery-роутов 404→200. **НО рендер-чек RED — grid ПУСТОЙ на всех роутах** (staging `/galleries/*/images` = 0 vs prod 24/80/62) + **breadcrumb-подписи пустые** (`itemprop=name` без текста). Оба симптома = один корень: FeedPage-VM не прокидывает `item` в шаблон. Оператор дефект подтвердил независимо. Мой деплой чист; фикс на прогере (tandemmebel.ru). Пропинговал прогера с уликами (empty-grid + breadcrumb addendum) → ждёт новый sha, прогоню тот же DoD (staging_imgs==prod_imgs + непустые крошки). Cutover HELD. См. [[NEXT_SESSION.md]]._
|
||||
|
||||
@@ -65,6 +65,72 @@ order-парити секций НЕ применимо — см. 0.42.1 bump н
|
||||
- Тег `ed96b18` (0.42.0) в registry (+ `b02ca18`, 0.16.2-staging) → PUT стека 20 назад.
|
||||
- ИЛИ revert DNS → 80.64.31.36 (RUVDS IIS жив, не тронут — rollback всех мигрированных).
|
||||
|
||||
## In-place bump 2026-07-13: 0.42.1 → 0.42.1 (sha 0cd9351 → 8df10ee, template-only)
|
||||
|
||||
Ops-handoff от tandemmebel-сессии (inbox-запрос): убрать FB/Twitter/Google+ share-кнопки
|
||||
(экстремистистская символика РФ), оставить ВК+Одноклассники. Коммит `8df10ee` в `victor/tandemmebel.ru`
|
||||
master, меняет только `apps/web/views/social_buttons.liquid` (1 file, 12 deletions), snolla pin 0.42.1
|
||||
НЕ менялся → in-place bump на той же 0.42.1 (не консюмер-бамп).
|
||||
|
||||
### Предсборочная верификация (поймала расхождение)
|
||||
Записка от tandemmebel-сессии утверждала: «сейчас живой на стеке 20 — `ed96b18`/0.42.0». Фактически
|
||||
на проде крутился **`0cd9351`/0.42.1** (in-place bump 0.42.0→0.42.1 был 2026-07-12). Без проверки это
|
||||
не повлияло бы (см. ниже), но вслепую строить нельзя. Проверки С VDS + gitea API (токен `gitea/admin-token`):
|
||||
- `docker inspect tandemmebel` → `registry.kzntsv.site/tandemmebel:0cd9351`, healthy, started 2026-07-12.
|
||||
- gitea `compare/0cd9351...8df10ee` → `total_commits:1`: фикс ровно один коммит поверх 0.42.1 (правильная база).
|
||||
- `git show 8df10ee:apps/web/package.json` → `@snollajs/snolla: 0.42.1` (pin не менялся); yarn.lock snolla 0.42.1 /
|
||||
core 0.24.1 / liquid 0.10.2 / data 0.14.1 — идентично live 0cd9351.
|
||||
- `git show 8df10ee --stat` → только `apps/web/views/social_buttons.liquid` (modified).
|
||||
- 8df10ee full sha `8df10eedcba9979ac91dce2025b2ff827d60e808`, master HEAD = 8df10ee.
|
||||
|
||||
Если бы 8df10ee был на базе 0.42.0 (172 locs) → completeness-gate поймал бы регрессию 184→172. Он на 0.42.1 →
|
||||
parity 184=184.
|
||||
|
||||
### Build → staging → gate → swap
|
||||
1. **Build на VDS** из чистого архива `8df10ee` (gitea API `/archive/<fullsha>.tar.gz`, token- auth `oauth2:`-
|
||||
НЕ работает, `Authorization: token`-header на API endpoints работает; git clone по HTTPS фейлится даже
|
||||
с oauth2:token — gitea admin-token = API-only, не git-transport). Extract `--strip-components=1` в
|
||||
`~/build/tandemmebel-8df10ee`. `docker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKEN=<books-ci JWT>
|
||||
-t registry.kzntsv.site/tandemmebel:8df10ee -t .../tandemmebel:latest .` → digest
|
||||
`sha256:30a7e5ab82f2bf371042f1b5fa0cd7ac5ceda71379d1da59e148dee8166bd560`, layer-cache hit (package.json+
|
||||
yarn.lock идентичны 0cd9351), push OK.
|
||||
2. **Throwaway-staging :5020** из env живого контейнера (`docker inspect tandemmebel` → `.staging.env`,
|
||||
фильтр `^(HOSTNAME|PATH|NODE_VERSION|YARN_VERSION|HOME|PORT|NODE_ENV)=`). `docker run -d --name
|
||||
tandemmebel-staging --env-file .staging.env -p 127.0.0.1:5020:5000 .../tandemmebel:8df10ee` → healthy 8s.
|
||||
3. **Completeness-gate С VDS** — sitemapindex разворот. **Важно:** staging sitemapindex содержит АБСОЛЮТНЫЕ
|
||||
prod-URLs (siteUrl=prod в production.json) → sub-sitemaps надо фетчить со staging ПО ПУТЯМ
|
||||
(`http://127.0.0.1:5020/sitemap-pages-1.xml`), а не следовать абсолютным URL (иначе сравнишь PROD==PROD).
|
||||
- NEW==PROD locs: **184 = 184 IDENTICAL** (0 prod-only, 0 new-only).
|
||||
- self-consistency: 183×200 + 1×404 (`/articles` benign parity staging==prod).
|
||||
- share-block: staging vk+ok / fb-tw-gp=0 vs prod-before (0cd915 live ещё имел) vk+ok+fb+tw+gp —
|
||||
фикс убирает ровно лишнее, остальное не трогает.
|
||||
- GREEN = 0 регрессий.
|
||||
4. **Боевой swap** — Portainer JWT auth (`POST /api/auth` vitya/Pryakhin9-VDS-2026; API-key `ptr_*` даёт 401,
|
||||
workaround = JWT). GET `/api/stacks/20` (env 8/8) + `/api/stacks/20/file` (compose). Python urllib UTF-8
|
||||
(НЕ PS Invoke-RestMethod — gotcha кириллицы #9). Замена `tandemmebel:0cd9351`→`8df10ee` в StackFileContent
|
||||
(ровно 1 замена, traefik rule line не тронута). PUT `/api/stacks/20?endpointId=1` `{stackFileContent,
|
||||
env: <8 preserved>, prune:false, pullImage:true}` → HTTP 200. Контейнер 8df10ee+healthy ~8s.
|
||||
5. **Live-smoke С VDS** — robots/`/`/sitemap 200, /articles 404 parity, sitemap 184 locs, 4 share-block
|
||||
страницы (project-post ×2 `/projects/2011/...`, `/furniture/bedrooms`, `/furniture/kitchens/classic`) все
|
||||
200 → **vk+ok на месте, fb/tw/gp=0**. TLS-серт CN=tandemmebel.ru (LE YR2, until 2026-10-10) **не дёрнут**.
|
||||
`docker rm -f tandemmebel-staging`.
|
||||
|
||||
### Rollback (8df10ee)
|
||||
- **Образный (предпочт):** PUT стека 20 назад на `0cd9351` (0.42.1, {% order %} fix) — template-only фикс,
|
||||
откатится чисто. Тег в registry.
|
||||
- `ed96b18` (0.42.0) / `b02ca18` — в registry (ed96b18 стёрт с VDS при disk-cleanup 2026-07-13, `pullImage:true`
|
||||
дотянет из registry).
|
||||
- DNS: revert reg.ru → 80.64.31.36 (RUVDS IIS жив, не тронут).
|
||||
|
||||
### Hygiene-заметка
|
||||
Portainer stack 20 file несёт устаревшие STAGING-комменты (строки 16-17 «Домен: STAGING», 53
|
||||
«STAGING-RULE. Cutover: после flip DNS сменить на Host(...)») — но сама `traefik...rule` строка (55) уже LIVE
|
||||
(`Host(tandemmebel.ru) || Host(www.tandemmebel.ru)`, совпадает с label'ом живого контейнера). Косметика,
|
||||
функционально нейтральна. При деплое 8df10ee обновлён только image-line коммент; шапочные STAGING-комменты
|
||||
не трогались (минимальное изменение). Source-of-truth compose `host-stacks/vds-kzntsv/tandemmebel.compose.yml`
|
||||
актуализирован полностью (8df10ee + LIVE-комменты + история bump'ов). При следующем full-sync можно выровнять
|
||||
Portainer file под git-source.
|
||||
|
||||
## Гочи (специфичные)
|
||||
- **Блокер-паттерн консюмер-пина** — snolla-репо релизит версию, но консюмер-пин в tandemmebel-репо отстаёт. На 0.42.0 (2026-07-04) ждали dev-source; на 0.42.1 (2026-07-12) оператор сделал сам. Всегда byte-verify пин+yarn.lock+`ls-remote` перед build.
|
||||
- **`yarn install --immutable`** в Dockerfile — корневой `yarn.lock` обязан быть снапшотом целевого пина, иначе build падает на checksum-mismatch. Бамп = package.json + `yarn install` (обновляет lock) + commit обоих.
|
||||
|
||||
@@ -11,15 +11,19 @@
|
||||
# КОНТЕНТ+БЛОГ-ПОРТФОЛИО+category сайт, БЕЗ e-commerce каталога.
|
||||
#
|
||||
# Образ собирается АДМИНОМ на VDS из victor/tandemmebel.ru/deploy/Dockerfile (build-arg VERDACCIO_TOKEN,
|
||||
# @snollajs/* из verdaccio.kzntsv.site). Тег = git-sha монорепы tandemmebel.ru (ed96b18).
|
||||
# @snollajs/* из verdaccio.kzntsv.site). Тег = git-sha монорепы tandemmebel.ru (текущий 8df10ee).
|
||||
#
|
||||
# Домен: LIVE — tandemmebel.ru / www.tandemmebel.ru (cert LE HTTP-01, SAN оба, issued 2026-07-12).
|
||||
# Cutover завершён 2026-07-12: DNS reg.ru → 89.253.255.94 подтверждён на ns1/ns2.reg.ru →
|
||||
# traefik Host-rule staging→боевой (LE-порядок соблюдён), LE-серт issued on first hit.
|
||||
# In-place bump 2026-07-12: 0.42.0→0.42.1 (order-tag Drop-field fix), completeness-gate 184/184 parity GREEN.
|
||||
# In-place bump 2026-07-13: 0.42.1→0.42.1 (template-only, sha 0cd9351→8df10ee): remove FB/Twitter/Google+ share
|
||||
# buttons (extremist-icon compliance), keep VK+OK. Completeness-gate 184/184 parity GREEN, live-smoke 4
|
||||
# share-block pages vk+ok present / fb/tw/gp=0, TLS-серт не дёрнут. Same snolla 0.42.1 base, only
|
||||
# apps/web/views/social_buttons.liquid changed (1 file, 12 deletions).
|
||||
# Предыстория: жил на RUVDS IIS (80.64.31.36) до 2026-07-12.
|
||||
# План отката = revert DNS → 80.64.31.36 (RUVDS IIS жив, не тронут) ИЛИ PUT стека назад на
|
||||
# Host(`tandemmebel.vds.kzntsv.site`) + тег ed96b18 (0.42.0). Образ 0cd9351 (0.42.1) — latest; ed96b18 + b02ca18 (rollback-теги) тоже.
|
||||
# План отката = revert DNS → 80.64.31.36 (RUVDS IIS жив, не тронут) ИЛИ PUT стека 20 назад на тег
|
||||
# 0cd9351 (0.42.1, {% order %} fix) / ed96b18 (0.42.0) / b02ca18 (rollback-теги в registry). Образ 8df10ee — latest.
|
||||
#
|
||||
# Runtime egress (наружу из proxy-сети): mssql.kzntsv.site:1433, minio.kzntsv.site:443
|
||||
# (оригиналы + запись вариантов в bucket variant-cache), smtp.yandex.ru:465. imgproxy НЕ нужен (sharp in-process).
|
||||
@@ -32,7 +36,7 @@
|
||||
services:
|
||||
tandemmebel:
|
||||
container_name: tandemmebel
|
||||
image: registry.kzntsv.site/tandemmebel:0cd9351 # git-sha victor/tandemmebel.ru master (snolla 0.42.1 / core 0.24.1 / liquid 0.10.2 / data 0.14.1 — {% order %} Drop-field fix; in-place bump 2026-07-12). rollback-тег ed96b18 (0.42.0) + b02ca18 в registry.
|
||||
image: registry.kzntsv.site/tandemmebel:8df10ee # git-sha victor/tandemmebel.ru master 8df10ee (snolla 0.42.1 / core 0.24.1 / liquid 0.10.2 / data 0.14.1 — template-only: remove FB/Twitter/Google+ share buttons, keep VK+OK; in-place bump 2026-07-13). rollback-теги 0cd9351 (0.42.1, {% order %} Drop-field fix) + ed96b18 (0.42.0) + b02ca18 в registry.
|
||||
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:
|
||||
|
||||
Reference in New Issue
Block a user