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>
This commit is contained in:
vitya
2026-07-20 13:33:09 +03:00
parent bec7784ffa
commit 50e263860d
3 changed files with 16 additions and 3 deletions

View File

@@ -51,7 +51,14 @@ Runbook (as-built + gotchas): `.wiki/concepts/on-snolla-vds-deploy-runbook.md`.
## Не делать (preemptive guards) ## Не делать (preemptive guards)
- **НЕ пушить без добла** (Rule 4) — на эту сессию добл был ("разрешаю всё, погнали"). - **НЕ пушить без добла** (Rule 4) — на эту сессию добл был ("разрешаю всё, погнали").
- **НЕ сжимать** books на .94; **НЕ netplan** на vds-kzntsv. - **НЕ сжимать** books на .94; **НЕ netplan** на vds-kzntsv.
- **hosts override активен** — `on.snolla.com` → 127.0.0.1 (локальный админ Task A). Боевой on.snolla.com (VDS) с воркстейшна — только через `--resolve :443:89.253.255.94` или off-hosts. - **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 `on`→`internal` (2026-07-20, follow-up оператора)
- `Sites.Alias`+`LoweredAlias`: `on``internal` (siteId B9ECDB50, PrimaryDomain остался `on.snolla.com`).
- `C:\sites\snolla\Web.config` `primaryAlias`: `on``internal` (иначе catch-all NRE-500 на ВСЕХ запросах — primaryAlias ссылается на переименованный алиас).
- hosts: `on.snolla.com``internal.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. - **НЕ откатывать DNS on.snolla.com** без явного запроса — cutover LIVE, RUVDS IIS жив как rollback-target.
## Memory updates за сессию ## Memory updates за сессию

View File

@@ -36,7 +36,13 @@ Culture `en`. Спека: [[snolla-local-admin-and-on-snolla-migration-design]]
- `/c`**404** (stale dead-link в .NET sitemap; snolla-app sitemap тоже его несёт → parity `/`+`/c`+`/yandex`). - `/c`**404** (stale dead-link в .NET sitemap; snolla-app sitemap тоже его несёт → parity `/`+`/c`+`/yandex`).
- Theme assets `/themes/c406a987ebe14244b0eefe7b8f959a6f/{css,js,images}/*` — из MinIO bucket `themes` (snolla - Theme assets `/themes/c406a987ebe14244b0eefe7b8f959a6f/{css,js,images}/*` — из MinIO bucket `themes` (snolla
`themeFiles` middleware; пути literal в `layout.liquid`). `themeFiles` middleware; пути literal в `layout.liquid`).
- `/admin` остаётся на RUVDS .NET — НЕ часть этого snolla-app. - `/admin` **публичного `on.snolla.com/admin` не существует** (никогда не было: RUVDS catch-all IIS не
маршрутизировал /admin на публичном on.snolla.com — cert на 80.64.31.36:443 SNI on.snolla.com = чужой
`CN=kupimknigi.spb.ru`, /admin → 404). Админка — только **локальный catch-all IIS `snolla`** (Task A,
воркстейшн). Site alias переименован `on``internal` (2026-07-20), доступ = `http://internal.snolla.com/admin`
через hosts override → 127.0.0.1 → 302→login. **Web.config `primaryAlias`** тоже обновлён `on``internal`
(default-site resolution; иначе catch-all NRE-500 на ВСЕХ запросах — primaryAlias ссылается на алиас,
переименование сайта без обновления primaryAlias ломает весь catch-all). НЕ часть snolla-app.
## Cutover 2026-07-20 (первый вынос на VDS — DNS-gated) ## Cutover 2026-07-20 (первый вынос на VDS — DNS-gated)
1. **Build на VDS** (archive `473923e494db``~/build/on-snolla` → `docker build -f deploy/Dockerfile 1. **Build на VDS** (archive `473923e494db``~/build/on-snolla` → `docker build -f deploy/Dockerfile

View File

@@ -11,7 +11,7 @@ Import-Module WebAdministration
$siteName = 'snolla' $siteName = 'snolla'
$poolName = 'snolla' $poolName = 'snolla'
$physPath = 'C:\sites\snolla' $physPath = 'C:\sites\snolla'
$aliases = @('tandemmebel.snolla.com','labtools.snolla.com','labtoolspro.snolla.com','emspb.snolla.com','kupimknigi.snolla.com','on.snolla.com') $aliases = @('tandemmebel.snolla.com','labtools.snolla.com','labtoolspro.snolla.com','emspb.snolla.com','kupimknigi.snolla.com','internal.snolla.com')
Write-Host "== 1. AppPool $poolName ==" Write-Host "== 1. AppPool $poolName =="
if (Test-Path "IIS:\AppPools\$poolName") { if (Test-Path "IIS:\AppPools\$poolName") {