# Обновление и откат

## Перед началом

Сохраните прежние `.cfe`, digest образа и `SHA256SUMS`. Убедитесь, что активных
сеансов нет: `/health` должен вернуть `activeSessions: 0`. Ключ организации и
том состояния находятся вне образа; не копируйте их в каталог выпуска.

## Замена сервера 0.4.0 → 0.5.0

1. Загрузите новый архив `docker load` и запишите digest.
2. Убедитесь, что в старом контейнере нет активных сеансов, и остановите его.
   Внешний файл ключа и прежний том не удаляйте.
3. Создайте том `a4-server-state`, один раз перенесите в него содержимое
   прежнего тома и запустите `a4-server:0.5.0` с тем же `organization.key`,
   новым томом и точным digest.

   Укажите техническое имя прежнего тома из команды запуска старого сервера и
   выполните перенос до первого запуска нового контейнера:

   ```sh
   OLD_STATE_VOLUME='<имя прежнего тома>'
   test -n "$OLD_STATE_VOLUME"
   docker volume create a4-server-state
   docker run --rm --entrypoint /bin/sh \
     --volume "$OLD_STATE_VOLUME:/from:ro" \
     --volume a4-server-state:/to \
     a4-server:0.5.0 \
     -c 'set -eu; test -z "$(find /to -mindepth 1 -print -quit)"; cp -a /from/. /to/'
   ```

   Проверка пустого каталога назначения не даёт случайно смешать состояния
   двух установок. Прежний том команда не изменяет и не удаляет.
4. Проверьте `/health`: версия 0.5.0, договор 1, активных сеансов 0.

## Обновление расширения 0.4.0.1 → 0.5.0.1

Техническое имя изменилось, поэтому это управляемая замена, а не штатное
обновление одного объекта. Остановите сеансы пользователей и сделайте резервную
копию базы. Не удаляйте прежнее расширение до переноса: добавьте рядом
`A4-1C-0.5.0.1.cfe`, снимите у него безопасный режим и защиту от опасных
действий, обновите конфигурацию базы и дайте пользователям роль
`A4_ОсновнаяРоль` вместо прежней роли. На время переноса прежнее расширение
остаётся установленным, но неактивным.

При первом чтении A4 находит прежние области хранения, переносит адрес и ключ в
области A4, проверяет чтение ключа и только затем удаляет старые значения.
Повторный запуск миграцию не повторяет. Адрес и ключ вводить заново не требуется.

После обновления откройте форму настройки. Убедитесь, что прежние адрес и ключ
подхвачены без повторного ввода, сервер отвечает и версии совместимы. Только
после этого снимите прежнее расширение и снова обновите конфигурацию базы.
Затем выполните контрольный круг из инструкции установки.

## Откат

1. Убедитесь, что активных сеансов нет.
2. В форме **«Администрирование → Настройка подключения»** нажмите
   **«Подготовить откат к 0.4.0.1»**. Команда один раз восстанавливает
   ключ в формате, который читает старая версия. Ключ не показывается и не
   записывается в файл.
3. Остановите новый контейнер и запустите прежний образ 0.4.0 по сохранённому
   digest с прежними внешними ключом и томом.
4. Снимите `A4Office` и установите сохранённый CFE 0.4.0.1.
5. Проверьте `/health` и повторите круг на копии файла.

Подготовка отката записывает адрес и ключ обратно в прежние области хранения,
не печатая ключ и не сохраняя его в файлах. После возврата на 0.5.0.1 миграция
снова переносит данные в A4. Долговременная эксплуатация 0.4.0.1 не
рекомендуется.
