Files
admin/vds-kzntsv-bootstrap.md
vitya 75b828754c 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>
2026-05-19 16:28:29 +03:00

6.9 KiB
Raw Blame History

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 prunenpm 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).