Как я могу динамически установить корневой контекст в Payara Micro?

Я создаю образ докера для приложения, которое развертывается в нескольких средах. Корневой контекст должен быть другим для некоторых из этих сред.

До сих пор в качестве базового образа я использовал payara / server-full, но я хотите перейти на облегченный образ payara / micro.

В первом случае мне удалось установить корневой контекст, используя:

${PAYARA_PATH}/generate_deploy_commands.sh --contextroot "${CONTEXT_ROOT}" 

Это означает, что я мог динамически настраивать корень контекста при запуске контейнера докеров с использованием переменной среды.

Мне не удалось найти аналогичный вариант для микроразвертывания Payara. В качестве запасного варианта я попытался создать glassfish-web.xml со следующим содержимым:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app__CONTEXT_ROOT__0-1.dtd">
<glassfish-web-app error-url="">
    <context-root>__CONTEXT_ROOT__</context-root>
</glassfish-web-app>

Во время запуска контейнера (перед запуском payara micro) я затем заменил __CONTEXT_ROOT__ значением переменной среды (например, 'api / v1') и добавил его в каталог WEB-INF файла var.

Кажется, что payara micro не использует спецификацию корневого контекста этого конфигурационного файла. Приложение по-прежнему развертывается на основе имени файла .war. Я мог бы переименовать .war на основе переменной окружения, но это не допускает никаких «косых черт» / вложенных путей. Или есть способ сделать это?

Идеи заканчиваются, и я не нашел решения по подобным вопросам и ошибкам. Спасибо за вашу помощь.


person Frederik Petersen    schedule 29.06.2018    source источник


Ответы (3)


Я знаю, что это немного поздно, но согласно this, вы можете выполнить "специальное" расширение среды в glassfish-web.xml т.е. если вы поместите это в него:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN"
  "http://glassfish.org/dtds/glassfish-web-appROOT.war0-1.dtd">
<glassfish-web-app error-url="">
  <context-root>${ENV=CONTEXT_ROOT}</context-root>
</glassfish-web-app>

Это расширяется до вашего желаемого корневого контекста. Я тестировал payara-micro 5.183, но, согласно документации, с середины мая 2017 года все будет в порядке.

Однако, если вы назовете свою войну ROOT.war, как я сначала, вы столкнетесь с проблемами. Я не могу точно сказать, почему, но это переопределяет корневой контекст glassfish-web.xml и помещает его в корень.

person Morten Bøgeskov    schedule 14.01.2019

Хорошо, так как я, похоже, не нашел встроенного способа добиться этого, я в основном скопировал поведение полного образа докера, и это сработало.

В деталях:

  1. скопировал скрипт generate_deploy_commands.sh в свою папку сборки
  2. добавил скрипт в контейнер во время сборки и сделал его исполняемым
  3. добавлены env var ENV POSTBOOT_COMMANDS postboot.txt и ENV CONTEXT_ROOT api
  4. запускал ${PAYARA_PATH}/generate_deploy_commands.sh --contextroot "${CONTEXT_ROOT}" как часть docker RUN, но до фактического запуска payara
  5. запустил payara с помощью --postbootcommandfile $ POSTBOOT_COMMANDS
  6. теперь мы можем установить корневой контекст, используя -e CONTEXT_ROOT = api / v1 при запуске контейнера докеров

Надеюсь, это поможет другим найти решение.

person Frederik Petersen    schedule 16.07.2018
comment
На данный момент это единственный способ установить корень контекста в Payara Micro. В общем, команды asadmin с --postbootcommandfile - это правильный способ делать то, что недоступно с аргументами командной строки. - person OndroMih; 16.07.2018

Вы правы, последняя версия Payara Micro 5.182 не поддерживает никаких опций для указания contextRoot. Он всегда является производным от имени файла WAR.

Единственный способ развернуть приложение в настраиваемом корне контекста с Payara Micro 5.182 - это развернуть приложение с помощью команды asadmin deploy в --postbootcommandfile, которая позволяет указать все свойства развертывания, включая корень контекста. См. https://docs.payara.fish/documentation/payara-micro/asadmin/pre-and-post-boot-scripts.html для документации по использованию.

person OndroMih    schedule 04.07.2018
comment
хорошо, вот что я подумал. Спасибо за ответ. Я закончил тем, что скопировал поведение полного образа сервера, как вы можете видеть в ответе, который я написал. - person Frederik Petersen; 16.07.2018
comment
Спасибо, что поделились решением. Совсем забыл, что приложения тоже можно разворачивать с помощью командного скрипта postboot :) - person OndroMih; 16.07.2018