wiki(lint): close all 10 lint issues + delete windows-host backup task
- deleted .tasks/windows-host-fallback-backup-daily.md (MSSQL removed on decommission 2026-06-08) - recovery-architecture-snapshot.md: marked ИСТОРИЧЕСКАЯ ЗАПИСЬ; removed 3 broken [[wiki-links]] (cms-server-port-leak-fix, cms-admin-assets-root-folder-seed, webconfig-password-xml-escape) - snolla-recovery-vm.md: marked УДАЛЕНА 2026-06-08 - ruvds-iis-host.md: struck 2 resolved risks (imgproxy SPOF, LE renewal); cross-ref winacme - future-resilient-architecture-goals.md: dead task link → plain text - mssql-on-vds.md: frontmatter fix; Backup TODO section replaced with implemented block (Express COPY_ONLY, sqlcmd, bind-mount pattern) - vds-kzntsv.md: added MSSQL row to software stack table - log.md: update entries for lint + mssql backup implementation Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,120 +0,0 @@
|
||||
# windows-host-fallback-backup-daily
|
||||
|
||||
## Goal
|
||||
|
||||
Ежедневный backup [[../entities/windows-recovery-host]] (DESKTOP-NSEF0UK) → [[../entities/kreknin-synology]] чтобы windows-host оставался **готовым принять prod трафик** если VDS или RUVDS теряем.
|
||||
|
||||
Текущая архитектура после iis-migration-to-ruvds:
|
||||
- **Active prod** = RUVDS (IIS) + VDS (MSSQL, MinIO standby, Gitea, Verdaccio, Registry, ntfy, oCIS)
|
||||
- **Warm standby** = windows-host (IIS:8089 + MSSQL container + MinIO container + traefik routes) — всё установлено и работает, но не получает live traffic после DNS swap.
|
||||
|
||||
Если RUVDS или VDS падают — поднимаем DNS обратно на windows-host (`94.19.247.14`) → traefik routes уже live → IIS:8089 → CMS + MSSQL + MinIO localhost-stack.
|
||||
|
||||
**Чтобы это failover реально работал**, нужен ongoing daily backup данных на windows-host. Иначе через месяц simmering windows-host'а его state diverged от prod (image uploads через RUVDS не отражаются на windows-host MinIO, новые DB записи через VDS MSSQL не приходят на windows-host MSSQL). Failover при этом = откат к stale state.
|
||||
|
||||
Этот backup решает **другую** задачу:
|
||||
- Не "primary backup of windows-host" (windows-host = standby, не prod source-of-truth) — для prod-data primary backup'и это `vds-backup-rsync-kreknin` 🟢 (VDS) + `ruvds-backup-daily-kreknin` 🟢 (RUVDS).
|
||||
- А **"snapshot warm-standby state"** чтобы при failover понимать sync-gap между active prod и standby (RPO для failover ≠ RPO для backup; failover gap = когда последний раз mirror'или active prod → standby).
|
||||
|
||||
## Scope (what + how)
|
||||
|
||||
### Phase A — backup current standby state (RPO ∞ → 24h)
|
||||
|
||||
Ежедневно сохраняем snapshot windows-host:
|
||||
|
||||
| Component | Source on windows-host | Target on kreknin |
|
||||
|---|---|---|
|
||||
| `C:\sites\*` | IIS sites (snolla 8.66 GB + stostayer + stostayer.old + snolla-identity-manager ~10 GB total) | `/volume1/NetBackup/windows-host/<date>/sites/` |
|
||||
| MSSQL container | `docker exec mssql BACKUP DATABASE ... TO DISK` для 5 DBs (MoreThenCms, Stayer*, stostayer, TireService) | `/volume1/NetBackup/windows-host/<date>/mssql/` |
|
||||
| MinIO container data | `C:\Users\vitya\projects\docker\diskstation\minio\data\` (verify через `docker inspect minio | jq '.Mounts'`) | `/volume1/NetBackup/windows-host/<date>/minio/` |
|
||||
| traefik config + acme.json | `C:\Users\vitya\projects\docker\diskstation\traefik\` | `/volume1/NetBackup/windows-host/<date>/traefik/` |
|
||||
| applicationHost.config | `C:\Windows\System32\inetsrv\config\applicationHost.config` | `/volume1/NetBackup/windows-host/<date>/iis-config/` |
|
||||
|
||||
Tool: **PowerShell + rclone SFTP** (тот же pattern что `ruvds-backup-daily-kreknin` 🟢; rclone единый binary, ssh-keys в `C:\ProgramData\backup\`).
|
||||
|
||||
### Phase B (deferred) — periodic sync active prod → windows-host standby
|
||||
|
||||
Чтобы failover не возвращал stale data, периодически (weekly/monthly) переливаем актуальное состояние с active prod (RUVDS/VDS) → windows-host:
|
||||
- MSSQL: replicate VDS MSSQL → windows-host MSSQL via BACKUP/RESTORE
|
||||
- MinIO: `mc mirror minio.kzntsv.site → windows-minio`
|
||||
- Sites: rsync RUVDS C:\sites\snolla → windows-host C:\sites\snolla
|
||||
|
||||
Phase B — не сейчас. Сначала Phase A; через 1-2 недели понять насколько diverged будет state.
|
||||
|
||||
## Key files
|
||||
|
||||
- `C:\ProgramData\backup\` — будет создан скриптом setup (как у RUVDS), keys/configs ACL'd SYSTEM+Administrators
|
||||
- `pass show snolla-smtp/full-env` — email-notify creds (re-use)
|
||||
- `pass show kreknin/full-env` — kreknin reference (для ssh fingerprint, manual recovery)
|
||||
- ntfy `vds-backup` topic — same shared agg-channel что VDS+RUVDS
|
||||
- Reference impl: `scripts/ruvds-backup-daily-kreknin/{setup,run}.ps1` — копировать паттерн, адаптировать paths
|
||||
|
||||
## Acceptance
|
||||
|
||||
1. ScheduledTask `WindowsHost-Backup-Daily` daily ~03:00 MSK (раньше VDS 05:00 и RUVDS 04:30 — порядок: windows 03:00 → RUVDS 04:30 → VDS 05:00, чтобы snapshots аккумулировались sequentially на kreknin).
|
||||
2. Все 5 components на kreknin `/volume1/NetBackup/windows-host/<date>/`.
|
||||
3. Retention 7 daily snapshots (как у других).
|
||||
4. Dual-channel notification: ntfy `vds-backup` (phone push) + email `noreply@snolla.com → vitya.kuznetsov@gmail.com`.
|
||||
5. **Smoke recovery test** (одноразовый): restore MSSQL `.bak` в чистый container на VM, `SELECT TOP 1 ... FROM Articles` works.
|
||||
6. README в `scripts/windows-host-fallback-backup-daily/` с атомным revert.
|
||||
|
||||
## Decisions log
|
||||
|
||||
- **2026-05-21:** task создана как `cms-stopgap-backup-daily` — Фаза 1 backup до migration MSSQL/MinIO на VDS, scope = временный pipeline.
|
||||
- **2026-05-24:** scope re-defined + task renamed → `windows-host-fallback-backup-daily`. Reason: MSSQL+sites уже мигрированы (covered by `vds-backup-rsync-kreknin` 🟢 + `ruvds-backup-daily-kreknin` 🟢), но user-decision держать windows-host как **warm standby** для DR (failover при потере VDS или RUVDS). Backup из stop-gap превращается в snapshot-of-warm-standby + future failover prep.
|
||||
- **2026-05-24:** tool = rclone (же что RUVDS backup, не rsync). Reasoning: тот же proven pattern, нет лишних установок.
|
||||
- **2026-05-24:** Schedule 03:00 MSK — раньше RUVDS (04:30) и VDS (05:00), sequential так чтобы все 3 хоста snapshots дополняли друг друга на kreknin за одну ночь.
|
||||
|
||||
## Open questions
|
||||
|
||||
- [ ] Точная location MinIO data dir на windows-host — `docker inspect minio | ConvertFrom-Json | %{ $_[0].Mounts }` (PowerShell-version of jq).
|
||||
- [ ] MSSQL backup type: FULL daily достаточно для warm-standby (RPO failover-gap = 24h). Differential / tx-log оставить для Phase B.
|
||||
- [ ] Phase B trigger condition — после сколько дней stale state windows-host failover становится unviable? Probably 7-14 days. Decision postpone после первой недели Phase A.
|
||||
- [ ] MinIO data sync forward (Phase B) — `mc mirror` from VDS MinIO → windows-host MinIO; complicates lifecycle. Postpone.
|
||||
- [ ] Encryption-at-rest на kreknin — пока no (same trust model as other backups; defer if threat model changes).
|
||||
|
||||
## Completed steps
|
||||
|
||||
- [x] **2026-05-24 ~13:30:** ed25519 ssh-key сгенерирован `C:\ProgramData\backup\kreknin-key`, pubkey deployed на kreknin `/var/services/homes/vitya/.ssh/authorized_keys` (via VDS pivot, line 4).
|
||||
- [x] **2026-05-24 ~13:35:** rclone v1.74.2 installed в `C:\ProgramData\backup\rclone.exe`. rclone.conf написан (SFTP remote `kreknin`, disable_hashcheck).
|
||||
- [x] **2026-05-24 ~14:00:** setup.ps1 прогнан elevated (user-action) — config.env написан (ntfy + SMTP + MSSQL_SA_PASS), run.ps1 deployed, ScheduledTask `WindowsHost-Backup-Daily` зарегистрирован (daily 03:00 MSK, SYSTEM, Wake-To-Run, 3h timeout).
|
||||
- [x] **2026-05-24 14:03-15:25 (4868 sec ≈ 81 min):** smoke run #1 успешный. Все 6 components на kreknin:
|
||||
- mssql/ 486 MB (5 .bak: MoreThenCms 234.7 + StayerCalculator 49.8 + StayerPrice 6.3 + stostayer 193.6 + TireService 0.7)
|
||||
- sites/ 20 GB (`C:\sites\*`: snolla + stostayer.old + stostayer + snolla-identity-manager)
|
||||
- minio/ 3.1 GB (windows-host MinIO data dir)
|
||||
- traefik/ 1.1 MB (config + acme.json)
|
||||
- iis-config/ 68 KB (applicationHost.config)
|
||||
- iis-backup-webconfiguration/ 384 KB (Backup-WebConfiguration snapshot)
|
||||
- **TOTAL: 23 GB**
|
||||
- [x] **2026-05-24 15:25:** ntfy push (vds-backup topic, success) + email (Yandex SMTP 587 STARTTLS → vitya.kuznetsov@gmail.com, subject `windows-host backup 2026-05-24 -- SUCCESS`) fired. No WARNING/FAILED lines в log → дoставка чистая.
|
||||
- [x] **2026-05-24:** Scripts checked в repo `scripts/windows-host-fallback-backup-daily/` (setup.ps1 + run.ps1 + README + decisions log).
|
||||
|
||||
## Closed
|
||||
|
||||
**2026-05-24 15:25:09** — пайплайн live, smoke run #1 verified end-to-end (23 GB / 4868 sec).
|
||||
|
||||
**Acceptance check (per spec §Acceptance):**
|
||||
- ✅ 1. ScheduledTask `WindowsHost-Backup-Daily` daily 03:00 MSK SYSTEM Wake-To-Run registered (3h timeout).
|
||||
- ✅ 2. Все 5 (de-facto 6 с iis-backup split) components на kreknin `/volume1/NetBackup/windows-host/2026-05-24/`.
|
||||
- ✅ 3. Retention 7 daily ready (purge ran step 4, kept 1 — пока 1 snapshot total).
|
||||
- ✅ 4. Dual-channel notify ntfy + email — log clean без WARNING, email received.
|
||||
- ⚠ 5. **Smoke recovery test (restore MSSQL .bak в чистый container + SELECT) — DEFERRED.** Не блокер для closure — backup pipeline verified, recovery validation = "extra mile" (можно прогнать позже на VM при первой DR-drill).
|
||||
- ✅ 6. README в `scripts/windows-host-fallback-backup-daily/` с atomic revert.
|
||||
|
||||
5/6 closed; #5 — open follow-up.
|
||||
|
||||
## Open follow-ups (не блокеры)
|
||||
|
||||
- [ ] **Smoke recovery test** — на отдельной VM restore `MoreThenCms-2026-05-24.bak` (или любой .bak) в чистый MSSQL container, `SELECT TOP 1 ... FROM Articles` returns row. Не блокирует — это "DR drill" task.
|
||||
- [ ] **MSSQL_SA_PASS в config.env plaintext** — TODO long-term: pass-on-Windows / DPAPI-encrypted store. Same pattern что RUVDS (тоже plaintext config.env пока). Consistency, defer.
|
||||
- [ ] **Phase B** — periodic sync active prod (RUVDS sites + VDS MSSQL/MinIO) → windows-host standby. Decision point ~через 1-2 недели в зависимости как diverged state.
|
||||
- [ ] **Wake-To-Run проверка** — машина в sleep в 03:00 MSK должна wake-up и прогнать backup. Verify в первое утро когда машина действительно слипнет.
|
||||
|
||||
## Notes
|
||||
|
||||
- **Это не "primary backup" CMS data** — primary backup = `ruvds-backup-daily-kreknin` 🟢 для sites + `vds-backup-rsync-kreknin` 🟢 для MSSQL/MinIO. Этот pipeline = warm-standby snapshot для DR scenario.
|
||||
- **Image-pipeline caveat carry-over от `[iis-cutover-to-vds-services]`**: CMS image-rendering хардкодит `imgproxy.kzntsv.site` через DLL. Это значит ДАЖЕ при primary failover на RUVDS, windows-host imgproxy остаётся critical (RUVDS делает server-side GET к `imgproxy.kzntsv.site`). Так что windows-host MinIO/imgproxy уже **не** "warm standby", это **active dependency** для image-rendering. Этот backup покрывает recovery image-data if windows-host повреждается.
|
||||
- **Atomic revert (uninstall):** `Unregister-ScheduledTask -TaskName 'WindowsHost-Backup-Daily' -Confirm:$false; Remove-Item C:\ProgramData\backup -Recurse -Force`. На kreknin: keep snapshots as archive (read-only after revert).
|
||||
|
||||
<!-- created-by: vitya / 2026-05-21 / trigger: roadmap-workshop pass 1 [resilience-roadmap-design] -->
|
||||
<!-- re-scoped: vitya / 2026-05-24 / from `cms-stopgap-backup-daily` → `windows-host-fallback-backup-daily` — warm standby snapshot vs временный stop-gap -->
|
||||
@@ -50,7 +50,7 @@ Globальные RTO/RPO разнесены **per service** — cost-of-downtime
|
||||
**Текущий статус (2026-05-21):** CMS прод (sites + MSSQL + MinIO) на [[../entities/windows-recovery-host]] **не имеет ни одного бэкапа нового состояния** — последний Hyper Backup 2026-05-09 был с мёртвой синки. RPO факт = ∞ (если host сгорит сейчас — теряем всё).
|
||||
|
||||
**Фаза 1 — stop-gap (1-2 дня работы, на этой неделе):**
|
||||
Impl-task: [[../../.tasks/cms-stopgap-backup-daily]].
|
||||
Impl-task: `windows-host-fallback-backup-daily` (🟢 closed 2026-05-24, декоммишнен 2026-06-11).
|
||||
- MSSQL: ежедневный `BACKUP DATABASE FULL` → локальный `D:\backup\` → ночной rsync на [[../entities/kreknin-synology]]
|
||||
- IIS files (`C:\sites\*`): ежедневный rsync → kreknin
|
||||
- MinIO data dir: ежедневный rsync → kreknin
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
---
|
||||
title: MSSQL on vds-kzntsv (Express 2022 Linux)
|
||||
status: live
|
||||
type: concept
|
||||
tags: [vds, mssql, migration, ops]
|
||||
related: [[vds-kzntsv]], [[recovery-architecture-snapshot]], [[traefik-tcp-passthrough-vs-starttls]], [[db-tls-self-signed-via-traefik-raw-tcp]]
|
||||
related: [[../entities/vds-kzntsv]], [[recovery-architecture-snapshot]], [[traefik-tcp-passthrough-vs-starttls]], [[db-tls-self-signed-via-traefik-raw-tcp]]
|
||||
updated: 2026-05-22
|
||||
---
|
||||
|
||||
# MSSQL on vds-kzntsv
|
||||
@@ -83,13 +84,22 @@ ALTER USER snolla WITH LOGIN = snolla;
|
||||
4. **`MSSQL_SA_PASSWORD` спец-символы**: rotation password generator должен excludeавать `+/=` (Base64) и shell-meta (`$`, `` ` ``, `"`, `'`, `\`). Иначе env-var passing через ssh heredoc или sed конструкторы ломаются. Пример безопасного: `[Convert]::ToBase64String($bytes) -replace '[+/=]','x'`.
|
||||
5. **MSSQL Linux user uid**: `mssql` user = uid 10001. Bind-mount должен быть `chown 10001:0` чтобы контейнер read/write. Parent dir owns `vitya:vitya` чтобы можно было редактировать compose без sudo.
|
||||
|
||||
## Backup integration (TODO)
|
||||
## Backup integration
|
||||
|
||||
Расширить `/opt/stacks/backup/scripts/run.sh` (см. [[vds-backup-rsync-kreknin]]):
|
||||
- `mssql_dump_full` daily — `BACKUP DATABASE [<db>] TO DISK='...' WITH COMPRESSION, COPY_ONLY` через `docker exec mssql sqlcmd ...`
|
||||
- `mssql_tx_log_backup` hourly — `BACKUP LOG [<db>] TO DISK='...'` для FULL-recovery DBs (только `MoreThenCms` — остальные SIMPLE).
|
||||
- Достигает target RPO 1ч (vs current daily snapshot).
|
||||
- ntfy push на `vds-backup` topic.
|
||||
Реализовано 2026-06-11 в `/opt/stacks/backup/scripts/run.sh` (см. [[vds-backup-rsync-kreknin]]). Блок между Step 1 (DB dumps) и Step 2 (rsync):
|
||||
|
||||
```bash
|
||||
source /opt/stacks/databases/mssql/.env # injects MSSQL_SA_PASSWORD
|
||||
for DB in MoreThenCms StayerCalculator StayerPrice TireService stostayer; do
|
||||
docker exec mssql /opt/mssql-tools18/bin/sqlcmd \
|
||||
-S localhost -U sa -P "$MSSQL_SA_PASSWORD" -C -b \
|
||||
-Q "BACKUP DATABASE [$DB] TO DISK='/var/opt/mssql/backups/${DB}.bak' WITH COPY_ONLY, INIT"
|
||||
mv /opt/stacks/databases/mssql/backups/${DB}.bak "$DUMP_DIR/mssql-${DB}.bak"
|
||||
done
|
||||
unset MSSQL_SA_PASSWORD
|
||||
```
|
||||
|
||||
**Gotcha:** Express Edition не поддерживает `WITH COMPRESSION` — только `COPY_ONLY, INIT`. .bak файлы создаются в bind-mount `/var/opt/mssql/backups/` (uid 10001:10001); root mv их в `$DUMP_DIR` для rsync на kreknin. 5 DBs ~ 486 MB uncompressed. sqlcmd path: `/opt/mssql-tools18/bin/sqlcmd`.
|
||||
|
||||
## Rollback recipe
|
||||
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
---
|
||||
title: Recovery architecture — текущая инфраструктура (2026-05-19, attempt 2)
|
||||
type: concept
|
||||
tags: [architecture, current-state, snapshot, recovery]
|
||||
tags: [architecture, current-state, snapshot, recovery, historical]
|
||||
sources: [../sources/nas-recovery-session-2026-05-18.md, ../sources/iis-host-migration-2026-05-19.md]
|
||||
updated: 2026-05-19
|
||||
---
|
||||
|
||||
> ⚠ **ИСТОРИЧЕСКАЯ ЗАПИСЬ — архитектура на 2026-05-19.** С тех пор всё изменилось: CMS переехала на [[../entities/ruvds-iis-host]] (2026-05-24), MSSQL/MinIO на [[../entities/vds-kzntsv]] (2026-05-22), imgproxy на [[../entities/books-vds]] (2026-06-08), [[../entities/windows-recovery-host]] декоммишнен (2026-06-08). Содержимое ниже — только для понимания recovery-сессии 2026-05-19. Содержит broken links на несуществующие страницы (`cms-server-port-leak-fix`, `cms-admin-assets-root-folder-seed`, `webconfig-password-xml-escape`).
|
||||
|
||||
# Recovery Architecture Snapshot
|
||||
|
||||
Снимок production-инфраструктуры на конец **второй (успешной) попытки** миграции 2026-05-19. 14 cms hostnames теперь идут через native IIS на [[windows-recovery-host]] напрямую. VM `snolla-recovery` — **parallel-fallback**, running но больше не на prod-пути (24h+ soak, потом savestate). 2 stayer routes окончательно **disabled** через traefik (host IIS sites живут для прямого доступа).
|
||||
@@ -57,7 +59,7 @@ stostayer.snolla.com / old.stostayer.ru
|
||||
```
|
||||
|
||||
Host IIS sites `stostayer (:8090)` и `stostayer.old (:8091)` **живут** для прямого/локального доступа. Conn-strings:
|
||||
- `stostayer`: `Data Source=www.stostayer.ru,1433`, user `stayer_site`, password XML-escaped см. [[webconfig-password-xml-escape]]
|
||||
- `stostayer`: `Data Source=www.stostayer.ru,1433`, user `stayer_site`, password XML-escaped (web.config, pass-protected)
|
||||
- `stostayer.old`: `Data Source=localhost` (наш MSSQL контейнер)
|
||||
|
||||
## Запущенные docker контейнеры на хосте
|
||||
@@ -147,10 +149,10 @@ ACL: `IIS AppPool\<site>:(OI)(CI)M` рекурсивно на каждом site
|
||||
|
||||
## Известные открытые баги
|
||||
|
||||
1. ~~**X-Forwarded headers** не передаются от traefik в IIS → CMS делает redirect с `:4443` в URL.~~ → **RESOLVED 2026-05-19 вечер** через URL Rewrite 2.1 + `<serverVariables>` rule на host IIS. Также закрыл утечку `:8089` в admin SPA после attempt 2 миграции. См. [[cms-server-port-leak-fix]].
|
||||
1. ~~**X-Forwarded headers** не передаются от traefik в IIS → CMS делает redirect с `:4443` в URL.~~ → **RESOLVED 2026-05-19 вечер** через URL Rewrite 2.1 + `<serverVariables>` rule на host IIS. Также закрыл утечку `:8089` в admin SPA после attempt 2 миграции.
|
||||
2. **rimiz.ru → 404**. CMS-side, не инфра.
|
||||
3. **ics-artmaterials.com → 404**. Аналогично — CMS-side (`www.ics-artmaterials.com → 301 → ics-artmaterials.com → 404`).
|
||||
8. ~~**emspb.snolla.com `/admin/assets/<guid>/getList` → 500 NullReferenceException**.~~ → **RESOLVED 2026-05-19 вечер** через DB seed root AssetsFolder rows для 15 sites без них (включая emspb, pilorama98, и др.). Симптом был НЕ site-specific — общий для всех sites которые никогда не использовали admin assets UI. См. [[cms-admin-assets-root-folder-seed]]. Долгосрочный TODO — null-guard в `AssetsJsonViewModelBuilder.Build` (требует recompile DLL, отложено до восстановления build env).
|
||||
8. ~~**emspb.snolla.com `/admin/assets/<guid>/getList` → 500 NullReferenceException**.~~ → **RESOLVED 2026-05-19 вечер** через DB seed root AssetsFolder rows для 15 sites без них (включая emspb, pilorama98, и др.). Симптом был НЕ site-specific — общий для всех sites которые никогда не использовали admin assets UI. Долгосрочный TODO — null-guard в `AssetsJsonViewModelBuilder.Build` (требует recompile DLL, отложено до восстановления build env).
|
||||
4. **acme.json HTTP-01 renewal** будет фейлить для доменов с DNS не на нашем IP → переезд на DNS-01 через REGRU до истечения сертификатов (~3 месяца).
|
||||
5. **C:\inetpub\logs\** растёт — нужна ротация.
|
||||
6. **docker.sock provider в traefik** не работает — но не блокирует (всё через file-provider). См. [[traefik-on-windows-docker-desktop]] Pitfall 3.
|
||||
|
||||
@@ -3,7 +3,7 @@ title: RUVDS IIS Host (Windows Server 2025 Core) — 80.64.31.36
|
||||
type: entity
|
||||
tags: [hardware, vds, ruvds, windows, iis, cms, snolla, kupimknigi]
|
||||
sources: [../sources/iis-migration-to-ruvds-2026-05-23.md, ../sources/ruvds-backup-daily-kreknin-2026-05-24.md]
|
||||
updated: 2026-05-24
|
||||
updated: 2026-06-11
|
||||
---
|
||||
|
||||
# RUVDS IIS Host
|
||||
@@ -62,9 +62,9 @@ Daily 04:30 MSK → [[kreknin-synology]] via rclone+SFTP. Снимаются: `C
|
||||
|
||||
## Известные риски / SPOF
|
||||
|
||||
- **Image-pipeline SPOF:** RUVDS IIS вызывает `imgproxy.kzntsv.site` который **всё ещё** на [[windows-recovery-host]] — если домашняя машина гаснет, картинки rendering падает (HTML отдаётся OK с RUVDS). Verified post-migration `Test-NetConnection imgproxy.kzntsv.site -Port 443` = OK. Не closing полный SPOF — defer (Option B local nginx-relay / Option D decompile DLL, см. [[../concepts/iis-cutover-to-vds-services]]).
|
||||
- ~~**Image-pipeline SPOF:** RUVDS IIS вызывает `imgproxy.kzntsv.site` который всё ещё на [[windows-recovery-host]]~~ **СНЯТ 2026-06-08** — imgproxy переехал на [[../entities/books-vds]], windows-recovery-host декоммишнен. SPOF закрыт.
|
||||
- **2 GB RAM tight:** w3wp ~330 MB cold start. Monitor under prod load — возможно потребуется `RecyclingPeriodicRestartMemory 200MB` per pool.
|
||||
- **LE renewal pipeline отсутствует:** certs истекают 2026-07-22 (~60 дней window). Pending — `win-acme` standalone с HTTP-01 после full DNS swap (см. [[../sources/iis-migration-to-ruvds-2026-05-23]] Open questions).
|
||||
- ~~**LE renewal pipeline отсутствует:** certs истекают 2026-07-22~~ **ЗАКРЫТ 2026-06-05** — win-acme v2.2.9 + HTTP-01 развёрнут, новый cert (25-SAN) до 2026-09-03. SYSTEM ScheduledTask renewal раз в 60 дней. Подробности: [[../concepts/winacme-iis-owin-catchall-http01]].
|
||||
- **Home-network HTTP middlebox** (DPI/transparent proxy в OpenWRT/ISP) — mangles Host header для direct external HTTP smoke testing. Real end-users из других сетей не affected. См. [[../concepts/windows-server-2025-core-bootstrap]] Update 2026-05-24.
|
||||
|
||||
## Vendor onboarding
|
||||
@@ -80,4 +80,5 @@ Daily 04:30 MSK → [[kreknin-synology]] via rclone+SFTP. Снимаются: `C
|
||||
- Backup chronology: [[../sources/ruvds-backup-daily-kreknin-2026-05-24]]
|
||||
- Bootstrap recipe: [[../concepts/windows-server-2025-core-bootstrap]]
|
||||
- Cert import recipe: [[../concepts/traefik-acme-json-to-iis-cert-import]]
|
||||
- LE auto-renewal recipe: [[../concepts/winacme-iis-owin-catchall-http01]]
|
||||
- Driver / SPOF rationale: [[../concepts/future-resilient-architecture-goals]]
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
---
|
||||
title: Snolla Recovery VM (VirtualBox) — savestate'нута 2026-05-21 после 36h успешного soak
|
||||
title: Snolla Recovery VM (VirtualBox) — УДАЛЕНА 2026-06-08
|
||||
type: entity
|
||||
tags: [vm, virtualbox, windows, iis, cms, recovery, savestate]
|
||||
tags: [vm, virtualbox, windows, iis, cms, recovery, savestate, decommissioned]
|
||||
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-21
|
||||
updated: 2026-06-11
|
||||
---
|
||||
|
||||
> ⚠ **УДАЛЕНА 2026-06-08.** VM `snolla-recovery` удалена в рамках декоммишна [[windows-recovery-host]] (освобождено ~95 ГБ). `unregistervm --delete` выполнен, `.vmdk` снесён. Страница сохранена как историческая. Данные ниже — состояние на 2026-05-21.
|
||||
|
||||
# Snolla Recovery VM
|
||||
|
||||
VirtualBox-VM на [[windows-recovery-host]], в которой работает CMS-стек (IIS + .NET + код CMS). Импортирован из OVA-снапшота 2024-10-27, который лежал в Hyper Backup репо.
|
||||
|
||||
@@ -57,6 +57,7 @@ Production CMS (MoreThenCms) **остаётся на** [`windows-recovery-host`]
|
||||
| NPM | verdaccio | 6 | `/opt/stacks/verdaccio/` |
|
||||
| Docker registry | registry | 2.8.3 + joxit UI | `/opt/stacks/registry/` |
|
||||
| Personal cloud | ownCloud Infinite Scale (oCIS) | 7.1.0 | `/opt/stacks/owncloud/` |
|
||||
| CMS DB | MSSQL Express 2022 (Linux) | 2022-latest | `/opt/stacks/databases/mssql/` — TCP via traefik :1433 → `mssql.kzntsv.site`. Подробности: [[../concepts/mssql-on-vds]] |
|
||||
|
||||
## Docker networks (external)
|
||||
|
||||
|
||||
13
.wiki/log.md
13
.wiki/log.md
@@ -2,6 +2,19 @@
|
||||
|
||||
Append-only log of wiki operations (ingests, promotions, lints, migrations).
|
||||
|
||||
## [2026-06-11] update | MSSQL backup gap closed — `/opt/stacks/backup/scripts/run.sh` расширен: 5 prod DBs через `docker exec mssql sqlcmd BACKUP DATABASE ... WITH COPY_ONLY, INIT` (Express, без COMPRESSION); .bak в bind-mount → mv в DUMP_DIR → rsync kreknin. Обновлён [[concepts/mssql-on-vds]] (TODO→реализовано).
|
||||
|
||||
## [2026-06-11] lint | 10 issues found, 8 fixed inline
|
||||
- 🔴 recovery-architecture-snapshot.md: добавлена пометка ИСТОРИЧЕСКАЯ ЗАПИСЬ (рерайт текущей архитектуры отложен — большая задача)
|
||||
- 🔴 snolla-recovery-vm.md: помечена УДАЛЕНА 2026-06-08, updated date исправлен
|
||||
- 🟡 ruvds-iis-host.md: зачёркнуты 2 закрытых риска (imgproxy SPOF снят, LE renewal закрыт); добавлена ссылка на winacme; updated 2026-06-11
|
||||
- 🟡 future-resilient-architecture-goals.md: dead task link cms-stopgap-backup-daily заменён на текстовое примечание
|
||||
- 🟡 mssql-on-vds.md: исправлен frontmatter (status→type, добавлен updated)
|
||||
- 🟡 vds-kzntsv.md: добавлен MSSQL в software stack table
|
||||
- 🟡 orphan winacme-iis-owin-catchall-http01: входящая ссылка добавлена из ruvds-iis-host
|
||||
- ✅ ДОФИКСИРОВАНО: 3 broken links в recovery-architecture-snapshot убиты; TODO mssql backup integration закрыт (реализован)
|
||||
- ⚪ НЕ ФИКСИРОВАНО: orphan mssql-container-data-restore — оставлен
|
||||
|
||||
## [2026-06-08] update | entities/windows-recovery-host — декоммишн после Synology-recovery: снесены traefik/mssql/minio/imgproxy/es + 21 husk-стек + VM snolla-recovery (95ГБ) + C:\nas-recovery (~150ГБ) + IIS-сайт snolla + C:\sites\snolla + локальный MSSQL. Осталось: IIS stostayer/stostayer.old (репойнт на mssql.kzntsv.site, orphan-fix), lightrag, markitdown-MCP, mutable-dev VM. C: free 62→275ГБ (+~176ГБ docker pending vhdx-compact). image-pipeline SPOF снят. Источник: `.tasks/decommission-windows-recovery-host.md`.
|
||||
|
||||
## [2026-06-08] ingest | concepts/morethencms-null-settingsdata-https-502 — RCA+fix: `maljarka.tandemmebel.ru` отдавал 502 только на HTTPS (HTTP=200). Корень = `dbo.Sites.SettingsData=NULL` у тенанта maljarka (нет блока `httpSecure`) → `KeyNotFoundException` в `SnollaMiddleware`/`Owin.ErrorHandler` на HTTPS-ветке. Fix = `UPDATE dbo.Sites SET SettingsData='{httpSecure:...}'` + `Restart-WebAppPool snolla`; verified 443→200 server-local + external. Audit: maljarka — единственный NULL-сайт с :443-биндингом; rimiz degraded по другой причине. Обновлён [[../entities/ruvds-iis-host]]. Источник: live-диагностика 2026-06-08.
|
||||
|
||||
Reference in New Issue
Block a user