Files
admin/windows-recovery-host.md
vitya f3ded74674 docs(.wiki): iis-migration rollback + post-mortem + xml-escape concept
Phase 9 — rollback миграции на host-IIS из-за Docker port-loop
(host.docker.internal:80 от traefik container резолвится обратно
в сам traefik через NAT, https.yml http-catchall middleware
отдавал 301 -> TOO_MANY_REDIRECTS). Prod снова через VM.

- iis-migration-2026-05-19-postmortem: 10 ошибок миграции +
  recipe для следующей попытки (backend port НЕ :80, smoke с
  MaximumRedirection 0, тест из НЕ-LAN, parallel VM x N часов,
  atomic revert plan)
- webconfig-password-xml-escape: новая gotcha — & в conn-string
  пароле требует & в Web.config (XML reserved char)
- iis-host-migration-2026-05-19: Phase 9 rollback chronology +
  что осталось на хосте inert
- snolla-recovery-vm: статус -> active prod (обратно)
- windows-recovery-host: host IIS sites -> inert artifacts
- recovery-architecture-snapshot: chain снова через VM,
  traefik backends восстановлены из .bak-phase3

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 15:08:07 +03:00

86 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Windows Recovery Host (рабочий PC пользователя)
type: entity
tags: [hardware, windows, docker, virtualbox, iis, recovery]
sources: [../sources/nas-recovery-session-2026-05-18.md]
updated: 2026-05-19
---
# Windows Recovery Host
Личный Windows-PC пользователя, который во время recovery стал production-сервером для всех клиентских сайтов.
## Hardware / OS
- **Hostname:** DESKTOP-NSEF0UK
- **OS:** Windows 11 Pro (предположительно — поддерживает Hyper-V, IIS, .NET Framework)
- **LAN-MAC:** 88:66:5A:2F:AA:68 (Broadcom 802.11ac WiFi)
- **LAN-IP:** 192.168.1.143 (DHCP-резервация на [[openwrt-router]])
- **Диск C:** ~700 GB total, на старте recovery ~352 GB free, после — ~150 GB free.
- **Юзер:** vitya (admin)
## Установленный стек
- **.NET Framework:** 4.8.1
- **IIS** (W3SVC, на 80, мы планировали остановить — но не остановили, traefik на 8000/4443 не конфликтует)
- **Docker Engine 29.3.1** (Docker Desktop с WSL2 backend)
- **VirtualBox 7.2.8** (установлен в сессии 2026-05-18, через winget)
- **OpenSSH client** (для ssh/scp к kreknin и VM)
- **FileZilla client** (для пользовательских SFTP-перетаскиваний)
## Сетевое положение
- За **OpenWRT 23.05.4** [[openwrt-router]]
- Соединение с интернетом через **WiFi** (Broadcom 802.11ac, 288 Mbps)
- За **VLESS-клиентом v2rayN** (роутер default-route шёл через VPN, пришлось настроить **Bypass LAN** правило с `geoip:private` → direct, иначе входящие 80/443 терялись через asymmetric routing)
## Что хостит сейчас (после revert 2026-05-19 — см. [[iis-migration-2026-05-19-postmortem]])
**Active prod:**
| Что | Где | Порт (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, **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 (использована для миграции на хост; пока хранится как 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 `&amp;`)
- `stostayer.old\` — Web.config patched (conn → localhost)
- `snolla-identity-manager\` — deploy-артефакт, IIS-сайта нет
- `C:\Users\vitya\projects\MoreThenCms\` — git-репо с исходниками CMS
## SSH-ключи на этой машине
- `~/.ssh/id_ed25519_kreknin` — для [[kreknin-synology]] (vitya@195.19.90.188)
- `~/.ssh/id_ed25519_openwrt` — для [[openwrt-router]] (root@192.168.1.1)
- `~/.ssh/id_ed25519_snolla_vm` — для [[snolla-recovery-vm]] (vitya@127.0.0.1:8022, в admin-keys VM)
## Что должно случиться, если этот PC погаснет
- **Всё** — все сайты лягут. **Single point of failure** — главное замечание для [[future-resilient-architecture-goals]].