使用 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
,然后更新了 <Host>
部分。
是的...问题是我不精通 EC2 实例。因此,获取该 server.xml 并不像我预期的那样简单:·) 这就是为什么我要求您只复制粘贴该 server.xml。顺便说一句,我忘记了设置应用程序上下文的想法,所以没问题。顺便说一句,它可以帮助其他***用户:·)谢谢你的回答,寿! :·D以上是关于使用 Elastic Beanstalk 时保留 WAR 名称的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Elastic Beanstalk 中配置 Flask 应用程序以使用 S3 保留用户上传的图像文件
如何在保留亚马逊 RDS 数据库的同时删除 Elastic Beanstalk 应用程序?