# Переезд сервера с Yandex Cloud на Timeweb VPS - Дата: 2026-05-23 ## Контекст `rivendell-v2` жил на VM в Yandex Cloud. Одновременно копились три проблемы: - **Цена.** ≈ 2 887 ₽/мес за конфигурацию, которую другие провайдеры дают дешевле и мощнее. - **Потолок RAM.** 4 ГБ, ≈ 80 % заняты на штатной нагрузке. Любой всплеск (миграции БД, индексация Outline, restic) — конкуренция за память и риск OOM. Расти на этом тарифе дальше — только заметно дороже. - **Медленный диск.** Чтобы сдержать цену в YC, использовался дешёвый HDD вместо SSD/NVMe — страдала отзывчивость (Gitea, Outline, тёплый старт контейнеров, restic check/forget). Это личный сервер — допустим мягкий даунтайм. ## Рассмотренные варианты - **Остаться в YC, поднять тариф** (больше RAM/SSD на месте). Отвергнуто: YC уже дороже альтернатив, апгрейд поднимает цену непропорционально приросту — те же три проблемы решаются дороже, чем переездом. - **Свой / домашний сервер** (железо под контролем, без ежемесячной аренды). Отвергнуто: дома нет надёжного аптайма 24/7 (питание, интернет-канал, железо), а сервисы должны быть всегда доступны. - **Переезд на Timeweb Cloud VPS** — выбранный вариант. ## Решение Переносим на Timeweb Cloud VPS: ≈ 1 980 ₽/мес, 8 ГБ RAM (×2), 4 ядра (×2, гарантия CPU 100 % вместо 50 %), 80 ГБ NVMe вместо 120 ГБ HDD. Один переезд закрывает все три причины сразу. Рамки решения: - Переезжает **только compute** (VM с приложениями). S3 (restic, бекапы), Container Registry, Postbox SMTP и DNS-зона `vakhrushev.me` остаются в Yandex и используются с новой машины. - Стратегия — **cold cutover**: погасить сервисы на источнике, раскатать ansible на новом сервере без запуска приложений (сохраняя uid/gid), перенести данные `rsync`'ом, запустить, переключить DNS. - Диск: фаза 1 — один 80 ГБ NVMe (всего 22 ГБ данных + 17 ГБ системных, влезает с запасом). «Холодный» второй диск под крупные данные — отдельная фаза 2, не на критическом пути. - Источник не удаляется сразу после cutover: держим «холодным запасным» пару недель ради отката. Детальный план — [`../drafts/timeweb.md`](../drafts/timeweb.md), фактическое выполнение — [`../drafts/timeweb-migration-log.md`](../drafts/timeweb-migration-log.md). ## Последствия - `+` −907 ₽/мес (≈ −31 %) при вдвое большем RAM и CPU и NVMe-диске — закрыты все три исходные проблемы. - `+` Запас по RAM убирает OOM-риск при всплесках нагрузки. - `+` Диверсификация по облакам: раньше сервер и данные были в одном аккаунте Yandex Cloud, теперь compute в Timeweb, а бэкапы (S3) — в Yandex. Если заблокируют или потеряем доступ к одному провайдеру, данные остаются доступны через другой. - `-` Диск меньше (80 ГБ NVMe против 120 ГБ HDD), но сейчас занят примерно наполовину — запас есть, фаза 2 с холодным диском не срочная. - `-` Сохраняется зависимость от Yandex Cloud (S3, Container Registry, Postbox SMTP, DNS) — переезд её не устраняет. - `-` Timeweb активно блокирует Telegram (в отличие от YC) — интеграция отвалилась. Затронуты `transcriber`, `remembos` и нотификации о бэкапах. Ожидаемо; нотификации остались через почту, второй канал рассматривается через Matrix. - `-` Из-за тех же блокировок Timeweb перестали обновляться некоторые RSS-фиды в `miniflux`. - `-` Для доступа к `cr.yandex` вне YC появился долгоживущий OAuth-токен Яндекса в vault (`yc_oauth_token`) с широким blast radius. При желании сузить — IAM-ключ сервисного аккаунта отдельной итерацией. - Инвентарь временно раздвоен (`production.yml` + `timeweb.yml`); после стабилизации источник удаляется, `timeweb.yml` → `production.yml`.