Как установить несколько версий Directum RX на одну ВМ – новый удобный подход

21 2

В процессе разработки для Directum RX может возникать необходимость использовать одновременно несколько различных версий системы. Однако стандартное решение среды разработки DDS рассчитано на работу только с одним проектом и только на одной версии системы. Известно несколько способов, позволяющих переключаться между различными версиями на одном компьютере, но все они требуют существенных временных затрат прикладного разработчика и чаще всего оказываются неоправданно сложными. 

В статье расскажем о подходе, упрощающем переключение между несколькими версиями Directum RX, поделимся парой хитростей, а также по шагам разберем процесс установки.  

Для чего разработчику нужно несколько версий RX

В каких случаях может потребоваться одновременное использование нескольких версий Directum RX? Перечислим типовые ситуации, с которыми может столкнуться разработчик:

  • Необходимо в течение дня переключаться между несколькими проектами у разных заказчиков;
  • Разработчик в данный момент занимается одним проектом, но требуется решить проблему другого заказчика, у которого установлена другая версия системы;
  • Нужно прорецензировать код другого разработчика в его ветке;
  • Хочется ознакомиться с новой версией Directum RX, не прерывая работу над текущим проектом;
  • Необходимо перенести наработки из одного проекта в другой, открыть две DDS с разными исходниками.

Как это реализовать?

Чаще всего прибегают к 2 традиционным способам, позволяющим работать с несколькими версиями системы:

1. Виртуальные машины.

Развертывание отдельной ВМ для каждой из версий Directum RX. Реализация такого подхода требует существенных серверных ресурсов. Кроме того, возникает необходимость контролировать актуальность установленных ВМ, проводить учет версий системы, установленных на каждой из виртуальных машин. В ситуации, когда необходимо кратковременно переключиться на другой проект, данный способ можно считать нецелесообразным.

2. Переустановка.

Данный подход предполагает переустановку Directum RX с помощью инсталлятора, а также настройку отдельной DDS для каждого проекта. Это довольно трудоемкий и длительный процесс.

Начиная с версии Directum RX 4.2 появилась возможность устанавливать несколько версий системы с помощью штатного инсталлятора, а также быстро переключаться между проектами в рамках одной версии Directum RX.

Тем не менее, следует учитывать, что данный способ хоть и позволяет сэкономить число развернутых ВМ, но всё ещё требует большего объёма дискового пространства для каждой из версий системы, хранения логов и репозиториев для прикладной разработки.

Таким образом, каждый из устоявшихся подходов имеет существенные недостатки и ограничения. Это привело к необходимости разработать инструмент, позволяющий разработчику переключаться между разными несколькими версиями системы на одной виртуальной машине.

Что именно требуется?

  • Быстро и надежно переключать экземпляр Directum RX между проектами (исходники + БД + хранилище документов);
  • Устанавливать несколько экземпляров Directum RX на одной машине;
  • Удалять установленный экземпляр Directum RX, оставляя другие экземпляры без изменений;
  • Обновлять установленный экземпляр Directum RX и/или прикладного проекта на новый билд/версию Directum RX.

Всё это необходимо делать удобно, быстро, надежно и экономя ресурсы машины.

Инструменты для переключения

Ранее уже был разработан набор скриптов на Powershell – rx-dds-manage-tools. В дальнейшем на его основе были созданы Manage Applied Tools (тот же набор скриптов, дополненный автоматизацией установки Directum RX) и утилита RXInstanceManager, управляющая каждой установленной системой и позволяющая переключаться между ними.

 

Предполагалось, что эти инструменты будут закрывать большинство потребностей прикладных разработчиков Directum RX в части работы с несколькими версиями системы на одной ВМ.

На наш взгляд, решение является избыточным и не всегда может идеально подходит для использования по следующим причинам:

  • Очень долгая и запутанная первичная установка и настройка всех компонентов;
  • Неоправданно сложный алгоритм и порядок действий для установки новых экземпляров системы;
  • Необходимость использовать команды с большим количеством параметров для редко используемой функциональности.

Тем не менее, сам подход по установке нескольких версий Directum RX на одной ВМ показался нам интересным. Далее расскажем, как упростить его.

Как сделать проще?

Для того, чтобы запустить две версии системы на одной ВМ, можно использовать совместно RabbitMQ и MongoDB на разных установках Directum RX. У каждого экземпляра системы должен быть свой порт, база данных и сайт IIS, которые настраиваются в конфигурационном файле. При этом в случае с одной ВМ служба DirectumRXServiceRunner также будет в одном экземпляре, что приведет к перезаписи DirectumRXServiceRunner при запуске второй версии системы, и работать будет только один из экземпляров Directum RX.

Избежать этого помогает переменная instance_name, которую необходимо добавить в конфигурационный файл перед установкой Directum RX, а также добавить префикс на сайт IIS и в службу DirectumRXServiceRunner. После чего следующая установка системы будет происходить с другими параметрами и все экземпляры, установленные на одной ВМ, будут работать независимо друг от друга. При этом настройка нового конфигурационного файла для каждого из экземпляров системы может быть достаточно трудоемкой. Для экономии времени, а именно упрощения заполнения параметров конфигурационного файла и добавления в него переменной instance_name мы разработали утилиту CreateFormConfigYAML. Ниже рассмотрим работу с ней подробнее.

Инструкция по установке нескольких версий

Перейдем к пошаговому алгоритму установки нескольких версий Directum RX на одной ВМ:

  1. Вначале необходимо провести первоначальную установку Directum RX в ручном режиме стандартным способом. Ярлык запуска Directum Development Studio (DDS) переименовывается таким образом, чтобы было понятно, к какому проекту или версии Directum RX он относится. Также это требуется для того, чтобы установка новой версии не изменила его.
  2. Затем переместить папку data_protection с сертификатами в общедоступное место, например, на диск С. В файле config.yml версии, установленной на шаге 1, исправить путь до папки сертификатов.
  3. Сохранить конфигурационный файл config.yml отдельно от установленной системы. Он будет использоваться как шаблон для будущих установок версий Directum RX.
  4. Создать 2 папки - для установки новой версии Directum RX и для ее хранилища данных.
  5. В папку для установки конкретной версии распаковать файлы Directum Launcher.
  6. Подобрать свободный порт командой в Powershell:

netstat -an | findstr /i :<номер порта>

Если в консоли ничего не вывелось, или вывелись другие порты, содержащие цифры запрашиваемого порта, – значит, порт свободен.

  1. Подготовить файл config.yml для новой версии RX. Для этого используем утилиту CreateFormConfigYAML, которая генерирует конфигурационные файлы по заданным параметрам. Запускаем утилиту и заполняем свойства следующим образом:

Интерфейс утилиты формирования файла config.yml

 

    1. Путь до config.yml - путь до шаблонного файла config.yml, полученного на шаге 3;
    2. Каталог с DirectumLauncher - папка, в которую распакованы установочные файлы Directum RX;
    3. Каталог хранилища - папка, в которой будут храниться логи системы и репозитории прикладной разработки;
    4. Порт - полученный на шаге 6 номер порта. На нем будет развернут пул приложений;
    5. База данных - имя базы данный для новой установки Directum RX;
    6. Название экземпляра установки - назначение (или версия) новой установки Directum RX;
    7. Работа с Git:
      1. Work - url репозитория с прикладной разработкой.
      2. Base - url репозитория с базовой разработкой.
  1. Нажать кнопку Сформировать. В результате появляется текстовое поле, которое содержит будущий файл config.yml. Обратим внимание, что в файл добавлена переменная instance_name, значение которой соответствует значению, указанному в параметре Название экземпляра установки в шаге 7.

Сформированный файл config.yml

  1. Нажать кнопку Сохранить как, чтобы сохранить сгенерированный файл для дальнейшей установки.
  2. В распакованный дистрибутив в каталог etc скопировать файл config.yml, полученный на шаге 8.
  3. Запустить установку стандартным способом. Перед запуском провести проверку:
    1. Установлен режим Установка.
    2. Все параметры занеслись корректно. Если в строке с указанием имени БД и настроек RabbitMQ встретятся строки, оформленные как {{название параметра}}, то в этом нет ошибки. При установке система заменит их на те значения, которые были указаны на шаге 7.
    3. Установлен флажок напротив параметра Создать новую базу.
  4. Установить флажок напротив Соглашения и запустить установку.
  5. Дождаться окончания установки.
  6. После завершения установки проверить доступность сайта.

Важно помнить, что сайт располагается на порту, полученном на шаге 6, и он отличается от стандартного 80.

  1. Запустить и проверить DDS.
  2. Переименовать ярлык для запуска DDS новой версии аналогично условию из шага 1.

Управление версиями и удаление

При установке нескольких версий Directum RX на одной ВМ будут запущены и несколько экземпляров службы DirectumRXServiceRunner. Управление экземплярами системы производится через Диспетчер задач, где при необходимости можно остановить неиспользуемые службы для экономии вычислительных мощностей ВМ.

Для удаления одной из установленных версий Directum RX необходимо:

  • Остановить службу DirectumRXServiceRunner через Диспетчер задач;
  • Удалить папки с системой (созданные на шаге 4);
  • В Диспетчере служб IIS удалить сайт IIS, созданный для данной версии, а также пулы приложений;
  • Удалить экземпляр службы DirectumRXServiceRunner;
  • Удалить базу данных.

Итог

Описанный алгоритм заметно упрощает установку нескольких экземпляров Directum RX на одной виртуальной машине и позволяет работать с различными версиями системы, оперативно переключаясь между ними, а также с экономией ресурсов ВМ и времени, затрачиваемого на развертывание.

Надеемся, наш опыт будет полезен для вас. А мы будем благодарны за фидбэк: комментарии, отзывы, дополнения. 

Акелон. 

Алексей Тутаев

А где можно утилиту CreateFormConfigYAML посмотреть?

Алексей Тутаев

Из статьи не очень понял можно ли переключаться в рамках одной версии rx между различными проектами/базами? Если да, то как это можно сделать?

Авторизуйтесь, чтобы написать комментарий