diff --git a/snolla-recovery-vm.md b/snolla-recovery-vm.md index adb8498..ab4517e 100644 --- a/snolla-recovery-vm.md +++ b/snolla-recovery-vm.md @@ -1,16 +1,16 @@ --- -title: Snolla Recovery VM (VirtualBox) +title: Snolla Recovery VM (VirtualBox) — active prod type: entity -tags: [vm, virtualbox, windows, iis, cms, recovery, demoted] -sources: [../sources/nas-recovery-session-2026-05-18.md, ../sources/iis-host-migration-2026-05-19.md] +tags: [vm, virtualbox, windows, iis, cms, recovery, active] +sources: [../sources/nas-recovery-session-2026-05-18.md, ../sources/iis-host-migration-2026-05-19.md, ../concepts/iis-migration-2026-05-19-postmortem.md] updated: 2026-05-19 --- # Snolla Recovery VM -VirtualBox-VM на [[windows-recovery-host]], в которой работала CMS-стек (IIS + .NET + код CMS). Импортирован из OVA-снапшота 2024-10-27, который лежал в Hyper Backup репо. +VirtualBox-VM на [[windows-recovery-host]], в которой работает CMS-стек (IIS + .NET + код CMS). Импортирован из OVA-снапшота 2024-10-27, который лежал в Hyper Backup репо. -**Статус с 2026-05-19 (после [[iis-host-migration-2026-05-19]]):** VM **демоут** — больше не обслуживает основной CMS-трафик. 11 главных клиентских доменов идут через traefik на нативный IIS хоста (`MoreThenCms.Web` на `C:\sites\MoreThenCms.Web`). VM продолжает обслуживать только `stostayer` и `stostayer.old` через port forwards `18180/18181`. Полное выключение — после миграции stayer-сайтов или явного решения их не мигрировать. +**Статус (вечер 2026-05-19 после revert):** VM **снова active prod**. Был attempt мигрировать на host-IIS в течение дня, через ~10 минут после "done"-объявления пользователь увидел `502 Bad Gateway` → `TOO_MANY_REDIRECTS` → revert (см. [[iis-migration-2026-05-19-postmortem]]). VM поднята из savestate командой `VBoxManage startvm "snolla-recovery"`, потребовался `ipconfig /release /renew` через guestcontrol для оживления network adapter (recipe из [[vbox-windows-stability-tuning]]). Traefik backends восстановлены из `*.bak-phase3-2026-05-19` → trafic снова идёт через VM. Всё, что наработано на хосте для миграции, осталось inert на хосте для следующей попытки. ## Параметры @@ -49,15 +49,17 @@ VirtualBox-VM на [[windows-recovery-host]], в которой работала | Site | Path | Bindings | Прим. | |---|---|---|---| -| **MoreThenCms.Web** | `C:\inetpub\wwwroot\MoreThenCms.Web` | `*:80` | **с 2026-05-19 не получает prod-трафика** (traefik переключён на хост) | -| **Snolla.IdentityManager** | `C:\inetpub\wwwroot\Snolla.IdentityManager` | `*:8089` | публично не используется, в host-миграцию не вошёл | -| **stostayer** | `C:\stayer\MoreThenCms.Web` | `*:8080` | **до сих пор обслуживает prod** через traefik backend `host.docker.internal:18180` | -| **stostayer.old** | `C:\stayer\stostayer.old` | `*:8081` | **до сих пор обслуживает prod** через `host.docker.internal:18181` | -| **stostayer.old/calc** | `C:\stayer\Mis.StoStayer.Calculator.Web` | (sub-app под `:8081`) | отдельный app pool `calc` | -| **stostayer.old/price** | `C:\stayer\Mis.StoStayer.Price.Api` | (sub-app под `:8081`) | отдельный app pool `price` | -| **stostayer.old/price/tireService** | `C:\stayer\Mis.StoStayer.TireService.Api` | (sub-app под `:8081`) | отдельный app pool `tireService` | +| **MoreThenCms.Web** | `C:\inetpub\wwwroot\MoreThenCms.Web` | `*:80` | **active prod** — catch-all для 11 главных доменов; traefik backend `host.docker.internal:18080` | +| **Snolla.IdentityManager** | `C:\inetpub\wwwroot\Snolla.IdentityManager` | `*:8089` | публично не используется | +| **stostayer** | `C:\stayer\MoreThenCms.Web` | `*:8080` | **active prod** — traefik backend `host.docker.internal:18180`; conn → внешний `89.253.219.2,1433` (но user в session 2026-05-19 поменял на `www.stostayer.ru,1433` для host-копии; **в VM остался старый**) | +| **stostayer.old** | `C:\stayer\stostayer.old` | `*:8081` | **active prod** — traefik backend `host.docker.internal:18181` | +| **stostayer.old/calc** | `C:\stayer\Mis.StoStayer.Calculator.Web` | (sub-app под `:8081`) | существует, sub-app pool `calc` | +| **stostayer.old/price** | `C:\stayer\Mis.StoStayer.Price.Api` | (sub-app под `:8081`) | существует, sub-app pool `price` | +| **stostayer.old/price/tireService** | `C:\stayer\Mis.StoStayer.TireService.Api` | (sub-app под `:8081`) | существует, sub-app pool `tireService` | -CMS распознаёт клиента по **Host header** — 11 клиентских доменов исходно роутились внутри `MoreThenCms.Web` на `:80`. После [[iis-host-migration-2026-05-19]] этот сайт зеркалирован на хост в `C:\sites\MoreThenCms.Web` и получает весь prod-трафик там. +CMS распознаёт клиента по **Host header** — все 11 клиентских доменов идут на `:80` и роутятся внутри CMS-кода. + +**Важно для следующей попытки миграции:** stostayer Web.config в VM указывает на старый `89.253.219.2,1433`, а на host-копии (`C:\sites\stostayer\Web.config`) уже patched на `www.stostayer.ru,1433` с XML-escape `&` в password. Если когда-то будем сводить эти конфиги — host-копия правильнее (старый сервер мёртв). ## Web.config — критичные настройки (после recovery patch) diff --git a/windows-recovery-host.md b/windows-recovery-host.md index f7fc636..23b0fd7 100644 --- a/windows-recovery-host.md +++ b/windows-recovery-host.md @@ -34,34 +34,45 @@ updated: 2026-05-19 - Соединение с интернетом через **WiFi** (Broadcom 802.11ac, 288 Mbps) - За **VLESS-клиентом v2rayN** (роутер default-route шёл через VPN, пришлось настроить **Bypass LAN** правило с `geoip:private` → direct, иначе входящие 80/443 терялись через asymmetric routing) -## Что хостит сейчас (после recovery + [[iis-host-migration-2026-05-19]]) +## Что хостит сейчас (после revert 2026-05-19 — см. [[iis-migration-2026-05-19-postmortem]]) -| Что | Где | Порт (host) | -|---|---|---| -| **VirtualBox `snolla-recovery` VM** | C:\Users\vitya\VirtualBox VMs\snolla-recovery\ | VRDE 13389, NAT-RDP 23389, NAT-SSH 8022, NAT-HTTP 18080/18180/18181/18189 | -| **Native IIS — MoreThenCms.Web** (с 2026-05-19) | `C:\sites\MoreThenCms.Web` (AppPool `MoreThenCms.Web`, .NET v4.0 Integrated, `ApplicationPoolIdentity`) | 80 | -| **Native IIS — stostayer** (с 2026-05-19, прод трафика пока нет) | `C:\stayer\MoreThenCms.Web` (AppPool `stostayer`) | 8090 | -| **Native IIS — stostayer.old** (с 2026-05-19, прод трафика пока нет) | `C:\stayer\stostayer.old` (AppPool `stostayer.old`) | 8091 | -| **traefik 2.6.6** | Docker, network `proxy` | 8000 (http), 4443 (https), 8080 (dashboard) | -| **MSSQL 2019** | Docker, named volume `mssql_mssql_data` | 1433 | -| **MinIO** | Docker, bind-mount `./data` | 9000 | -| **Elasticsearch 7.10.1** | Docker, bind-mount `./data` | 9200 | -| **imgproxy** | Docker | 8787 | -| **imgproxy-nginx** | Docker | 8788 | +**Active prod:** -`Default Web Site` остановлен (`autoStart=false`) — освободил `:80` для `MoreThenCms.Web`. URL Rewrite + ARR пока **не установлены** (Phase 5). +| Что | Где | Порт (host) | Прим. | +|---|---|---|---| +| **VirtualBox `snolla-recovery` VM** | `C:\Users\vitya\VirtualBox VMs\snolla-recovery\` | **VRDE 13389, NAT-RDP 23389, NAT-SSH 8022, NAT-HTTP 18080/18180/18181/18189** | **active prod**, обслуживает 11 главных доменов + stayer'ы через traefik | +| **traefik 2.6.6** | Docker, network `proxy` | 8000 (http), 4443 (https), 8080 (dashboard) | 11 main routes + 2 stayer routes → all на VM (`host.docker.internal:18080/18180/18181`) + 3 infra routes | +| **MSSQL 2019** | Docker, named volume `mssql_mssql_data` | 1433 | 5 production DB | +| **MinIO** | Docker, bind-mount `./data` | 9000 | | +| **Elasticsearch 7.10.1** | Docker, bind-mount `./data` | 9200 | books-стек, не CMS | +| **imgproxy** | Docker | 8787 | | +| **imgproxy-nginx** | Docker | 8788 | | + +**Inert (готовы для следующей попытки миграции, не на prod-пути):** + +| Что | Где | Порт (host) | Прим. | +|---|---|---|---| +| **Native IIS — `snolla`** | `C:\sites\snolla` (pool `snolla`, .NET v4.0 Integrated, `ApplicationPoolIdentity`) | 80, 8088 | сайт + binding'и live, не получает трафика (traefik снова на VM) | +| **Native IIS — `stostayer`** | `C:\sites\stostayer` (pool `stostayer`) | 8090 | conn на `www.stostayer.ru,1433` (patched), inert | +| **Native IIS — `stostayer.old`** | `C:\sites\stostayer.old` (pool `stostayer.old`) | 8091 | conn → наш `localhost` MSSQL (patched), inert | +| **`C:\sites\snolla-identity-manager\`** | папка без IIS-сайта | — | deploy-артефакт, не активен | + +`Default Web Site` всё ещё stopped (`autoStart=false`) — даже не нужен. URL Rewrite + ARR **не установлены**. ## Ключевые папки - `C:\Users\vitya\projects\docker\diskstation\` — compose'ы и данные docker-стеков - `mssql/`, `minio/`, `elasticsearch/`, `imgproxy/`, `traefik/` - `traefik/data/custom/*.yml` — file-provider routes для всех 13 client доменов + ES/MinIO/imgproxy -- `C:\Users\vitya\VirtualBox VMs\snolla-recovery\` — VM home (VMDK на SATA controller, 42.5 GB extract из OVA) +- `C:\Users\vitya\VirtualBox VMs\snolla-recovery\` — VM home, **active prod** (running) - `C:\nas-recovery\backup\snolla\snolla.ova` — оригинал OVA (45.6 GB, для повторного импорта если что) -- `C:\nas-recovery\vm-sites\wwwroot\`, `C:\nas-recovery\vm-sites\stayer\` — резервная копия IIS-сайтов из VM (на случай дрожи VM) -- `C:\sites\MoreThenCms.Web\` — **активный prod CMS** на нативном IIS (зеркало `vm-sites\wwwroot\MoreThenCms.Web`, с патчем `sitePath` + connection string на `localhost`) -- `C:\stayer\` — копии stayer-проектов на хосте (Native IIS сайты `stostayer` :8090 и `stostayer.old` :8091 готовы, но prod-трафик пока на VM) -- `C:\Users\vitya\projects\MoreThenCms\` — git-репо с исходниками CMS (важно — у нас есть и source code) +- `C:\nas-recovery\vm-sites\wwwroot\`, `C:\nas-recovery\vm-sites\stayer\` — резервная копия IIS-сайтов из VM (использована для миграции на хост; пока хранится как safety net) +- `C:\sites\` — **inert**, готов для следующей попытки миграции (см. [[iis-migration-2026-05-19-postmortem]]): + - `snolla\` — Web.config patched (sitePath + conn → localhost) + - `stostayer\` — Web.config patched (conn → `www.stostayer.ru,1433` с XML-escape `&`) + - `stostayer.old\` — Web.config patched (conn → localhost) + - `snolla-identity-manager\` — deploy-артефакт, IIS-сайта нет +- `C:\Users\vitya\projects\MoreThenCms\` — git-репо с исходниками CMS ## SSH-ключи на этой машине