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

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

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

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

4 ответа

Решение

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

В деталях:

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

Я надеюсь, что это помогает другим в поисках решения.

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

Вы правы, последняя версия 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 для документации использования.

Теперь этого можно добиться, например, используя DEPLOY_PROPS --contextroot=/api.

Посмотрите здесь , где используется переменная env.

Другие вопросы по тегам