Как я могу динамически установить корень контекста в Payara Micro? - PullRequest
0 голосов
/ 29 июня 2018

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

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

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

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

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

Мне не удалось найти подобную опцию для микро развертываний 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_3_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», основываясь на переменной окружения, но это не допускает никаких «косых черт» / вложенных путей. Или есть способ сделать это?

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

Ответы [ 3 ]

0 голосов
/ 16 июля 2018

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

Подробно:

  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}" как часть запуска RU на докере, но до фактического запуска payara
  5. запустил payara с --postbootcommandfile $ POSTBOOT_COMMANDS
  6. теперь мы можем установить контекстный корень, используя -e CONTEXT_ROOT = api / v1 при запуске док-контейнера

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

0 голосов
/ 14 января 2019

Я знаю, что немного поздно, но в соответствии с этим вы можете сделать "специальное" расширение среды в 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_3_0-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 context-root и помещает его в корень.

0 голосов
/ 04 июля 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 для документации использования.

...