- entities/ruvds-iis-host (NEW) — 80.64.31.36, Win Server 2025 Core, 25 SNI HTTPS bindings, 2/24 hostnames DNS-flipped - sources/iis-migration-to-ruvds-2026-05-23 (NEW) — chronology, SSH/scp pivot после home-ISP outbound 445 block - sources/ruvds-backup-daily-kreknin-2026-05-24 (NEW) — rclone+SFTP SYSTEM task daily 04:30, ntfy общий канал - concepts/traefik-acme-json-to-iis-cert-import (NEW) — PFX + SNI recipe - concepts/windows-server-2025-core-bootstrap — SMB deprecate, HTTP middlebox warning, HTTP/2 note; backup/cert open-Qs закрыты - entities/windows-recovery-host — partial-cutover state, imgproxy SPOF carve-out, tandemmebel indefinitely здесь - overview / index / log — catalog refresh Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
9.2 KiB
title, type, tags, ingested, raw_path, updated
| title | type | tags | ingested | raw_path | updated | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| IIS migration to RUVDS — session 2026-05-23/24 | source |
|
2026-05-24 | ../../.tasks/iis-migration-to-ruvds.md | 2026-05-24 |
IIS migration to RUVDS — 2026-05-23/24
Перенос IIS-хостинга CMS-сайтов с ../entities/windows-recovery-host (DESKTOP-NSEF0UK, дом, SPOF) на ../entities/ruvds-iis-host (Win Server 2025 Core, RUVDS, 80.64.31.36). Pre-req: MSSQL+MinIO уже мигрированы на ../entities/vds-kzntsv (см. ../concepts/mssql-on-vds, ../concepts/minio-imgproxy-on-vds).
Источник истины — .tasks/iis-migration-to-ruvds.md. Live state RUVDS-хоста — ../entities/ruvds-iis-host.
Scope finalize (2026-05-24)
Только 1 IIS site snolla (catch-all для ~26 hostnames через CMS multi-tenant routing) — 8.66 GB. stostayer уже на external MSSQL (не наш scope), stostayer.old local-only (defer), snolla-identity-manager dead conn-string (defer). tandemmebel.ru + www — остаются на windows-IIS на неопределённый срок (scope-narrow 2026-05-24). Из 25 HTTPS bindings — 2 хоста уже DNS-flipped, 22 в очереди после снижения TTL.
Хронология
Phase 0 — vendor selection (2026-05-22)
Закрыт research-task windows-hosting-vendor-research 🟢 — RUVDS выбран. Сравнение: Rusonyx (Linux only для нужного формата), Selectel, FirstVDS, Beget. Critical constraints: RDP-доступ, .NET Framework 4.8 native, IIS 10, external MSSQL/MinIO connectivity (на VDS после Фазы 2).
Phase 1 — purchase + secrets discipline (2026-05-23 09:37)
RUVDS активирован, RDP creds сохранены изначально plaintext в .secrets/ruvds-iis.env в repo tree → нарушение etap-2 secrets-discipline. Ретроспективно вынесены в pass show ruvds-iis/full-env, .secrets/ + *.env + *-log.txt + *-size.txt добавлены в .gitignore.
Phase 2 — failed-robocopy → SMB-block discovery (2026-05-23 18:08 → 22:30)
18:08: Попытка robocopy через UNC \\80.64.31.36\sites\snolla\ упала exit 16. Initial diagnostics: SMB share не создан + FW 445 не открыт. Создан concept ../concepts/windows-server-2025-core-bootstrap с default-blockers + transfer-методов матрицей.
22:30 (session-recovery): После выполнения bootstrap'а (FW+share созданы) SMB всё равно не reachable — TCP/445 не выходит с home-ISP. Real root cause: outbound 445 блокирует ISP (стандартная анти-worm политика residential провайдеров RU). FW scoping на RUVDS корректен.
Решение: SMB recommendation в bootstrap-концепте deprecated. SSH/scp = canonical transfer-метод. Концепт обновлён, см. ../concepts/windows-server-2025-core-bootstrap Update 2026-05-24.
Phase 3 — SSH/scp transfer (2026-05-23 22:35 → 23:13)
OpenSSH.Server на RUVDS уже был установлен ранее (admin'ом), sshd running. Открыт FW 22 scoped к source IP, deployed ed25519 pubkey в C:\ProgramData\ssh\administrators_authorized_keys (правильный ACL — SYSTEM + Administrators only).
scp -r C:\sites\snolla → C:/sites/ — ~25 мин (8.66 GB / 5 MB/s home uplink), exit 0, count+size MATCH (44725 files / 9 302 398 880 bytes).
Phase 4 — IIS recreate (2026-05-23 23:18)
Default Web Site удалён. AppPool snolla (.NET v4.0, Integrated, ApplicationPoolIdentity), Website snolla с physicalPath C:\sites\snolla + catch-all binding *:80:. ACL — IIS APPPOOL\snolla + IIS_IUSRS Read на 46150 file entries. Local smoke (loopback + Host: kupimknigi.spb.ru) — 200 OK с правильным title.
Phase 5 — HTTP middlebox surprise (2026-05-23 23:25)
External smoke через home network: все 8 hostnames вернули "SNOLLA | Cloud CMS" default (28 406 bytes), не per-tenant content. Внутри RUVDS (loopback) — корректно. SSH tunnel localhost:8888→RUVDS:80 → correct. Тест из VDS (другая сеть) → correct.
Conclusion: home-side outbound HTTP mutation — DPI/transparent proxy в OpenWRT/ISP path mangles Host header. Real end-users из других сетей не пострадают. Affected — только local smoke testing.
Зафиксировано в ../concepts/windows-server-2025-core-bootstrap Update 2026-05-24.
Phase 6 — HTTPS SNI bindings (2026-05-23 23:30)
Извлечены 14 LE certs из traefik acme.json (C:\Users\vitya\projects\docker\diskstation\traefik\letsencrypt\acme.json):
acme.json → openssl pkcs12 -export → PFX → Import-PfxCertificate (RUVDS) →
New-WebBinding *:443:<hostname> SslFlags=1 (SNI) → AddSslCertificate by thumbprint
→ 25 HTTPS bindings live. Cert chain valid (LE R13, до 2026-07-22). HTTP/2 auto-negotiated. Recipe вынесен в ../concepts/traefik-acme-json-to-iis-cert-import.
Phase 7 — live smoke from VDS (2026-05-23 23:35)
7 prod hostnames → 200 OK + correct content; canonical bare→www 301s (CMS-side). 4 hostnames (maljarka.tandemmebel.ru, rimiz.ru/www, rimiz.snolla.com) → 502/404 — CMS-internal tenant mismatch (на source IIS:8089 они возвращают 200 default = тоже degraded pre-existing). Не блокирует cutover.
Phase 8 — DNS partial-cutover (2026-05-24)
- ~00:00: user flipped A
kupimknigi.spb.ruв reg.ru. Сначала ошибочно на89.253.255.94(VDS Linux), потом исправлено на80.64.31.36(RUVDS). Authoritativens1.reg.ruотдаёт правильное; public resolver-cache (8.8.8.8=6h, 1.1.1.1=24h, Yandex=2h) держат старое до TTL expiry. - ~12:00:
emspb.ru+www.emspb.ruflipped (1.1.1.1 + Yandex + reg.ru уже отдают новое, 8.8.8.8 кешировал старое). Smoke--resolve+ partially-cached real DNS → 200 OK + correct content.
TTL=86400 — слишком много. Lower до 300s в reg.ru для всех hostnames ДО полного DNS swap'а.
Phase 9 — scope narrow (2026-05-24)
User-decision: tandemmebel.ru + www.tandemmebel.ru ОСТАЮТСЯ на windows-IIS на неопределённый срок. Cert на RUVDS уже импортирован, HTTPS binding existing — но DNS не свапаем. Source IIS snolla site нельзя decommission'ить пока tandemmebel на нём же (catch-all binding). Migration делится: 24 hostnames мигрируют, 2 остаются.
Decisions log (summary)
- SMB → SSH/scp pivot (22:30) — home-ISP блокирует outbound 445, deprecate SMB-метод глобально в bootstrap-концепте.
- Tariff 2GB / 30GB — minimum-viable для IIS+1 site catch-all; w3wp ~330 MB cold. Под load monitor.
- Secrets canonical store —
pass show ruvds-iis/full-envпосле ретроактивной cleanup'а .gitignore. - CMS-side degraded (4 hostnames 502/404) — accept, pre-existing on source, не блокер.
- TTL не снижен заранее — ошибка процесса, fix recommendation сделан в pre-swap list.
Outstanding (post-soak)
- DNS TTL drop до 300s в reg.ru для 22 hostnames.
- Full DNS swap остальных 22 hostnames.
- 1-неделя soak с RUVDS как live prod.
- LE renewal pipeline (recommend:
win-acmestandalone + HTTP-01 после full cutover, ~95 days margin). - Decommission source IIS:8089 + traefik routes (но не traefik сам).
- Cleanup: temp FW rules
ssh-from-source+smb-from-source+ удалить~/.ssh/ruvds-iis-migration*keys +C:\ProgramData\ssh\administrators_authorized_keys. - Source-info commit — image-pipeline SPOF осталось (imgproxy на windows-host).
MinIO/imgproxy caveat (carry-over)
RUVDS IIS coupled к windows-host imgproxy через DNS imgproxy.kzntsv.site — SPOF home machine сохраняется для image-rendering. HTML rendering работает с RUVDS independent. Verified post-migration: Test-NetConnection imgproxy.kzntsv.site -Port 443 с RUVDS = OK. См. ../concepts/iis-cutover-to-vds-services для long-term resolution.
Cross-refs
- Live state: ../entities/ruvds-iis-host
- Source-host (pre-migration): ../entities/windows-recovery-host
- Vendor research:
.tasks/windows-hosting-vendor-research.md(🟢 closed 2026-05-22) - Pre-req migrations: ../concepts/mssql-on-vds + ../concepts/minio-imgproxy-on-vds
- Bootstrap recipe (updated 2026-05-24): ../concepts/windows-server-2025-core-bootstrap
- Cert-import recipe: ../concepts/traefik-acme-json-to-iis-cert-import
- Backup pipeline: ruvds-backup-daily-kreknin-2026-05-24
- Driver (SPOF rationale): ../concepts/future-resilient-architecture-goals
- Pre-existing degraded routes: ../concepts/iis-migration-2026-05-19-postmortem + iis-host-migration-2026-05-19