【问题标题】:How can I dynamically set the context-root in Payara Micro?如何在 Payara Micro 中动态设置上下文根?
【发布时间】:2019-01-14 21:49:38
【问题描述】:

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

到目前为止,我使用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')并将其添加到 var 文件的 WEB-INF 目录中。

看来 payara micro 没有使用该配置文件的上下文根规范。该应用程序仍然基于“.war”的文件名进行部署。我可以根据环境变量重命名“.war”,但这不允许任何“斜杠”/嵌套路径。或者有没有办法做到这一点?

我的想法已经不多了,也没有在类似的问题和错误中找到任何解决方案。感谢您的帮助。

【问题讨论】:

    标签: docker jakarta-ee glassfish payara-micro


    【解决方案1】:

    我知道这有点晚了,但根据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-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 月中旬开始使用。

    但是,如果您像我最初所做的那样将您的战争称为ROOT.war,您将遇到问题。我真的不知道为什么,但这会覆盖 glassfish-web.xml 的上下文根,并将其放在根中。

    【讨论】:

      【解决方案2】:

      好的,因为我似乎没有找到实现这一点的内置方法,所以我基本上复制了服务器完整 docker 映像的行为并且它起作用了。

      详细说明:

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

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

      【讨论】:

      • 这是目前在 Payara Micro 中设置上下文根的唯一方法。一般来说,带有--postbootcommandfile 的 asadmin 命令是一种正确的方法,可以做一些命令行参数不可用的事情。
      【解决方案3】:

      你是对的,最近的 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

      【讨论】:

      • 好的,我就是这么想的。谢谢回答。正如您在我写的答案中看到的那样,我最终复制了服务器完整图像的行为。
      • 感谢分享解决方案。我完全忘记了应用程序也可以使用 postboot 命令脚本部署:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-09
      • 2018-10-23
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      相关资源
      最近更新 更多