Как я могу динамически установить корень контекста в 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 ответа
Итак, так как я, кажется, не нашел встроенного способа для достижения этой цели, я в основном скопировал поведение образа докера, заполненного сервером, и это сработало.
В деталях:
- скопировал скрипт generate_deploy_commands.sh в мою папку сборки
- добавил скрипт в контейнер во время сборки и сделал его исполняемым
- добавлен env var
ENV POSTBOOT_COMMANDS postboot.txt
а такжеENV CONTEXT_ROOT api
- побежал
${PAYARA_PATH}/generate_deploy_commands.sh --contextroot "${CONTEXT_ROOT}"
как часть Docker RUN, но до фактического запуска паяра - запустил payara с --postbootcommandfile $POSTBOOT_COMMANDS
- Теперь мы можем установить корневой контекст с помощью -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.