80 lines
5.5 KiB
Markdown
80 lines
5.5 KiB
Markdown
# Переезд сервера с 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 ГБ данных, влезает с
|
||
запасом). «Холодный» второй диск под крупные данные — отдельная
|
||
фаза 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`.
|