如何将上游.war部署为OpenShift应用程序的ROOT.war?

时间:2013-12-07 16:11:29

标签: maven liferay jboss7.x openshift

问题背景:

我已经开始使用OpenShift来实现 - 表面上 - 通过OpenShift安装和管理Liferay 6.2门户。为了这个目标,我使用jbossas-7和postgresql-9.2墨盒创建了一个OpenShift应用程序 - 与“DIY墨盒”方法相比,我迄今为止更喜欢官方墨盒,即关于安装应用程序OpenShift上的服务器,特别是JBoss AS7,理想情况下是在该应用服务器中安装Liferay。

按照Liferay用户指南[1]中的说明,尽管在OpenShift中尝试调整部署到JBoss AS7的指令,我已经配置了我的OpenShift应用程序模块目录并下载了上游liferay-portal -6.2.0-ce-ga1-20131101192857659.war然后通过删除eclipselink.jar(如指定[1])更新.war文件,并添加custon portal-ext.properties。我在$ {APP} /deployments/ROOT.war

找到了修改后的.war文件

在应用程序的JBoss部分的Maven配置中,我已经在pom.xml中注释掉了maven-war-plugin条目,我希望将部署/ ROOT.war文件用作应用程序的ROOT应用程序的OpenShift Online空间中的JBoss服务器中的.war文件。据我所知,这个问题似乎并没有像预期的那样发生 - 相反,即使指定的Maven插件配置被注释掉,似乎应用程序自己的代码也被用于创建一个新的ROOT.war覆盖了现有的部署/ ROOT.war。

坦率地说,这只是猜测的情况。另外,在'git push'中发生了一些困难 - 简而言之,在服务器重启部分,'git push'期间的Maven构建失败了。我可以通过OpenShift Online控制台重新启动应用程序然后,但我在http://portal-gproj.rhcloud.com/看到的不是Liferay ROOT.war,而是一个.war文件,其中包含我在调整OpenShift时所做的静态内容在通过'rhc'

组装应用程序后不久,自己的默认index.html

当我在OpenShift Online上通过SSH连接到我的应用程序的远程主机时,我看到我使用Liferay修改的ROOT.war位于app-root / repo / deployments / ROOT.war。但是,它显然没有从应用程序的“部署”目录中安装为应用程序自己的ROOT.war,在实时JBoss实例下。

假设这可能是由于在工作流程的“git push”部分(???)中使用的(组合app / openshift)Maven配置,我的问题是:是否存在一种解决工具链行为的方法,以确保我自己提供的ROOT.war将被用作应用程序的ROOT.war?

(另外,有没有办法配置JBoss AS7以获得更详细的日志输出?来自OpenShift工具安装的JBoss AS 7盒式磁带的日志信息,它似乎只是有限的用途远远调试这个应用程序的配置。这个应用程序现在是第二次迭代,顺便说一句 - 被删除一次,很快将被删除并重新创建第三次

[1] http://liferay.com/documentation/liferay-portal/6.2/user-guide/-/ai/installing-liferay-on-jboss-7-liferay-portal-6-2-user-guide-15-en

UPDATE 在工作流程中最近的“git push”步骤的输出中,有一条消息“超出磁盘配额”。我假设这是由于Liferay WAR文件的大小,所有的几百兆。至少可以说这很令人困惑:

remote: HAProxy instance is started
remote: Deploying JBoss
remote: rsync: writefd_unbuffered failed to write 4 bytes to socket [sender]: Broken pipe (32)
remote: rsync: write failed on "/var/lib/openshift/52a2f112e0b8cd711a000007/jbossas/standalone/deployments/ROOT.war": Disk quota exceeded (122)
remote: rsync error: error in file IO (code 11) at receiver.c(301) [receiver=3.0.6]
remote: rsync: connection unexpectedly closed (28 bytes received so far) [sender]
remote: rsync error: error in rsync protocol data stream (code 12) at io.c(600) [sender=3.0.6]
remote: Result: failure

我假设这是由于应用程序的Git存储库所占用的空间 - 应用程序的Git存储库,在这种方法中,将包含所有原始Liferay Portal .war文件,文件的扩展内容,和修改后的.war文件,打算在这个应用程序中使用。现在,我将尝试重构我的方法来创建第三个 - 而不是“扩展,修改和重新压缩”方法,而不是试图使用Maven JAR文件“覆盖”,正如我所读到的,所以理想情况下,在存储库中只需要一个大型上游.war文件的副本(或者,可以通过Git'external'拉入一个普通的GitHub存储库,将存储库存储传递给GitHub而不是我的应用程序有限储存空间?)。

我担心“JAR文件覆盖”方法会导致App的“git push”部分出现大量延迟,而Liferay .war则是一个需要修改的大型JAR文件。但是,如果它的目标是至少在OpenShift上创建一个Liferay门户,那就是目标......

如果可能有任何可用的建议,“Upstream .war as ROOT.war” - 如果在解决磁盘配额问题之前,关于“那部分”的整体工作流程该项目 - 如果“注释maven-war-plugin”的事情可能不足以使用上游.war作为ROOT.war,我将不胜感激任何有关此配置的建议。

1 个答案:

答案 0 :(得分:0)

参考 OpenShift KB-E1088 ,我将使用SCP方法 - 将其用于JBoss AS7。要定义一些额外的机制,以便管理项目的上游源,如下所示:

组件命名架构

app.manager.name = ${OPENSHIFT_APP_NAME}-${OPENSHIFT_NAMESPACE}-manage

  • 使用$ {app.manager.name}作为GitHub上托管的Git存储库的名称
  • 使用$ {app.manager.name}作为该存储库源树中根POM中的Maven工件ID

app.manager.group = ${OPENSHIFT_NAMESPACE).openshift.${USER_APP_DOMAIN_NAME}

  • 使用$ {app.manager.group}作为同一项目的Maven工件组ID

$ {app.manager.group}的任务:$ {app.manager.name}

  • 设置openshift.origin.domain = "rhcloud.com"
  • 将以下Git存储库作为子模块添加到名为app的-manage存储库:ssh://${OPENSHIFT_APP_UID}@{OPENSHIFT_APP_NAME}-${OPENSHIFT_NAMESPACE}.${openshift.origin.domain}
  • 同时将该项添加为-manage artifact的POM
  • 的Maven模块
  • 下载upsream Liferay .war档案
  • 将JAR文件 overlay 应用到本地.war文件中
    • 添加自定义portal-ext.properties
    • 删除eclipselink.jar
  • 上传修改后的.war文件

需要执行其他任务

  • 大概是在OpenShift应用程序本身的Git存储库中
    • 修改jbossas盒式磁带modules配置,以便生成的模块配置适合上游.war文件中表示的Liferay安装
      • 根据需要为Liferay门户和门户网站的JDBC配置添加此类JAR文件
      • 在OpenShift上的应用程序module.xml盒式磁带中使用上游jbossas文件的本地副本,在上行module.xml可用的每种情况下,提供其他module.xml个文件,按照Liferay用户指南中的说明在JBoss AS7上安装Liferay 6.2进行文件自定义(暂定)
    • 修改JAVA_OPTS ,以便在通过jbossas盒式磁带初始化JBoss AS7时实际使用修改后的值(假设可通过OpenShift app挂钩) “例如在文件pre_start_jbossas中配置,但JBoss AS7本身可能无法获取该文件中的JAVA_OPTS
    • 添加自定义Java安全框架server.policy文件,同时引用自定义JAVA_OPTS中的文件,例如位置$ {OPENSHIFT_JOBSSAS_DIR} /modules/server.policy
    • 得到JAVA_OPTS:"-Djava.security.manager -Djava.security.policy=${OPENSHIFT_JOBSSAS_DIR}/modules/server.policy -Xmx1024m -XX:MaxPermSize=256m -verbose:class ${JAVA_OPTS}"

“可能就这么简单,”人们希望。