chore(.tasks): add vds-kzntsv-bootstrap task (160 SSD Rusonyx, infra migration off kreknin)

After NAS incident 2026-05-18 — план вынести инфраструктурные сервисы (gitea/verdaccio/seafile/registry/hermes) с kreknin Synology на облачный VDS Rusonyx 160 SSD (2500 ₽/мес, 6 vCPU / 8GB RAM / 160GB SSD).

Размеры с kreknin /volume1/docker/*: gitea 2.6G, verdaccio 8.5G (prune до ~3G), owncloud → replace with seafile ~30-40G, registry 99G (GC до ~5-15G), hermes 10G (Nous Research agent self-host, LLM external).

Tier-decision history записана в Decisions log: 160 → 80+addon → 160 final (user choice: operational simplicity over 6k₽/год экономии).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-19 16:28:29 +03:00
parent 2e2290a709
commit 75b828754c
2 changed files with 89 additions and 0 deletions

View File

@@ -1,6 +1,15 @@
# Task Board # Task Board
_Updated: 2026-05-19_ _Updated: 2026-05-19_
## ⚪ [vds-kzntsv-bootstrap] — поднять облачный VDS под gitea/verdaccio/seafile/registry/hermes
**Status:** ready (планирование 2026-05-19; tier финализирован user'ом — **160 SSD Rusonyx, 2500 ₽/мес**, 6 vCPU / 8GB RAM / 160GB SSD)
**Where I stopped:** размеры сняты с kreknin, hermes-профиль уточнён, tier выбран **160 SSD**. Detailed план в [vds-kzntsv-bootstrap.md](vds-kzntsv-bootstrap.md).
**Open questions:** owncloud дубль (`docker/owncloud/` vs `docker/personal/owncloud/`) — какой live для миграции данных в seafile; DNS-cut стратегия; OS на VDS (Ubuntu 24.04 LTS recommended).
**Next action:** (1) registry GC + verdaccio prune **на kreknin** до миграции (write-op на kreknin, требует согласия user'а); (2) закупить 160 SSD у Rusonyx + получить IP; (3) DNS A-запись `vds.kzntsv.site` в REGRU.
**Branch:** master
---
## 🔴 [iis-on-host-migration] — attempt 2: 11 cms LIVE на host IIS:8089, 24h soak в процессе ## 🔴 [iis-on-host-migration] — attempt 2: 11 cms LIVE на host IIS:8089, 24h soak в процессе
**Status:** active (2026-05-19 вечер — 11 main cms routes мигрированы, smoke clean, 2 phone-tests passed; 2 stayer routes ещё на VM до отдельного решения; VM running parallel — НЕ savestate'ить). **Status:** active (2026-05-19 вечер — 11 main cms routes мигрированы, smoke clean, 2 phone-tests passed; 2 stayer routes ещё на VM до отдельного решения; VM running parallel — НЕ savestate'ить).
**Done:** bak-серия `.bak-pre-attempt2-2026-05-19` для 13 yml; IIS binding `snolla *:8089` + Stop/Start Website; loop-detect через `host.docker.internal:8089` ≠ NAT loop (resolves to 192.168.65.254 host gateway) ✅; 11 cms yml (snolla, rimiz, labtools, labtoolspro, pilorama98, tandemmebel, emspb, kupimknigi, maljarka, sestech, isc-artmaterials) patched `:18080 → :8089`; host-side smoke 20 hostnames → все `Server: Microsoft-IIS/10.0` ✅; 📱 phone-tests (mobile internet): `emspb.ru` ✅, `labtools.ru` ✅; traefik logs clean (only known docker.sock noise); pre-existing CMS issues подтверждены и НЕ regression: `rimiz.ru/ics-artmaterials.com 404` (CMS-routing); `snolla.com` 301 → `on.snolla.com` (canonical default subdomain), `on/pilorama98/labtools/emspb.snolla.com` 200 OK. **Done:** bak-серия `.bak-pre-attempt2-2026-05-19` для 13 yml; IIS binding `snolla *:8089` + Stop/Start Website; loop-detect через `host.docker.internal:8089` ≠ NAT loop (resolves to 192.168.65.254 host gateway) ✅; 11 cms yml (snolla, rimiz, labtools, labtoolspro, pilorama98, tandemmebel, emspb, kupimknigi, maljarka, sestech, isc-artmaterials) patched `:18080 → :8089`; host-side smoke 20 hostnames → все `Server: Microsoft-IIS/10.0` ✅; 📱 phone-tests (mobile internet): `emspb.ru` ✅, `labtools.ru` ✅; traefik logs clean (only known docker.sock noise); pre-existing CMS issues подтверждены и НЕ regression: `rimiz.ru/ics-artmaterials.com 404` (CMS-routing); `snolla.com` 301 → `on.snolla.com` (canonical default subdomain), `on/pilorama98/labtools/emspb.snolla.com` 200 OK.

80
vds-kzntsv-bootstrap.md Normal file
View File

@@ -0,0 +1,80 @@
# vds-kzntsv-bootstrap
## Goal
Поднять облачный VDS `vds.kzntsv.site` (Rusonyx) и вынести туда ключевые инфраструктурные сервисы пользователя, чтобы не зависеть от собственного железа (мёртвая NAS показала single-point-of-failure). Цель — устранить риск повторения 2026-05-18 для **инфраструктурного** слоя (gitea/verdaccio/seafile/registry/hermes); production CMS (MoreThenCms) остаётся на [[windows-recovery-host]] и обсуждается отдельно в [[future-resilient-architecture-goals]].
После миграции [[kreknin-synology]] остаётся как backup target, не как live host инфры.
## Сервисы под миграцию (snapshot 2026-05-19)
Источник размеров — `du -sh /volume1/docker/*/` на kreknin (см. Decisions log 2026-05-19).
| Сервис | Сейчас на kreknin | После cleanup / на VDS | План |
|---|---|---|---|
| gitea | `/volume1/docker/gitea/` 2.6G | ~2.6G | lift-and-shift (compose + data tar) |
| verdaccio | `/volume1/docker/personal/verdaccio/` 8.5G | 23G | prune old tarballs до миграции |
| owncloud | `/volume1/docker/owncloud/` 187M + дубль 195M | — | **отказ**, заменяется seafile |
| seafile | (новый) | 3040G | green install на VDS |
| registry | `/volume1/docker/infrastucture/registry/` 99G | 515G | **`registry garbage-collect` ДО миграции** (write op, требует read-only/stopped registry) |
| hermes | `/volume1/docker/hermes/` 0 (пусто на kreknin) | ~10G (user estimate) | TBD — что это, где state |
Раскладка после cleanup: ~5575G data + ~5G OS/docker → ~80100G с headroom.
## Тариф VDS (Rusonyx, https://www.rusonyx.ru/hosting/vps/#ssd)
**Выбран (финал, user 2026-05-19): `160 SSD` — 2500 ₽/мес (6 vCPU 2.6GHz, 8GB RAM, 160GB SSD, 200 Mbit, free IP).**
Reasoning:
- 160GB headroom ~45% на старте после миграции (~60-70G data + 5G OS) — годен на 2-3 года без add-on operations.
- 8GB RAM overkill для baseline (~2.1G) но даёт реальный запас под burst и любые будущие сервисы.
- User выбрал «купи-и-забудь» вариант over 80 SSD+add-on; +1000 ₽/мес vs 80 SSD = +12k₽/год за operational simplicity.
**Не выбраны:**
- 40 SSD — 4GB RAM впритык, OOM risk под seafile+registry burst.
- 80 SSD — RAM ок, но 80GB диск требует add-on (цены непрозрачны без звонка в managers).
- 220+ SSD — overkill без local LLM-inference.
## Open questions
- [ ] **Hermes** — Nous Research agent runtime (https://hermes-agent.nousresearch.com/). Открытые подвопросы:
- self-host их open-source / docker image, или client-wrapper к managed API?
- если self-host — какой репо/образ, какие порты, какие external deps (vector DB, LLM endpoint)?
- state где живёт (postgres / sqlite / files / vector store)?
- 10G — это weights/embeddings/vector store/document cache?
- влияет на RAM-выбор тарифа (если local LLM inference — 8GB мало, нужно 16+)
- [ ] Owncloud дубль `docker/owncloud/` vs `docker/personal/owncloud/` — какой live, нужны ли данные при переезде на seafile?
- [ ] DNS-cut стратегия: A-record `vds.kzntsv.site` сразу, или сначала test через IP?
- [ ] Backup VDS → kreknin: какой механизм? rsnapshot / restic / borg / Hyper Backup pull через SFTP?
- [ ] Какой OS на VDS: Ubuntu LTS 24.04 / Debian 12? Зависит от docker-engine vendoring привычки.
## Key files
(пока нет; появятся по ходу — compose-файлы, ansible-плейбук если будет, sync scripts)
Связанные wiki-страницы (для контекста):
- `.wiki/entities/kreknin-synology.md` — текущий host kreknin
- `.wiki/concepts/future-resilient-architecture-goals.md` — глобальные цели resilience
- `.wiki/concepts/recovery-architecture-snapshot.md` — текущая prod-инфра
## Decisions log
- **2026-05-19 (final):** User выбрал **160 SSD (2500 ₽/мес)**. Reasoning user'а — operational simplicity, не звонить в support за add-on ценой, есть запас на 2-3 года. +1000 ₽/мес vs 80 SSD приемлемо.
- **2026-05-19 (промежуточный заход, откатан):** Рекомендовалось 80 SSD + disk add-on исходя из того что 8GB RAM избыточно после уточнения hermes-профиля. User решил что 500 ₽/мес экономии не стоят звонков в support и риска что add-on окажется дорогой.
- **2026-05-19 (первый заход):** Изначально 160 SSD по budget-расчёту headroom; затем переоценено вниз после уточнения hermes; затем user вернул обратно к 160 SSD по user-preference.
- **2026-05-19:** Owncloud → seafile. Reasoning: пользователь решил заменить (rationale пока не записан).
- **2026-05-19:** Registry **garbage-collect ДО миграции** (на kreknin), чтобы не тащить 99G чтобы потом всё равно чистить.
- **2026-05-19:** Verdaccio тоже prune ДО миграции, по аналогичной логике.
## Next actions (по порядку)
1. **Уточнить hermes** — что это, где его state.
2. **Решить owncloud дубль** — нужны ли данные для миграции в seafile или green install.
3. **Registry GC на kreknin** — stop писателей, `docker run --rm -v ...:/var/lib/registry registry:2 garbage-collect /etc/docker/registry/config.yml`, measure delta. ⚠️ prod-changing, согласие от user.
4. **Verdaccio prune**`npm cache clean` + удалить old tarballs из storage. (low risk, restorable из upstream npm)
5. **Закупить тариф 160 SSD у Rusonyx**, получить IP. (user-action)
6. **DNS** — A `vds.kzntsv.site → <IP>` в REGRU.
7. **Bootstrap VDS** — OS (Ubuntu 24.04?), docker, fail2ban, ssh hardening, firewall.
8. **Per-service migration** (gitea → tarball+restore, verdaccio → tar storage, seafile → green install, registry → rsync, hermes → repo+state).
9. **Backup pipeline** VDS → kreknin (или cloud — Backblaze B2 для off-site, см. [[future-resilient-architecture-goals]]).
10. **DNS cut** к production, удаление сервисов с kreknin (с paranoid keep-on-kreknin-7days).