on.snolla.com snolla-app live behind traefik on staging Host on-snolla.vds.kzntsv.site.
Image registry.kzntsv.site/on-snolla:473923e494db (snolla 0.42.1). Pending DNS cutover
(reg.ru on.snolla.com A 80.64.31.36 -> 89.253.255.94, then PUT rule -> Host(on.snolla.com)).
Co-Authored-By: Claude <noreply@anthropic.com>
DNS reg.ru flipped, traefik Host-rule staging->prod, LE cert issued.
Live-smoke GREEN: all pages 200, sitemap 184 locs, sharp media OK.
Gotham-Pro.css latent prod bug fixed by cutover (0B->4436B).
Snolla 0.42.x tirazh now fully alive (5/5 stacks on VDS).
Тираж snolla (labtools.ru/17, emspb/18, labtools.pro/19, tandemmebel/20,
kupimknigi/21) шёл без mem_limit → cgroup-cap = вся память хоста (12.9 GiB),
одна течь могла съесть весь бокс. Выставил 512m (baseline ~100-200M, 2.5-5x запас)
на всех 5 живых стеках через env-preserving Portainer PUT + синхронизировал
source-of-truth compose. Все healthy, limit=536870912 подтверждён, labtools.pro 200.
Конвенция «app-стек обязан нести mem_limit» закреплена в
portainer-stack-management-vds § Convention + step 6 snolla-bump-рецепта.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
[tandemmebel-deploy-snolla-0-42-0] 🟢 done. Собран на VDS, стек 20 healthy,
acceptance#1 SSR /projects→200, acceptance#2 completeness-DoD с VDS зелёный.
Cutover остаётся DNS-gated ([tandemmebel-web-vds-deploy]) — образ к флипу=ed96b18.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Ребилд по ops-таску workshop: образ tandemmebel:a173401 (snolla 0.35.0/core
0.16.0/data 0.13.0, digest 6962bd97) собран на VDS, стек 20 передеплоен через
Portainer API (env 8/8, healthy). FeedPages чинит роутинг gallery 404→200 (12/12).
RED на рендер-чеке: gallery-grid пустой на всех роутах (staging /galleries/*/images
= 0 vs prod 24/80/62), breadcrumb itemprop=name пустые. Корень — FeedPage-VM не
прокидывает item в шаблон. Деплой чист; фикс на прогере. Пропинговал с уликами.
Cutover HELD.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
DNS zone is on Yandex DNS (dns1/dns2.yandex.net), not reg.ru. Flip propagated
unevenly (dns2 first, dns1 lagged); cutover gate = BOTH authoritative Yandex NS
agree apex+www -> 89.253.255.94 (monitor waited for it) so LE HTTP-01 can't hit
RUVDS via a stale auth server and burn the rate-limit.
Stack 17 traefik-rule -> Host(labtools.ru)||Host(www.labtools.ru) via Portainer
PUT (env 8/8 preserved, pullImage=false). LE cert issued (~t+20s; brief self-signed
window during issuance). Live-smoke GREEN: both hosts 200 (nav+catalog+products),
redirects parity (trailing/lowercase/.php), sitemap index host=labtools.ru (this
tenant's siteUrl is non-www), theme assets byte-identical (RUVDS 301 apex->www made
the direct md5 an artifact; -L => MD5-OK). Staging host removed (->404). External:
apex->VDS 200; www still split-brain on RUVDS cache (200, identical content, TTL 6h).
RUVDS left intact as rollback.
Task closed. Whole batch done: labtools.ru + labtools.pro LIVE on VDS.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
DNS flip confirmed at authoritative ns1.reg.ru (Resolve-DnsName) + 8.8.8.8 ->
89.253.255.94 (labtools.pro/www; NOT labtools.ru). Earlier checks hit stale TTL
cache; authoritative NS was the truth.
Stack 19 traefik-rule -> Host(labtools.pro)||Host(www.labtools.pro) via Portainer
PUT (env 8/8 preserved, pullImage=false). LE cert issued instantly (ssl_verify=0).
Live-smoke GREEN: both hosts 200 (nav+catalog+products), redirects parity, sitemap
index host=www, real content (lang=en). Staging host removed (->404). External
check from RUVDS box: labtools.pro/www -> 89.253.255.94 HTTP 200 trusted cert.
RUVDS labtools.pro left intact as rollback.
Task closed.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4th layer fixed by peer (data 0.9.0->0.9.1). Rebuilt from 6c6d52d
(workspace Dockerfile + sharp @img copy), pushed from VDS, deployed stack 16.
Container smoke all 200: product title<=60 + meta 'доставка по СПб и ЛО';
/catalog/planken 'Планкен прямой и скошенный — купить в СПб'; products 200x3;
home/shipping/blog meta ok. stderr clean. Compose -> 6c6d52d.
Pending (cross-repo, needs push-ok): commit sharp Dockerfile + docker-deploy.md to monorepo.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
redeploy-pilonuxt-gsc-offers closed. Build workstation @37412d0 (verdaccio
build-secret) → push registry.kzntsv.site/pilonuxt:37412d0 → перекат Portainer
stack 16 (PUT API, PullImage). Acceptance: itemprop="offers" (price/currency/
availability/url) на странице товара, verified curl --resolve к VDS; меню+viewModel
200, без регрессии.
Попутно: registry.kzntsv.site зарегистрирован в Portainer (Custom Id 1) —
первый pull падал "no basic auth credentials" (Portainer не имел ни одного
registry; host docker login слетел). Теперь приватный registry авторизован
в Portainer постоянно.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
vitya флипнул DNS pilorama98.ru+www → 89.253.255.94. Перенастроил traefik
роутер на боевые хосты (apex+www+vds-subdomain, LE cert), снял smoke
GTM-override (прод-аналитика вкл), выкатил 125a3e2 (фикс Продукция→/catalog).
Финальный smoke с VDS по www.pilorama98.ru: все страницы page 200/viewModel
200, картинки 200 webp, x-powered-by Nuxt (не IIS), cert valid, битый
футер-линк убран. Форма закрыта (vitya ok + pilonuxt dev-verified).
Stack 16. Задача 🟢 closed. Follow-ups: decommission старого IIS после soak.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
pilonuxt deploy на vds-kzntsv за Traefik. Compose готов (proxy net,
websecure, certresolver letsEncrypt, Host pilonuxt.vds.kzntsv.site, :3000,
GTM погашен на smoke-поддомене). Домен согласован с vitya: temp-поддомен
для smoke, cutover www.pilorama98.ru — отдельным шагом.
Сборка диагностирована, образ НЕ собран — Dockerfile pilonuxt падает в
чистом контейнере (локально замаскировано глоб. yarnrc + сетью):
1. .yarnrc.yml без npmAlwaysAuth:true → YN0041 anonymous (whoami=vitya).
2. Dockerfile не копирует scripts/+src/generated до yarn install →
postinstall Cannot find module scripts/ensure-schema.mjs (YN0009).
По решению vitya сборка отдана pilonuxt (их репо/фикс), за admin — Portainer.
Inbox victor/pilonuxt отправлен с разбором. Задача 🔵 blocked до образа.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>