54 lines
3.6 KiB
Markdown
54 lines
3.6 KiB
Markdown
# Обновление ОС пересборкой на свежем сервере
|
|
|
|
- Дата: 2025-12-13
|
|
|
|
## Контекст
|
|
|
|
На сервере стояла Ubuntu 22.04, и к концу 2025 пора было обновляться.
|
|
Обновлять живую боевую систему «на месте» (`do-release-upgrade`) не
|
|
хотелось — это рискованно и тяжело откатывается, если что-то пойдёт не
|
|
так на работающем сервере.
|
|
|
|
## Рассмотренные варианты
|
|
|
|
- **Обновление «на месте»** (`do-release-upgrade` на живой системе).
|
|
Отвергнуто: риск сломать рабочий сервер, нет простого отката.
|
|
- **Пересборка на свежем сервере** (выбран). Поднять новый сервер с
|
|
целевой ОС, накатать ansible, прицепить диск с данными, развернуть
|
|
приложения — старый сервер остаётся нетронутым как точка отката.
|
|
Заодно — почистить мусор, накопившийся за время работы прошлого сервера.
|
|
|
|
## Решение
|
|
|
|
Обновляем ОС через пересборку на свежем сервере. Метод опирается на три
|
|
предпосылки:
|
|
|
|
- **Деплой без запуска контейнеров.** Сводные плейбуки
|
|
(`playbook-all-setup`, `playbook-all-applications`) и тег `run-app`
|
|
позволяют раскатать пользователей, каталоги и конфиги, но НЕ запускать
|
|
приложения (`--skip-tags run-app`) — данные переносятся в «тихую»
|
|
систему (коммиты `5b53cb3`, `48bb8c9`, `67df03e`).
|
|
- **Данные на отдельном диске**
|
|
([ADR-2025-12-07](ADR-2025-12-07-app-data-on-separate-disk.md)) — диск
|
|
с данными прицепляется к новому серверу.
|
|
- **Фиксированные uid/gid.** Заранее закрепили uid/gid всех
|
|
пользователей приложений (роль `owner`, коммит `c2ea2cd`). Это
|
|
критично: иначе при пересоздании пользователей на новом сервере
|
|
uid/gid могли бы сдвинуться, и данные приложений на отдельном диске
|
|
оказались бы с чужим владельцем.
|
|
|
|
Порядок: сначала вся подготовка (отдельный диск, перенос данных на него,
|
|
фиксация uid/gid), затем пересборка на новом обновлённом сервере. Перенос
|
|
прошёл без проблем.
|
|
|
|
## Последствия
|
|
|
|
- `+` Обновление ОС без риска для живой системы; откат = вернуться на
|
|
старый сервер.
|
|
- `+` Получился воспроизводимый процесс миграции — позже переиспользован
|
|
при переезде в Timeweb как «холодное переключение» (cold cutover)
|
|
([ADR-2026-05-23](ADR-2026-05-23-migrate-to-timeweb.md)).
|
|
- `+` Фиксация uid/gid стала постоянным инвариантом проекта.
|
|
- `-` Метод требует заранее подготовленных предпосылок (фикс uid/gid +
|
|
данные на отдельном диске); без них он не работает.
|