Files
admin/.wiki/concepts/maljarka-vds-deploy-runbook.md
vitya 494b101067 feat(maljarka): restore maljarka.tandemmebel.ru as 7th snolla site on VDS (stack 23)
Сайт потерян при decomm RUVDS 2026-07-21 (.NET MoreThenCms tenant, не был в v3 тираже).
Восстановлен как Node snolla-app 0.43.2 на VDS: victor/maljarka.tandemmebel.ru @7f03d67,
layout.liquid byte-identical рендеру локального .NET-admin (43730B, sha256 match),
siteId A2476738, Reversal тема из MinIO. LE issued. Live smoke GREEN.

- host-stacks/vds-kzntsv/maljarka.compose.yml (source-of-truth, stack 23)
- .wiki/concepts/maljarka-vds-deploy-runbook.md (калька on-snolla runbook)
- .tasks/STATUS.md + .wiki/index.md updated
- тираж snolla теперь 7/7: labtools(17)/emspb(18)/labtools-pro(19)/tandemmebel(20)/kupimknigi(21)/on-snolla(22)/maljarka(23)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-31 06:15:29 +03:00

9.2 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 чист.

Гочи

  • 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.

Связанное