使用 Elastic Beanstalk 时保留 WAR 名称

Posted

技术标签:

【中文标题】使用 Elastic Beanstalk 时保留 WAR 名称【英文标题】:Keeping WAR name when using Elastic Beanstalk 【发布时间】:2016-03-14 20:42:15 【问题描述】:

当我使用 Elastic Beanstalk 部署我的 app.war 文件时,它会部署在 ROOT 上下文中,因此当我需要通过 http://any-domain/app/ 提供它时,我可以通过 http://any-domain/ 访问它。

我在 EC2 实例上使用 tomcat 8。我知道这个问题可能与 ebextensions 和/或 context.xml 配置有关。

【问题讨论】:

对我来说听起来像是一个 tomcat 配置问题,与 beanstalk 无关 【参考方案1】:

这种行为是设计使然:“在单个 WAR 源包中,应用程序始终在根路径下运行。” http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-tomcat-platform.html

如果你想覆盖这个行为,最简单的方法是创建一个只有两个战争文件的多战争包(基本上只是一个包装战争的 zip 文件)。 zip 中的战争名称将决定路径(很确定这只适用于一层深度),在这种情况下,您可以将其称为“app.war”,并且您还必须包含一个可以为空的 ROOT.war .

【讨论】:

我认为这比我的答案更好。谢谢! 这个解决方案对我不起作用。我将两个战争文件(空 ROOT.war 和 app.war)打包到“main.zip”中。我在弹性豆茎上部署了这个 zip 文件。战争在这里结束:/var/lib/tomcat7/webapps/ROOT/main/ROOT.war/var/lib/tomcat7/webapps/ROOT/main/app.war【参考方案2】:

终于解决了。

我在.ebextensions 目录中添加了一个名为server-update.config 的文件,该目录位于您的.war 文件的根目录下。文件内容如下:

container_commands:
  replace-config: 
    command: cp .ebextensions/server.xml /etc/tomcat8/server.xml 

关于ebextensions的更多信息:https://aws.amazon.com/blogs/aws/customize-elastic-beanstalk-using-configuration-files/

关于server.xml,我将server.xml 放在/etc/tomcat8 中,并在 部分中添加了以下部分。

<Context path="app" docBase="ROOT"/>

感谢这个答案:https://***.com/a/18226607/3576460

【讨论】:

嗨!可以分享整个server.xml 吗? 嗨@RocBoronat,对不起,我不再从事那个项目了。正如我所说,我从 EC2 实例中获取了 /etc/tomcat8/server.xml,然后更新了 &lt;Host&gt; 部分。 是的...问题是我不精通 EC2 实例。因此,获取该 server.xml 并不像我预期的那样简单:·) 这就是为什么我要求您只复制粘贴该 server.xml。顺便说一句,我忘记了设置应用程序上下文的想法,所以没问题。顺便说一句,它可以帮助其他***用户:·)谢谢你的回答,寿! :·D

以上是关于使用 Elastic Beanstalk 时保留 WAR 名称的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Elastic Beanstalk 中配置 Flask 应用程序以使用 S3 保留用户上传的图像文件

自动部署 Elastic Beanstalk 更改

终止 AWS Elastic Beanstalk 环境

如何在保留亚马逊 RDS 数据库的同时删除 Elastic Beanstalk 应用程序?

在 Elastic Beanstalk 上部署 NestJS 应用程序

AWS Elastic Beanstalk 504 网关超时