Files
admin/.wiki/concepts/maljarka-vds-deploy-runbook.md
vitya d82361d16d fix(minio-split): create variant-cache bucket on vds 2025 — sharp gallery-images 500 across all v3 sites
v3 minio-split перевёл snolla-сайты на minio.vds.kzntsv.site (2025), но variant-cache
bucket не создали там (был на books-vds 2020). snolla sharp-pipeline (variantCache.js
DEFAULT_NAMESPACE=variant-cache, storage.js bucket=storageClient) → NoSuchBucket → 500
на ALL sharp gallery-images всех 6 v3 сайтов с 2026-07-30. v3-gate не поймал: проверял
theme CSS (themes bucket, themeFiles — без sharp), не gallery-image URLs. Заметно на
maljarka portfolio (35 фото). Fix: mc mb vds/variant-cache (пустой, кэш регенерируем).
maljarka portfolio 34/34 → 200 image/webp, tandemmebel logs NoSuchBucket ушли.

- .tasks/STATUS.md + maljarka runbook §Гочи + minio-split-cutover-runbook Track A note
- memory variant-cache-bucket-missing-on-vds-2025

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-31 09:20:13 +03:00

10 KiB
Raw Blame History

title, type, tags, related, updated
title type tags related updated
maljarka.tandemmebel.ru snolla-app — VDS deploy runbook (restore 2026-07-31) concept
maljarka
tandemmebel
snolla
vds
deploy
docker
portainer
traefik
runbook
migration
landing
ruvds-decomm
../entities/vds-kzntsv
on-snolla-vds-deploy-runbook
tandemmebel-vds-deploy-runbook
morethencms-null-settingsdata-https-502
snolla-local-admin-and-on-snolla-migration-design
2026-07-31

maljarka.tandemmebel.ru → VDS deploy runbook (restore)

Восстановление лендинга maljarka.tandemmebel.ru («Малярка от Тандеммебель», snolla-app @snollajs/snolla 0.43.2 / aws-sdk v3, server-side Liquid) — 7-й сайт тиража snolla на VDS. Паттерн = on-snolla-vds-deploy-runbook (прецедент: тоже лендинг с RUVDS catch-all origin, 1 Page / + empty content + StaticPages, реконструкция layout.liquid).

Почему восстанавливали (root cause)

maljarka была .NET MoreThenCms tenant (тема «Reversal», siteId A2476738-E26C-49D5-95AD-958F42DCCDD0), служила на RUVDS IIS catch-all (80.64.31.36). В v3 тираж (6 Node snolla-app сайтов, 2026-07-30) не входила — осталась на RUVDS. RUVDS декоммишнен 2026-07-21 (../entities/ruvds-iis-host §DECOMM, погашен у провайдера) → maljarka потеряла единственный публичный хост. DNS перебросили на VDS (CNAME → tandemmebel.ru89.253.255.94), но Host()-правила и snolla-app с siteId A2476738 на VDS не было → traefik 404. Аудит 21.07 «maljarka VDS=200» = false-positive с локального IIS воркстейшна (local .NET-admin catch-all поднят 20.07, LAN-DNS отдавал его; memory workstation-lan-dns-serves-local-cms-copy). Контент в shared MoreThenCms DB (mssql.kzntsv.site) остался цел — восстанавливаемо.

Артефакты

  • Код: victor/maljarka.tandemmebel.ru @ 7f03d67 (apps/web, snolla 0.43.2). Клон victor/on.snolla.com (lean-база: 4 view-файла, root package.json v3 resolutions). deploy/Dockerfile (multi-stage node:22-slim, yarn install --immutable, non-root, healthcheck /robots.txt).
  • Образ: registry.kzntsv.site/maljarka:7f03d67 (+:latest), digest sha256:df4e3642…. Имя maljarka (= стек/контейнер). Собран НА VDS (обход traefik-499).
  • Стек Portainer: maljarka (Id 23, endpoint 1). Source-of-truth compose: admin/host-stacks/vds-kzntsv/maljarka.compose.yml.
  • siteId: A2476738-E26C-49D5-95AD-958F42DCCDD0 (non-secret, в production.json + default.json).
  • siteUrl: https://maljarka.tandemmebel.ru.
  • Runtime env (8 секретов): DB_USER DB_PASSWORD IMGPROXY_KEY IMGPROXY_SALT S3_ACCESS_KEY_ID S3_SECRET_ACCESS_KEY SMTP_USER SMTP_PASSWORD — Portainer stack env (переиспользованы verbatim из tandemmebel стека 20 — общая snolla-инфра). НЕ в образе, НЕ в git.
  • mem_limit: 512m.

Site model (MoreThenCms DB, siteId A2476738)

  • 5 Pages (intro/services/portfolio/about/contacts), но Published=true только / (content пуст — лендинг baked в теме) → sitemap = 1 loc /.
  • 4 StaticPages (all published, sitemap=false): /index.html (18401B), /portfolio-single.html (1336B), /portfolio-single-gallery.html (1567B), /portfolio-single-video.html (822B) — отдаются snolla из DB verbatim.
  • 2 Domains rows (→ robotsTxt-гоча НЕ applies, app.locals.domain set; index.js null-guard остался как defensive).
  • SettingsData httpSecure блок на месте (fix 2026-06-08, morethencms-null-settingsdata-https-502).
  • Тема «Reversal» 4881FC7F → MinIO bucket themes prefix 4881fc7f52034f8eb371fe5637b1cce1/ (78 файлов, УЖЕ была в MinIO — заливать не понадобилось).

Реконструкция шаблонов

  • views/layout.liquid = byte-identical рендеру локального .NET-admin (curl --noproxy '*' --resolve maljarka.tandemmebel.ru:80:127.0.0.1, 43730B). {{ item.content }} вставлен inline после последней </section> (content пуст → empty output → byte-parity сохранён).
  • error_404.liquid / error_500.liquid — Reversal-тема + maljarka-бренд (вместо on.snolla SNOLLA-бренда).
  • Источник реконструкции = локальный catch-all IIS snolla (snolla-local-admin-and-on-snolla-migration-design §Task A) — тот же MoreThenCms DB + та же тема.

Deploy 2026-07-31 (DNS уже на VDS — без DNS-flip-шага)

  1. Репо: victor/maljarka.tandemmebel.ru создан на gitea (API, admin-token). Клон on.snolla.com → swap production.json (siteId A2476738, siteUrl, appName) + package names → yarn install (regen lockfile под переименованный workspace) → push. SHA ebebe4e7f03d67 (lockfile).
  2. Build на VDS: git archive 7f03d67 → scp → ~/build/maljarkadocker build -f deploy/Dockerfile --build-arg VERDACCIO_TOKEN=<vitya JWT>registry.kzntsv.site/maljarka:7f03d67(+latest). Guard: config/default.json ABSENT в архиве (.dockerignore), snolla 0.43.2, yarn install --immutable GREEN (lockfile перегенерён под maljarka workspace). Push OK.
  3. Throwaway-staging :5081 из env live tandemmebel-контейнера (8 секретов, --network proxy). Healthy. Completeness-gate С VDS GREEN: / byte-identical oracle (sha256 64011be6…, 43730B), robots 200, sitemap-pages-1 1 loc / (+ пустой blog-index — benign parity, как on-snolla /c), 4 staticpages 200 (sizes == DB clen), theme asset bootstrap.min.css 200 103320B (MinIO Reversal подтверждена), unpublished /about/services/contacts/intro → 404 (parity). 0 регрессий.
  4. Portainer стек 23 создан node-скриптом create-maljarka-stack.mjs (JWT auth, НЕ PS — кириллица compose; memory ps51-iso8851-corrupts-portainer-stackfile), env 8/8, mem_limit 512m, Host(\maljarka.tandemmebel.ru`). DNS уже 89.253.255.94` → LE-серт issued on first hit: CN=maljarka.tandemmebel.ru, issuer YR1, until 2026-10-29.
  5. Live smoke GREEN: / 200 43730B byte-identical, <title>Малярка от Тандеммебель</title>, 4 staticpages 200 (sizes == DB), theme asset 200, robots/sitemap 200, TLS LE. Log чист.

Гочи

  • variant-cache bucket на vds MinIO 2025 (КРИТИЧНО, shared v3-регрессия) — v3 minio-split перевёл сайты на minio.vds.kzntsv.site, но variant-cache bucket не создали там (был на старом minio.kzntsv.site/books-vds 2020). snolla sharp-pipeline (variantCache.js DEFAULT_NAMESPACE='variant-cache', storage.js: bucket=storageClient) → NoSuchBucket → 500 на ALL sharp gallery-images (не только maljarka — на всех 6 v3 сайтах с 2026-07-30). Заметно на maljarka-портфолио (35 фото). v3-gate не поймал т.к. проверял theme CSS (themes bucket, themeFiles — без sharp), не gallery-image URLs. Fix 2026-07-31: mc mb vds/variant-cache (пустой, кэш регенерируем — миграция старых entries НЕ нужна). После: portfolio 34/34 → 200 image/webp. См. minio-split-cutover-runbook Track A + memory variant-cache-bucket-missing-on-vds-2025.
  • yarn.lock workspace-rename — переименование root package (on.snolla.commaljarka.tandemmebel.ru) и apps/web name (@on-snolla/web@maljarka/web) требует regen yarn.lock, иначе yarn install --immutable падает (lockfile ссылается старые workspace-дескрипторы). Fix: yarn install локально под vitya JWT → commit обновлённого lockfile.
  • workstation-curl отравлен локальным HTTP-прокси--resolve игнорируется прокси (CONNECT), обе пробы уходят на VDS. External verify prod-maljarka с воркстейшна = только через VDS-ssh curl (или curl --resolve :443:89.253.255.94 --noproxy, но прокси всё равно может перехватить). Локальный IIS-рендер для реконструкции — через --noproxy '*' --resolve :80:127.0.0.1.
  • hosts override на воркстейшне — Task A оставил hosts-override для .snolla.com (НЕ maljarka), но local IIS *:80 catch-all + LAN-DNS могут перехватить. Оракул-рендер снимался явно через 127.0.0.1.
  • robotsTxt-гоча НЕ appliesу maljarka 2 Domains rows (app.locals.domain set). index.js null-guard (из on.snolla) остался как defensive, не вредит.
  • RUVDS DECOMM — rollback только образ-тегом в registry, НЕ DNS (RUVDS погашен 2026-07-21).

Rollback

  • Образный: PUT стека 23 назад на предыдущий тег в registry. С первого deploy ведём rollback-теги (пока только 7f03d67 = :latest).
  • DNS-rollback НЕ доступен (RUVDS DECOMM).
  • Если layout сломан: revert Host-правила (вернёт 404) ИЛИ поправить layout.liquid + rebuild.

Связанное