Обновление между версиями 2.x
- Сделайте резервную копию базы данных (а также
plugins/иconfigure/). - Остановите сервис:
bin/shutdown.sh. - Замените старые
lib/иbin/на соответствующие каталоги из дистрибутива новой версии. - Запустите сервис:
bin/startup.sh. Liquibase автоматически выполнит миграции базы данных новой версии, а проба готовности вернёт 200 только после их завершения.
При обновлении кластера остановите все экземпляры до запуска новой версии, чтобы старая и новая версии никогда не читали и не записывали данные одновременно. Выпущенные миграции никогда не изменяются, и каждая версия проверяется на всех поддерживаемых базах данных по сценарию «обновление с предыдущей версии».
Миграция с 1.x
1.x хранит данные в другом наборе таблиц, и 2.x их не читает. Путь миграции: установите 2.x на новую базу данных и завершите инициализацию, остановите сервис, затем импортируйте учётные записи, роли и меню из старой базы данных в арендатора (tenant):
# 先预演:只生成报告,不写入
bin/import-legacy.sh --source-url jdbc:mysql://old-db:3306/authx --source-user authx --tenant default
# 确认报告后正式导入
bin/import-legacy.sh --source-url jdbc:mysql://old-db:3306/authx --source-user authx --tenant default --applyОбе команды записывают logs/legacy-import-report.json, в котором перечислено, что было (или будет) создано, что пропущено и почему, а также новые идентификаторы, соответствующие каждому объекту из старой системы. Поместите JDBC-драйвер старой базы данных в drivers/ и передайте пароль через GRANTFORGE_LEGACY_SOURCE_PASSWORD (если он не указан, скрипт запросит его). Повторный запуск импорта только достраивает недостающее.
Правила импорта:
- Учётные записи сохраняют исходные пароли, которые при первом входе автоматически перехешируются новым алгоритмом. Записи, нарушающие правила имени пользователя в 2.x (3–64 буквы, цифры или
._@-), без пароля или чьё имя уже занято другим арендатором, пропускаются. - Роли сохраняют имена; коды приводятся к нижнему регистру (
GLY→gly). - Меню становятся ресурсами приложения
legacy: меню с адресами, содержащими#, становятся группировками, остальные адреса — страницами, а меню под страницей — кнопками. Адрес меню и его HTTP-метод превращаются в API-ресурсapi:<方法>:<路径>; адреса, заканчивающиеся на*, становятся<路径>/**и сопоставляются по сегментам пути, а не по символьным префиксам — каждый такой случай перечислен в отчёте для проверки. - Мигрируют только явные разрешения: в 1.x доступ к адресам, зарегистрированным как меню, имел любой пользователь, в 2.x — нет.
