5.9 KiB
016. Версионируемый комплект развёртывания
Status: Accepted
Frontend и backend выпускаются независимо. Выбор их версий непосредственно
на сервере перекладывает подбор совместимой пары на оператора при каждом
обновлении. Принято решение выпускать комплект в репозитории deploy:
его релиз закрепляет проверенную пару конкретных версий обоих образов.
Независимые релизы компонентов сохраняются; выпуск компонента сам по себе
не означает готовность нового релиза развёртывания.
Оператор подключается к серверу по SSH и одной командой запускает обновление до выбранного релиза развёртывания. При обновлении backend команда должна скачать образы до его остановки, сохранить резервную копию остановленной базы, выполнить миграции и проверить запуск. Ограничения ADR 015 сохраняются: один backend, краткий простой, неуспешная миграция блокирует запуск; откат образа не восстанавливает базу автоматически.
Доставка и подготовка сервера
На сервере хранится Git checkout deploy. Команда обновления получает
выбранный тег комплекта и загружает закреплённые образы из Nexus;
сборка приложения на сервере не требуется.
Docker с Compose, внешний HTTPS и доступ к registry считаются подготовленными. README комплекта должен описывать последовательность этой разовой подготовки и подключения существующей установки. Автоматическое provisioning сервера в комплект не входит.
Рабочие данные, сертификат доверия T-Bank и секреты остаются вне обновляемого
checkout. При подключении существующей установки сохраняются её БД,
JWT secret и ключ шифрования. Сертификат certs/tbank-ca.pem монтируется
в контейнер только для чтения; путь внутри контейнера задаётся через
TBANK_CA_CERT_PATH. Этот сертификат не обслуживает входящий HTTPS.
Резервные копии
Перед обновлением backend создаётся согласованная копия всего каталога данных
при остановленном backend. Копии хранятся в локальном backups/ вне checkout,
без автоматического удаления; очистку выполняет оператор вручную.
Такие копии позволяют восстановиться после неудачного обновления, но сами
по себе не защищают от потери диска сервера.
Обновление и сбои
Если релиз меняет только frontend, обновляется только его контейнер: backend не останавливается, миграции и резервное копирование БД для этого обновления не выполняются. Этот путь применим только при неизменных образе и конфигурации backend.
Если миграции прошли, но новый backend не прошёл проверку запуска, обновление завершается с ошибкой, неисправный backend останавливается. Оператор получает диагностику, сведения о предыдущей версии и путь к резервной копии. Автоматического отката нет: прежний образ может быть несовместим с новой схемой. Откат образа и восстановление базы остаются отдельными явными действиями по правилам ADR 015.
Выпуск комплекта
После публикации образов компонентов отдельно готовится релиз deploy:
фиксируется совместимая пара версий, выполняется её проверка и выпускается
тег комплекта. Публикация компонента не создаёт релиз комплекта автоматически
и не запускает обновление сервера. Оператор выбирает выпущенный тег при
запуске команды развёртывания.
Состояние реализации
Комплект и команда реализованы в отдельном репозитории deploy.
Публикация первого тега и обновление рабочего сервера — отдельные действия.
Контейнерная поставка описывает границы,
пошаговая инструкция находится в README комплекта.