Add ADR after migration to timeweb cloud
This commit is contained in:
@@ -0,0 +1,79 @@
|
|||||||
|
# Переезд сервера с 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`.
|
||||||
+2
-1
@@ -62,5 +62,6 @@
|
|||||||
Новые сверху.
|
Новые сверху.
|
||||||
|
|
||||||
| Дата | Запись | Статус |
|
| Дата | Запись | Статус |
|
||||||
| ---------- | ------------------------------------------------------------------------------- | ------ |
|
| ---------- | ------------------------------------------------------------------------------------- | ------ |
|
||||||
|
| 2026-05-23 | [Переезд сервера с Yandex Cloud на Timeweb VPS](ADR-2026-05-23-migrate-to-timeweb.md) | — |
|
||||||
| 0000-00-00 | [Вести историю решений в виде ADR](ADR-0000-00-00-record-architecture-decisions.md) | — |
|
| 0000-00-00 | [Вести историю решений в виде ADR](ADR-0000-00-00-record-architecture-decisions.md) | — |
|
||||||
|
|||||||
Reference in New Issue
Block a user