Files
admin/.tasks/NEXT_SESSION.md
vitya 50e263860d ops(on-snolla): rename site alias on->internal (admin at internal.snolla.com/admin)
- Sites.Alias+LoweredAlias on->internal (siteId B9ECDB50; PrimaryDomain on.snolla.com kept).
- Web.config primaryAlias on->internal (catch-all default-site; without it the whole
  catch-all NRE-500s on every request — primaryAlias references the renamed alias).
- hosts: on.snolla.com->internal.snolla.com under # snolla-local-admin marker.
- setup-local-snolla-admin.ps1 aliases array updated.
- runbook + NEXT_SESSION + memory updated.

VDS prod on.snolla.com unaffected (snolla-app uses config.siteId, not alias) — verified
byte-identical + smoke GREEN after rename. Incident: elevated hosts edit emptied hosts
to 0B (Get-Content -Raw returned null in RunAs context) — restored from Windows default
header + snolla-local-admin block. Memory snolla-catch-all-primaryalias-depends-on-alias.

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

7.3 KiB
Raw Blame History

_last_updated_, session_id, prev_session_id
_last_updated_ session_id prev_session_id
2026-07-20T11:50:00Z 2026-07-20-on-snolla-cutover-done 2026-07-20-snolla-local-admin-restore-done

Next session handoff

Эта сессия — Task B (on.snolla.com → VDS) DONE. Cutover завершён 2026-07-20.

on.snolla.com live на VDS как Node snolla-app @snollajs/snolla 0.42.1, за traefik, LE-серт issued. Прод-оракул был RUVDS IIS (80.64.31.36) — не тронут, жив (rollback = revert DNS).

🟢 [on-snolla-vds-migration] ЗАКРЫТА. Спека: .wiki/concepts/snolla-local-admin-and-on-snolla-migration-design.md §Task B. Runbook (as-built + gotchas): .wiki/concepts/on-snolla-vds-deploy-runbook.md. Таска: .tasks/on-snolla-vds-migration.md (as-built).

As-built

  • Репо victor/on.snolla.com (git.kzntsv.site, запушен) — структура-калька tandemmebel.ru. Commit 473923e494db.
  • Образ registry.kzntsv.site/on-snolla:473923e494db (+:latest), собран на VDS (обход traefik-499).
  • Стек Portainer 22 (on-snolla), mem_limit 512m, 8 env-секретов (переиспользованы из tandemmebel стека 20 — общая snolla-инфра), rule Host(on.snolla.com), LE-серт CN=on.snolla.com (YR1, until 2026-10-18).
  • DNS: reg.ru on.snolla.com A 80.64.31.3689.253.255.94 (operator flip; авторит. NS ns1/ns2.reg.ru verified → VDS before rule swap, LE-порядок соблюдён).
  • Реконструкция: views/layout.liquid = bootstraptor-лендинг byte-identical прод-HTML (28413 байт, verified direct diff + live). Content-поля пустые → лендинг baked в layout. Form "Join us" baked (POST / → snolla forms middleware → form_ajax_response.liquid). StaticPages /yandex_… + /4a052808276c.html. /c = 404 dead-link (parity с продом — prod /c тоже 404; snolla sitemap несёт его → 3/3 loc parity).
  • Completeness-gate GREEN: sitemap 3/3 parity {/,/c,/yandex}, homepage + /yandex byte-identical, 0 регрессий. Live-smoke external: TLS verify=0, /+/robots.txt+/sitemap.xml+/yandex=200, /c=404.

Гочи (в runbook + memory)

  • snolla robotsTxt крашится на undefined app.locals.domain — on.snolla.com не имеет row в MoreThenCms Domains. Фикс в apps/web/index.js: после initApp, если !app.locals.domain, synthesized {robotsTxt: site.robotsTxt}. Без shared-DB мутации. Memory snolla-robotstxt-crash-no-domains-row.
  • Form "Join us" не имеет Liquid form-tag — форма HTML baked в layout, POST — forms middleware (мэтч по Path /). Legacy reCAPTCHA v1 мертва — parity, не чиним.
  • Portainer JWT short-lived — в node-скрипте GET stack + GET file + PUT: jwt из GET-фазы протух к PUT (первый PUT 401). Re-auth прямо перед PUT.
  • hosts override на воркстейшне — Task A оставил 127.0.0.1 on.snolla.com в hosts. External verify прод-on.snolla.com = только через curl --resolve on.snolla.com:443:89.253.255.94.

MinIO upload-acceptance (ручной follow-up оператора — НЕ сделано)

Логин в админку on.snolla.com (на RUVDS .NET, /admin) → залить тест-ассет → проверить объект в minio.kzntsv.site bucket=assets. S3-провайдер был admin-self-test green на RUVDS; Web.config 1:1 → должно работать. Креды админа в MoreThenCms.dbo.Accounts (SQL-user snolla / SA pass mssql-vds/sa-password).

Recent commits (.admin)

  • 4c4d1938 feat(on-snolla): CUTOVER DONE — on.snolla.com live on VDS (stack 22, LE cert)
  • 6b5cb5fa feat(on-snolla): Portainer stack 22 source-of-truth (staging Host, mem_limit 512m, 8 env secrets)
  • 73ad7669 (projects-meta) close vehicles-loader-redeploy-per-group-rate-diff 🟢
  • 019f5bae (projects-meta) close on-snolla-vds-migration 🟢
  • (on.snolla.com repo) 473923e feat(on-snolla): scaffold snolla-app — byte-identical landing reconstruction

Open треки

Трек Готовность Entry-point
books-vds → vds-kzntsv консолидация оценено, не лезет по RAM/disk Решение за user.
MinIO upload-acceptance on.snolla (ручной) follow-up оператора Логин /admin (RUVDS) → тест-ассет → MinIO bucket=assets.

Спроси user'а

  • (нет pending-решений — Task B закрыт полностью)

Не делать (preemptive guards)

  • НЕ пушить без добла (Rule 4) — на эту сессию добл был ("разрешаю всё, погнали").
  • НЕ сжимать books на .94; НЕ netplan на vds-kzntsv.
  • hosts override активенinternal.snolla.com → 127.0.0.1 (локальный админ Task A; алиас on переименован в internal 2026-07-20). Боевой on.snolla.com (VDS) с воркстейшна — только через --resolve :443:89.253.255.94 или off-hosts. Публичного on.snolla.com/admin не существует (никогда не было) — админка только локальная: http://internal.snolla.com/admin.

Alias rename oninternal (2026-07-20, follow-up оператора)

  • Sites.Alias+LoweredAlias: oninternal (siteId B9ECDB50, PrimaryDomain остался on.snolla.com).
  • C:\sites\snolla\Web.config primaryAlias: oninternal (иначе catch-all NRE-500 на ВСЕХ запросах — primaryAlias ссылается на переименованный алиас).
  • hosts: on.snolla.cominternal.snolla.com под маркером # snolla-local-admin.
  • Инцидент: я обнулил hosts своей elevated-правкой (Get-Content -Raw в RunAs-контексте вернул пусто → Set-Content записал пусто). Восстановил: Windows default header + snolla-local-admin блок (с internal.snolla.com). LAN-DNS CMS-перехват через DNS-резолвер, не hosts → потерь нет. Урок в memory snolla-catch-all-primaryalias-depends-on-alias.
  • VDS prod on.snolla.com НЕ затронут (snolla-app использует config.siteId, не alias) — byte-identical, smoke GREEN.
  • НЕ откатывать DNS on.snolla.com без явного запроса — cutover LIVE, RUVDS IIS жив как rollback-target.

Memory updates за сессию

  • NEW snolla-robotstxt-crash-no-domains-row — snolla sites без Domains row крашатся на /robots.txt; фикс в index.js domain-drop fallback.
  • (candidate) on.snolla.com мигрирован на VDS 2026-07-20 (stack 22, LE). Тираж snolla на VDS: labtools(17)/emspb(18)/labtools-pro(19)/tandemmebel(20)/kupimknigi(21)/on-snolla(22).
  • (candidate) обновить entity windows-recovery-host.md: on.snolla.com более не обслуживается локальным IIS как прод — прод на VDS; локальный IIS snolla = только админ-хаб (hosts override on.snolla.com→127.0.0.1 теперь pointing на админ-копию, не прод).