tasks(iis-migration-to-ruvds): pause после failed-robocopy + ingest SMB-default finding

Temp admin (2026-05-23 09:37-18:08) начал импл iis-migration-to-ruvds,
не закончил bootstrap, упал на UNC robocopy (exit 16) и dropped tree dirty.

Session recovery:
- secrets leak fix: `.secrets/ruvds-iis.env` → `pass show ruvds-iis/full-env`
  (etap-2 discipline restored). `.secrets/` + `*.env` + `*-log.txt` + `*-size.txt`
  added to `.gitignore` чтобы не повторилось.
- root cause зафиксирован: TCP/445 closed по дефолту на fresh Win Server 2025
  Core + SMB share не создан → UNC robocopy не работает без RUVDS bootstrap.
- new concept `windows-server-2025-core-bootstrap.md` — default-blockers
  table + transfer-методов матрица (RDP-redirect / SMB / WinRM / SFTP) +
  bootstrap-чеклист 12 шагов. Recommendation = SMB inbound с source-IP
  whitelist.
- task 🟡 paused с concrete next-step (capacity audit, transfer-method
  confirm, RUVDS bootstrap, backup source, recreate IIS sites + conn-string
  swap, pilot kupimknigi + DNS swap).
- Open question raised: source 11 sites сумма vs RUVDS 30 GB HDD — capacity
  blocker possible (snolla одна 8.66 GB).

Не push'нуто — ждёт user grant per project-discipline Rule 4.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-23 22:07:34 +03:00
parent 98e582f5b5
commit fdefe96d6f
6 changed files with 193 additions and 55 deletions

9
.gitignore vendored
View File

@@ -11,3 +11,12 @@ Thumbs.db
*~
.vscode/
.idea/
# Secret material — должны жить в `pass`, не в repo (даже untracked).
.secrets/
*.env
!*.env.example
# Transient operational drops — findings captured в .tasks/, не в repo root.
*-log.txt
*-size.txt

View File

@@ -1,5 +1,5 @@
# Admin Task Board
_Updated: 2026-05-22 (Сессия: MSSQL Express 2022 live (`mssql.kzntsv.site:1433`, 5 DBs, 8 prod hosts 200 OK). MinIO/imgproxy VDS stack live as standby (CMS остаётся на windows из-за hardcoded URL в closed-source DLL). board-viewer-vds-deploy ✓ (board.kzntsv.site + basicauth). **+ Portainer-migration sweep**: 12 ad-hoc stacks → Portainer-managed (canonical rule добавлен в CLAUDE.md + `portainer-stack-management-vds` concept). Skipped traefik+portainer (management plane). Decommission window-host MSSQL после 48ч soak 2026-05-24.)_
_Updated: 2026-05-23 (Session-recovery: temp admin начал `[iis-migration-to-ruvds]` 2026-05-23 (09:37 creds в `.secrets/` plaintext, 18:01 size probe, 18:08 robocopy upal exit 16 «сетевой путь не найден»), drop'нул tree dirty. Восстановлено: creds → `pass show ruvds-iis/full-env`, `.secrets/` removed + gitignored, root-cause SMB-445 closed на fresh Win Server 2025 Core зафиксирован в [`windows-server-2025-core-bootstrap`](../.wiki/concepts/windows-server-2025-core-bootstrap.md), task ⚪ → 🟡 paused с concrete next-step. Previous session (2026-05-22): MSSQL Express 2022 live (`mssql.kzntsv.site:1433`, 5 DBs, 8 prod hosts 200 OK). MinIO/imgproxy VDS stack live as standby (CMS остаётся на windows из-за hardcoded URL в closed-source DLL). board-viewer-vds-deploy ✓ (board.kzntsv.site + basicauth). Portainer-migration sweep: 12 ad-hoc stacks → Portainer-managed.)_
<!--
Status legend:
@@ -698,13 +698,22 @@ Copy-Item C:\sites\snolla\Web.config.bak-pre-vds-cutover-20260522 C:\sites\snoll
---
## [iis-migration-to-ruvds] — Migrate 11 IIS sites from DESKTOP-NSEF0UK to RUVDS Windows Server 2025 Core
## 🟡 [iis-migration-to-ruvds] — Migrate 11 IIS sites from DESKTOP-NSEF0UK to RUVDS Windows Server 2025 Core
**Status:** ready
**Where I stopped:** (not started — awaiting RUVDS installation complete)
**Next action:** RDP-подключение к RUVDS, verify .NET 4.8 + IIS installed, install URL Rewrite 2.1, plan migration: (1) backup IIS sites+configs from windows-recovery-host, (2) deploy to RUVDS, (3) configure external MSSQL/MinIO connection (already on VDS), (4) DNS swap test on single low-traffic site (kupimknigi.spb.ru).
**Branch:** n/a
**Status:** paused
**Where I stopped:** 2026-05-23 18:08 — failed-robocopy на fresh RUVDS (`exit 16 «сетевой путь не найден»`). Root cause зафиксирован: TCP/445 closed по дефолту на Win Server 2025 Core + SMB share не создан → UNC robocopy не работает без bootstrap RUVDS-стороны. Полный finding + transfer-методов матрица — в [`windows-server-2025-core-bootstrap`](../.wiki/concepts/windows-server-2025-core-bootstrap.md). Source size probe done: `C:\sites\snolla\` = 8.66 GB; 11 sites суммарно может быть 30-50 GB → **possible RUVDS 30 GB HDD capacity blocker** (см. Open questions).
**Next action:** Decision требуется (user) перед continuing:
1. **Capacity audit на source:** `Get-ChildItem C:\sites -Directory | %{ [PSCustomObject]@{Name=$_.Name; SizeGB=[math]::Round((Get-ChildItem $_.FullName -Recurse -EA SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB, 2)} } | Sort-Object SizeGB -Descending` — total для 11 sites. Если >25 GB → upgrade RUVDS HDD plan ИЛИ selective transfer (drop logs/cache).
2. **Transfer-метод confirm:** recommendation = SMB inbound с source-IP whitelist (см. concept). Альтернативы (RDP-redirect / WinRM / SFTP) в concept'е, выбор на user'е.
3. **RUVDS bootstrap:** RDP, `Install-WindowsFeature Web-Server -IncludeAllSubFeature -IncludeManagementTools`, verify .NET 4.8 (Release ≥ 528040), install URL Rewrite 2.1, open FW 80/443 + SMB-from-source. Полный чеклист — concept §Bootstrap-чеклист.
4. **Backup source IIS state:** `appcmd list site -config > sites-backup.txt` + `applicationHost.config` copy.
5. **Transfer + recreate IIS sites + Web.config conn-strings → `mssql.kzntsv.site,1433`** (matches `[mssql-vds-migration]`).
6. **Pilot kupimknigi.spb.ru через hosts-file → 24h soak → DNS swap.**
Полный план + Decisions log + Open questions — в [iis-migration-to-ruvds.md](iis-migration-to-ruvds.md).
**Branch:** master
<!-- created-by: user-decision / 2026-05-22 / trigger: RUVDS purchased -->
<!-- paused-by: vitya / 2026-05-23 evening / session-recovery после failed-robocopy + secrets-leak fix -->
---

View File

@@ -7,74 +7,87 @@ Migrate 11 IIS sites from [[../entities/windows-recovery-host]] (DESKTOP-NSEF0UK
**Pre-requisites done:**
- MSSQL+MinIO уже на [[../entities/vds-kzntsv]] (см [[mssql-minio-migration-to-vds]])
- RUVDS purchased: Windows Server 2025 Core, 2GB RAM, 30GB HDD, 1IP, DC Королёв
- RDP ready (credentials в secure storage)
- RDP ready (creds — `pass show ruvds-iis/full-env`, public IP `80.64.31.36`)
## Target sites (11)
## Key files
From [[../.wiki/concepts/recovery-architecture-snapshot]]:
- snolla.com
- pilorama98.ru
- labtools.ru / labtools.pro
- tandemmebel.ru
- emspb.ru
- kupimknigi.spb.ru (low-traffic — pilot candidate)
- on.snolla.com
- maljarka.tandemmebel.ru
- + 3 others (see source)
- `C:\sites\snolla\` — 8.66 GB source (samples sites), измерено 2026-05-23
- `C:\sites\<11 sites>` — полный inetpub root (по `recovery-architecture-snapshot`)
- `C:\Windows\System32\inetsrv\config\applicationHost.config` — source IIS state
- `[[../.wiki/concepts/windows-server-2025-core-bootstrap]]` — bootstrap-чеклист + transfer-методов матрица (ingested 2026-05-23 после failed-robocopy)
- `pass show ruvds-iis/full-env` — RDP creds
## Migration approach
1. **RDP-first setup** (RUVDS):
- Verify .NET Framework 4.8 installed (`Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\'`)
- Verify IIS 10 installed (`Get-WindowsFeature Web-Server`)
- Install URL Rewrite 2.1 (download + Server Manager cmd)
- Configure firewall: allow 80/443 inbound
- Test external MSSQL connection to VDS (89.253.255.94:1433)
- Test external MinIO connection to VDS (minio.kzntsv.site:443)
1. **RDP-first setup** (RUVDS) — см. `concepts/windows-server-2025-core-bootstrap.md` §Bootstrap-чеклист:
- Install IIS (`Install-WindowsFeature Web-Server -IncludeAllSubFeature -IncludeManagementTools`)
- Verify .NET Framework 4.8 (Release ≥ 528040)
- Install URL Rewrite 2.1
- Open FW 80/443
- Test external MSSQL connection to VDS (`mssql.kzntsv.site:1433`)
- Test external MinIO connection (если CMS pipeline переезжает — см. caveat §MinIO ниже)
2. **Backup source** (windows-recovery-host):
- Export IIS configuration: `%systemroot%\system32\inetsrv\appcmd.exe list site -config > sites-backup.txt`
2. **Open SMB inbound на время migration** (см. transfer-методов матрица — это recommended choice):
- `Set-NetFirewallRule -DisplayGroup "File and Printer Sharing" -Enabled True`
- `New-NetFirewallRule -DisplayName "SMB-from-source" -Direction Inbound -Protocol TCP -LocalPort 445 -RemoteAddress <source-public-ip> -Action Allow`
- `New-Item -ItemType Directory -Path C:\sites -Force`
- `New-SmbShare -Name sites -Path C:\sites -FullAccess Administrator`
3. **Backup source** (windows-recovery-host):
- Export IIS configuration: `appcmd list site -config > sites-backup.txt`
- Export applicationHost.config: `C:\Windows\System32\inetsrv\config\applicationHost.config`
- Backup inetpub\wwwroot\ (11 sites, ~100MB-1GB each)
- Backup inetpub\wwwroot\ (11 sites, ~8.66 GB на snolla одной, итого предположительно ~30-50 GB total)
- Document Web.config connection strings (MSSQL/MinIO endpoints)
3. **Deploy to target** (RUVDS):
- Create IIS sites matching source structure
- Copy site contents (RDP drive mount or WinRM copy)
- Update Web.config connection strings → point to VDS MSSQL/MinIO
- Import SSL certificates (traefik LE certs) or setup new LE on IIS
4. **Deploy to target** (RUVDS) — через SMB robocopy:
- `net use \\<ruvds-ip>\sites /user:Administrator <pass-from-pass>`
- `robocopy C:\sites\<site> \\<ruvds-ip>\sites\<site> *.* /S /E /DCOPY:DA /COPY:DAT /Z /MT:8 /R:2 /W:5` per site
- Recreate sites через `appcmd add site` или `New-IISSite`, копировать bindings
- Update Web.config connection strings → `Data Source=mssql.kzntsv.site,1433;TrustServerCertificate=True` (matches `[mssql-vds-migration]` pattern)
- Import SSL certificates (traefik LE certs) или setup new LE через `win-acme` (wacs.exe)
4. **Pilot on kupimknigi.spb.ru**:
- DNS pointing test (local hosts file or temporary DNS)
5. **Pilot on kupimknigi.spb.ru** (low-traffic):
- DNS pointing test (local hosts file или temporary DNS)
- Smoke test: homepage + admin + database connectivity
- 24h soak — monitor stability
- If OK → proceed with remaining 10 sites
- 24h soak — monitor stability (включая memory pressure — 2GB tight)
- Если OK → proceed с remaining 10 sites
5. **DNS swap cutover**:
- Update DNS A records → RUVDS IP
- Monitor traefik logs on windows-recovery-host (should see 0 traffic)
- Keep windows-recovery-host warm for 1 week rollback window
6. **DNS swap cutover**:
- Update DNS A records → RUVDS IP (`80.64.31.36`)
- Monitor traefik logs на windows-recovery-host (должно увидеть 0 traffic)
- Keep windows-recovery-host warm для 1 week rollback window
- **Cleanup на RUVDS:** `Remove-SmbShare -Name sites` + `Remove-NetFirewallRule -DisplayName "SMB-from-source"`
## Acceptance criteria
## Decisions log
- [ ] RUVDS IIS serving all 11 sites
- [ ] All sites functional (no 500 errors, DB connectivity OK)
- [ ] DNS pointed to RUVDS
- [ ] 24h stability soak passed
- [ ] Rollback plan documented (revert DNS to home IP)
- [ ] windows-recovery-host VM shutdown / saved-state
- **2026-05-23 09:37 (admin attempt):** RDP creds сохранены в `.secrets/ruvds-iis.env` (plaintext, в repo tree → нарушение etap-2 secrets-discipline, ретроспективно зафикшено в текущей сессии: → `pass show ruvds-iis/full-env`).
- **2026-05-23 18:01 (admin attempt):** замерен размер `C:\sites\snolla\` = 8871 MB ≈ 8.66 GB. Источник для capacity planning (snolla alone 8.66 GB → 11 sites суммарно может быть 30-50 GB → 30 GB HDD на RUVDS **tight**, потенциальный capacity blocker, см. Open questions).
- **2026-05-23 18:08 (admin attempt):** robocopy `C:\sites\snolla\``\\80.64.31.36\sites\snolla\` упал exit 16 «сетевой путь не найден». Root cause (post-mortem из текущей сессии): TCP/445 closed по дефолту на Win Server 2025 Core + SMB share `sites` не создан. UNC robocopy как первый transfer-метод **не работает** на fresh Core без подготовки RUVDS-стороны.
- **2026-05-23 (current session) recommendation:** SMB inbound с source-IP whitelist — самый быстрый transfer для 11 sites × ~1 GB, native robocopy /Z поддерживает interrupt-resume, FW rule убирается после cutover. Полная матрица альтернатив (RDP-redirect / WinRM / SFTP) в `concepts/windows-server-2025-core-bootstrap.md` §Transfer-методов.
- **MinIO pipeline caveat (из `[iis-cutover-to-vds-services]` 2026-05-22):** CMS image pipeline остаётся целиком на windows-recovery-host из-за hardcoded URL в `MoreThenCms.Modules.Imgproxy.dll`. RUVDS-IIS будет coupled к windows-host imgproxy через DNS `imgproxy.kzntsv.site` — то есть RUVDS IIS вызывает server-side GET на windows-host'овский imgproxy. Это **не убирает SPOF домашней машины** для image-rendering pipeline. Если windows-host умрёт, image-URLs broken. Open question для post-migration phase: decompile DLL или Option B (local nginx-relay).
## Open questions
- [ ] **RUVDS public IP** — assigned yet? Need for DNS A records.
- [ ] **SSL strategy** — use existing traefik LE certs (export?) or setup new LE on IIS?
- [ ] **Traefik на RUVDS?** — IIS-only (port 80/443 direct) или traefik reverse proxy again?
- [ ] **Backup strategy for RUVDS IIS**VDS snapshot? IIS native backup?
- [ ] **RUVDS disk capacity** — 30 GB HDD vs estimated 30-50 GB total sites. Нужен audit `Get-ChildItem C:\sites -Directory | %{[PSCustomObject]@{Name=$_.Name; SizeGB=(Get-ChildItem $_.FullName -Recurse | Measure-Object -Property Length -Sum).Sum / 1GB}}` на source перед transfer'ом. Если >25 GB — нужен upgrade RUVDS plan (или selective transfer без cache/logs/temp dirs).
- [ ] **SSL strategy** — use existing traefik LE certs (export?) или setup new LE на IIS via `win-acme`? Recommendation: `win-acme` — standalone-friendly на Core, не зависит от traefik export-ритуала.
- [ ] **Traefik на RUVDS?** — IIS-only (port 80/443 direct) или traefik reverse proxy again? Recommendation: IIS-only для 11 sites, traefik overkill; ставить traefik только если будут не-IIS workloads на RUVDS.
- [ ] **Backup strategy для RUVDS IIS**расширить `vds-backup-rsync-kreknin` cron на RUVDS как третий source? VDS snapshot? IIS native backup (`Backup-WebConfiguration`)? Решение откладывается до после успешного cutover.
- [ ] **Image-pipeline SPOF (post-cutover):** windows-host imgproxy остаётся single-point — Option B/D из `[iis-cutover-to-vds-services]` MinIO-phase. Решение откладывается до после успешного cutover.
## Completed steps
- [x] **2026-05-22:** vendor research (`windows-hosting-vendor-research` 🟢) — RUVDS selected.
- [x] **2026-05-23 09:37:** RUVDS purchased + RDP creds saved. **Note:** creds сначала жили в `.secrets/ruvds-iis.env` plaintext (нарушение etap-2 discipline); ретроспективно вынесены в `pass show ruvds-iis/full-env` 2026-05-23 в session-recovery.
- [x] **2026-05-23 18:01:** source size probe — `C:\sites\snolla\` = 8.66 GB.
- [x] **2026-05-23 18:08:** failed-robocopy attempt → root-cause analysis → finding закреплён в `[[../.wiki/concepts/windows-server-2025-core-bootstrap]]`.
## Notes
- **Windows Server 2025 Core** = GUI-less, PowerShell-only management. No Server Manager desktop.
- **2GB RAM constraint** — IIS + 11 sites = tight. Monitor memory after pilot.
- **Migration is transitional** — long-term snolla-on-node makes IIS obsolete. Don't over-engineer.
- **Windows Server 2025 Core** = GUI-less, PowerShell-only management. No Server Manager desktop. Drag-n-drop в RDP не работает без `mstsc /admin` Local Drives redirect.
- **2GB RAM constraint** — IIS + 11 sites = tight. Monitor memory после pilot. Возможно нужен per-pool `RecyclingPeriodicRestartMemory 200MB`.
- **Migration is transitional** — long-term snolla-on-node makes IIS obsolete. Don't over-engineer (не ставить Prometheus, не writing custom monitoring).
- **Image-pipeline caveat:** даже после RUVDS cutover, windows-host остаётся SPOF для image-rendering (см. Decisions log §MinIO caveat).
<!-- created-by: user-decision / 2026-05-22 / trigger: RUVDS purchased -->
<!-- attempted-by: admin-session / 2026-05-23 09:37-18:08 / dropped after failed-robocopy + giving up -->
<!-- session-recovery: vitya / 2026-05-23 evening / fix secrets-leak + document SMB-default finding + paused with concrete next-step -->

View File

@@ -0,0 +1,104 @@
---
title: Windows Server 2025 Core — bootstrap для IIS-хоста (RUVDS-сценарий)
status: live
tags: [windows, iis, ruvds, bootstrap, smb, ops]
related: [[iis-migration-2026-05-19-postmortem]], [[recovery-architecture-snapshot]], [[future-resilient-architecture-goals]]
---
# Windows Server 2025 Core — bootstrap для IIS-хоста
Из коробки на RUVDS (2GB RAM, 30GB HDD, Win Server 2025 Core, RDP-only) машина **не готова** ни принимать файлы по SMB, ни хостить IIS — стандартный сценарий «купил, RDP'нулся, robocopy'нул» не работает. Документ фиксирует дефолтное состояние, default-blockers, и матрицу transfer-методов для переноса content'а с windows-recovery-host.
## Дефолтное состояние fresh Win Server 2025 Core
| Компонент | Дефолт | Нужно для IIS-host'инга |
|---|---|---|
| GUI / Server Manager desktop | нет (Core SKU) | PowerShell-only management |
| IIS (Web-Server feature) | не установлен | `Install-WindowsFeature Web-Server -IncludeAllSubFeature -IncludeManagementTools` |
| .NET Framework 4.8 | varies (бывает pre-bundled, бывает нет) | `Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\'` — Release ≥ 528040 |
| URL Rewrite Module 2.1 | нет | download + `msiexec /i rewrite_amd64_en-US.msi /quiet` |
| Defender Firewall inbound 80/443 | closed | `New-NetFirewallRule -DisplayName "HTTP" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow` (+443) |
| **SMB inbound 445** | **closed** | для UNC robocopy — открывать profile-specific rule |
| **File and Printer Sharing service / share** | **off, no share** | для UNC robocopy — `Set-NetFirewallRule -DisplayGroup "File and Printer Sharing" -Enabled True -Profile Any` + `New-SmbShare` |
| WinRM / PSRemoting | enabled (домен / private) | для PSSession-based transfer — verify `Enable-PSRemoting -SkipNetworkProfileCheck` |
| RDP 3389 | open | работает из коробки |
## Гочa: UNC robocopy на fresh Core → exit 16
**Симптом:** `robocopy C:\sites\snolla\ \\<ruvds-ip>\sites\snolla\ *.* /S /E /DCOPY:DA /COPY:DAT /Z /MT:8 /R:2 /W:5``2026/05/23 18:08:29 ERROR 53 (0x00000035) Создание папки назначения … Не найден сетевой путь.`
**Root cause:** на RUVDS:
1. TCP/445 закрыт в Defender Firewall (public profile по дефолту).
2. SMB share `sites$` не создан (`Get-SmbShare` показывает только админскую `C$`, доступную только Administrator).
3. Authentication через UNC требует Windows credentials — `net use \\<ip>\C$ /user:Administrator <pass>` сначала.
Проверка с source (windows-recovery-host):
```powershell
Test-NetConnection -ComputerName <ruvds-ip> -Port 445
# TcpTestSucceeded : False ← вот корень
```
## Матрица transfer-методов (source → RUVDS)
| Метод | Setup на RUVDS | Pros | Cons |
|---|---|---|---|
| **RDP local-drive redirection** | nothing — mstsc `/admin` → Local Resources → Drives → C: | zero-config, через 3389 (уже открыт) | drag-n-drop вручную, не batch; explorer-через-RDP slow для >1 GB; не подходит для 8 GB+ snolla |
| **SMB inbound (recommended для batch)** | open FW 445 + `New-SmbShare -Name sites -Path C:\sites -FullAccess Administrator` + `net use` с source | robocopy native, /MT:8 параллелизм, resume через `/Z` | exposed SMB — должен быть либо в private network, либо VPN, либо source-IP firewall whitelist |
| **WinRM PSSession + Copy-Item** | `Enable-PSRemoting`, добавить source IP в `TrustedHosts`, FW 5985/5986 | encrypted, не нужен SMB, скрипт-friendly | медленнее SMB на больших файлах; HTTP-default; HTTPS требует cert setup |
| **SFTP** (OpenSSH server feature) | `Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0` + start sshd + FW 22 | works с любого Linux/Mac source; ключи безопасно | extra service surface; sshd default config иногда permissive |
| **HTTP PUT через временный traefik+webdav** | overkill для bootstrap | reusable для последующих deploy'ев | сначала нужен IIS/nginx running — но IIS ещё не deployed → chicken-and-egg |
**Recommendation для IIS migration:** SMB inbound с source-IP whitelist. Самый быстрый для 11 sites × ~1 GB; native robocopy /Z поддерживает interrupt-resume; FW rule убирается после migration cutover.
```powershell
# На RUVDS (RDP-сессия, PowerShell):
Set-NetFirewallRule -DisplayGroup "File and Printer Sharing" -Enabled True
New-NetFirewallRule -DisplayName "SMB-from-source" -Direction Inbound `
-Protocol TCP -LocalPort 445 -RemoteAddress <source-public-ip> -Action Allow
New-Item -ItemType Directory -Path C:\sites -Force
New-SmbShare -Name sites -Path C:\sites -FullAccess Administrator
```
Source-side (windows-recovery-host):
```powershell
net use \\<ruvds-ip>\sites /user:Administrator <pass>
robocopy C:\sites\snolla \\<ruvds-ip>\sites\snolla *.* /S /E /DCOPY:DA /COPY:DAT /Z /MT:8 /R:2 /W:5
net use \\<ruvds-ip>\sites /delete
```
После cutover — `Remove-SmbShare -Name sites` + удалить FW rule.
## Bootstrap-чеклист (порядок)
1. RDP в RUVDS (3389 уже открыт, creds в `pass show ruvds-iis/full-env`).
2. `Install-WindowsFeature Web-Server -IncludeAllSubFeature -IncludeManagementTools` — установить IIS.
3. Verify .NET 4.8: `(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\').Release` ≥ 528040. Если нет — установить через RUVDS Server Manager (web) или offline-installer + RDP-drop.
4. Install URL Rewrite 2.1: download `https://download.microsoft.com/.../rewrite_amd64_en-US.msi`, `msiexec /i ... /quiet`.
5. Open FW 80/443: `New-NetFirewallRule -DisplayName "HTTP" -Direction Inbound -Protocol TCP -LocalPort 80,443 -Action Allow`.
6. Open SMB rule (см. блок выше) — **только на время migration**.
7. Verify external connectivity:
- MSSQL: `Test-NetConnection mssql.kzntsv.site -Port 1433`
- MinIO: `Test-NetConnection minio.kzntsv.site -Port 443` (если CMS pipeline остаётся на windows-host — не нужно; см. [[iis-cutover-to-vds-services]] §MinIO phase)
8. Backup source IIS state с windows-recovery-host:
```powershell
& "$env:SystemRoot\system32\inetsrv\appcmd.exe" list site -config > C:\Users\vitya\sites-backup.txt
Copy-Item C:\Windows\System32\inetsrv\config\applicationHost.config C:\Users\vitya\applicationHost.config.bak
```
9. Transfer 11 sites через robocopy/SMB (см. метод выше).
10. Recreate sites через `appcmd add site` или `New-IISSite`, копировать bindings.
11. Update Web.config conn-strings → `mssql.kzntsv.site,1433;TrustServerCertificate=True` (как в `[mssql-vds-migration]`).
12. Pilot на kupimknigi.spb.ru через hosts-file DNS override, 24h soak, потом DNS A swap.
## Gotcha-fineprint
- **2GB RAM tight:** IIS + 11 worker pools = легко уйдёт в paging. Рекомендую установить `IIS:\AppPools\<name> -RecyclingPeriodicRestartMemory 200MB` per-pool + monitor через `Get-Counter '\Process(w3wp*)\Working Set'`.
- **Windows Server 2025 Core нет explorer.exe:** drag-n-drop не работает в RDP без redirect drives — закладывай SMB или SFTP заранее.
- **LE certs:** если IIS будет terminate'ить TLS напрямую — `win-acme` (wacs.exe) standalone-friendly на Core. Альтернатива — traefik-on-RUVDS перед IIS, но это лишняя layer для 11 sites.
- **Backup strategy для RUVDS:** unsolved — RUVDS native snapshots = VDS-snapshot-level, не file-level. Daily rsync sites+IIS config → kreknin (расширить `vds-backup-rsync-kreknin` на источник RUVDS) — отдельная chore-task после успешного cutover.
## Cross-refs
- Driver для миграции: [[future-resilient-architecture-goals]] §Workshop pass 1 → IIS-track «вынести IIS с windows-recovery-host чтобы убрать SPOF домашней машины».
- Vendor selection: `.tasks/windows-hosting-vendor-research.md` (🟢 closed 2026-05-22 — RUVDS выбран).
- Mid-impl task: `.tasks/iis-migration-to-ruvds.md` (🟡 paused 2026-05-23 — этот концепт зафиксирован после failed-robocopy инцидента).
- Source-host postmortem: [[iis-migration-2026-05-19-postmortem]] — что было при первой миграции снолла-recovery → нативный IIS.

View File

@@ -39,6 +39,7 @@ Catalog of all wiki pages. One line per page, organized by type. Updated on ever
- [vbox-windows-stability-tuning](concepts/vbox-windows-stability-tuning.md) — VirtualBox + Windows-гость — нюансы стабильности cross-hypervisor миграции
- [verdaccio-prune-semantics](concepts/verdaccio-prune-semantics.md) — Verdaccio prune semantics — proxied vs locally-published
- [wd40efax-smr-cascade](concepts/wd40efax-smr-cascade.md) — WD40EFAX SMR Cascade — root cause NAS failure 2026-05-18
- [windows-server-2025-core-bootstrap](concepts/windows-server-2025-core-bootstrap.md) — Win Server 2025 Core (RUVDS) — bootstrap для IIS-хоста: default-blockers + transfer-методов матрица
## Packages

View File

@@ -17,3 +17,5 @@ Append-only log of wiki operations (ingests, promotions, lints, migrations).
## [2026-05-21] ingest | concepts/ocis-on-vds-deploy-recipe — oCIS deploy recipe + gotchas (UID mismatch, PROXY_TLS, PROXY_ENABLE_BASIC_AUTH, LibreGraph user-create); updated entities/vds-kzntsv (added owncloud row to stack/hostnames/file-layout); source: .tasks/owncloud-vds-deploy.md
## [2026-05-22] update | concepts/ocis-on-vds-deploy-recipe — Gotcha 5: 60s HTTP timeout caps slow-uplink uploads at ~200MB on 3 MiB/s link; traefik buffering NOT the fix (500 from oxy buffer); workaround = VDS-side curl PUT loopback via throwaway sftp key. Source: .tasks/owncloud-vds-deploy.md close-note.
## [2026-05-23] ingest | concepts/windows-server-2025-core-bootstrap — default-blockers (SMB closed, IIS/URL-Rewrite/.NET unverified) + transfer-методов матрица (RDP-redirect / SMB / WinRM / SFTP); recommendation = SMB inbound с source-IP whitelist на время migration. Source: failed-robocopy инцидент 2026-05-23 18:08 (.tasks/iis-migration-to-ruvds.md Decisions log).