如何在 KeyCloak-Server-Distribution 中禁用 Jboss PeriodicRotatingFileHandler

Posted

技术标签:

【中文标题】如何在 KeyCloak-Server-Distribution 中禁用 Jboss PeriodicRotatingFileHandler【英文标题】:How to disable Jboss PeriodicRotatingFileHandler in KeyCloak-Server-Distribution 【发布时间】:2019-01-21 00:20:17 【问题描述】:

背景 该计划是为我们的业务部署当前版本的 KeyCloak。我们使用 OpenShift Online 来托管类似的服务。 OpenShift-Online 中的 Pod(容器)没有 root 权限,这意味着 jboss-dockerfiles/keycloak 的标准实现在启动时失败,试图在没有写入权限的情况下写入日志文件。 一种解决方案是授予 pod 写入权限,like so。然而,这在 OpenShift Online 中是不可能的,因为我们不拥有集群,只有我们工作的项目。

实际问题 这个想法是在运行 KeyCloak 的 Jboss 中禁用相关的日志配置,这样日志就不会写入文件。由于它们被写入控制台,因此 OpenShift 仍会收集日志,因此我们不需要将日志记录到文件中。

在研究了 keycloak/keycloak 和 jboss-dockerfiles/keycloak 如何协同工作后,我在服务器的standalone.xml 文件中找到了相关的配置行。我在项目的 Dockerfile 中添加了以下行,以从服务器中删除 PeriodicRotatingFileHandler:

    sed -i -e '/<periodic-rotating-file-handler/,/<\/periodic-rotating-file-handler>/d' /opt/jboss/keycloak/standalone/configuration/standalone.xml

这确实有效 - 当我在使用 docker run --rm -it --entrypoint=/bin/bash &lt;imageId&gt; 创建后进入容器文件系统并检查standalone.xml 时,将 PeriodicRotatingFileHandler 配置为“FILE”的相关行消失了。

当我在 OpenShift Online 中启动新容器时,部署仍然失败,因为服务器仍在尝试启动记录器:

Cannot start embedded server: Failed to instantiate class "org.jboss.logmanager.handlers.PeriodicRotatingFileHandler" for handler "FILE": java.lang.reflect.InvocationTargetException: /opt/jboss/keycloak/standalone/log/server.log (Permission denied) 
[...]  
java.lang.IllegalArgumentException: Failed to instantiate class "org.jboss.logmanager.handlers.PeriodicRotatingFileHandler" for handler "FILE"

为什么服务器仍在启动该记录器,尽管它不再在standalone.xml 中声明?是否有第二个配置文件被使用?有没有办法强制覆盖该处理程序?

【问题讨论】:

处理程序也必须从根记录器中删除。 如果 KeyCloak 图像是问题,为什么不使用 jboss/keycloak-openshift 图像。见github.com/jboss-dockerfiles/keycloak/tree/master/… 我知道jboss/keycloak-openshift 可以在线使用,因为我在那里使用它。你是说它没有启动,还是只是没有收集日志。 我没有为依赖链接的数据库使用容器,我设置环境变量来指定数据库位置。我确实在同一个项目中单独部署了数据库,但是使用该方法,数据库可以很容易地位于 OpenShift 之外,只需在 DB_ADDR 环境变量中设置主机名。 github.com/jupyter-on-openshift/poc-hub-keycloak-auth/blob/… 那很奇怪...为什么图像会失败如果我直接从 jboss/keycloak-openshift:4.2.1.Final...自定义图像上的 chmod 命令,但仍然出现权限错误 【参考方案1】:

不是关于记录器的原始问题的真正答案,而是一种解决方法: 使用图像 jboss/keycloak-openshift (GitHub),KeyCloak 可以在 OpenShift Online 上运行,而无需进一步配置日志记录。还有一些额外的配置需要做:

    在部署的环境变量中设置 PROXY_ADDRESS_FORWARDING=true 以使 KeyCloak 侦听转发标头(自 KeyCloak 4.0.0 起) 根据部署.yaml中的镜像Dockerfile设置docker runargs:

[...] 容器: - 参数: - 开始-keycloak.sh - '-b 0.0.0.0' [...]

【讨论】:

以上是关于如何在 KeyCloak-Server-Distribution 中禁用 Jboss PeriodicRotatingFileHandler的主要内容,如果未能解决你的问题,请参考以下文章

如何在表单提交后保留文本(如何在提交后不删除自身?)

如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?

如何在 Fragment 中调用 OnActivityResult 以及它是如何工作的?

如何使用 Firebase 在 Web 上托管 Flutter?它的效果如何?