# 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 | 2–3G | prune old tarballs до миграции | | owncloud | `/volume1/docker/owncloud/` 187M + дубль 195M | — | **отказ**, заменяется seafile | | seafile | (новый) | 30–40G | green install на VDS | | registry | `/volume1/docker/infrastucture/registry/` 99G | 5–15G | **`registry garbage-collect` ДО миграции** (write op, требует read-only/stopped registry) | | hermes | `/volume1/docker/hermes/` 0 (пусто на kreknin) | ~10G (user estimate) | TBD — что это, где state | Раскладка после cleanup: ~55–75G data + ~5G OS/docker → ~80–100G с 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 → ` в 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).