如何在 Payara Micro 中动态设置上下文根?

How can I dynamically set the context-root in Payara Micro?

我正在为部署到多个环境的应用程序构建 docker 映像。对于其中一些环境,上下文根需要不同。

到目前为止,我使用的是 payara/server-full as the base image but I want to switch to the lightweight 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')并将其添加到 var 的 WEB-INF 目录中文件。

payara micro 似乎没有使用该配置文件的上下文根规范。该应用程序仍然根据“.war”的文件名进行部署。我可以根据环境变量重命名“.war”,但这不允许任何 'slashes'/嵌套路径。或者有什么办法吗?

我 运行 没有想法,在类似的问题和错误中没有找到任何解决方案。感谢您的帮助。

你是对的,最近的 Payara Micro 5.182 不支持任何指定 contextRoot 的选项。它始终源自 WAR 文件的名称。

使用 Payara Micro 5.182 将应用程序部署到自定义上下文根的唯一方法是在 --postbootcommandfile 中使用 asadmin deploy 命令部署应用程序,它允许指定所有部署属性,包括上下文根.有关用法文档,请参阅 https://docs.payara.fish/documentation/payara-micro/asadmin/pre-and-post-boot-scripts.html

好的,因为我似乎没有找到实现此目的的内置方法,所以我基本上复制了全服务器 docker 图像的行为并且它起作用了。

详细:

  1. 已将 generate_deploy_commands.sh 脚本复制到我的构建文件夹中
  2. 在构建期间将脚本添加到容器并使其可执行
  3. 添加了环境变量 ENV POSTBOOT_COMMANDS postboot.txtENV CONTEXT_ROOT api
  4. 运行 ${PAYARA_PATH}/generate_deploy_commands.sh --contextroot "${CONTEXT_ROOT}" 作为 docker 运行 的一部分,但在实际开始 payara 之前
  5. 使用 --postbootcommandfile $POSTBOOT_COMMANDS
  6. 启动 payara
  7. 现在我们可以在 运行 docker 容器
  8. 时使用 -e CONTEXT_ROOT=api/v1 设置上下文根

我希望这可以帮助其他人寻找解决方案。

我知道有点晚了,但根据 this 你可以在 glassfish-web.xml 中进行 "special" 环境扩展,即。如果你把这个放进去:

<?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 年 5 月中旬开始使用。

但是如果你像我第一次那样调用你的 war ROOT.war,你会遇到问题。我真的说不出为什么,但这会覆盖 glassfish-web.xml 的上下文根,并将其放在根中。