【问题标题】:Spring Boot and ebextensionsSpring Boot 和 eb 扩展
【发布时间】:2017-07-30 21:17:18
【问题描述】:

我正在尝试将 .ebextensions 文件夹添加到要部署到 AWS 弹性 beanstalk 的 jar 的根级别。

我的文件夹结构是:

main:
--src
--resources
  --.ebextensions

当我构建 jar 时,我的 .ebextensions 被放置在目标的类路径中,因此 Elastic Beanstalk 在部署时不会拾取。

Pom.xml

<plugin>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-maven-plugin</artifactId>
     <configuration>
           <fork>true</fork>
           <addResources>false</addResources>
     </configuration>
</plugin>

如何构建以使 ELB 获取 ebextensions?

【问题讨论】:

  • 你可能会对this Spring Boot issue感兴趣。
  • 其实你确定要jar的根目录下的文件吗? The documentation 建议 .ebextensions 应位于应用程序源包中的 jar 文件旁边。
  • 来自上面引用的文档:“位置 - 将所有配置文件放在一个文件夹中,名为 .ebextensions,位于源包的根目录中。以点开头的文件夹可以按文件隐藏浏览器,因此请确保在创建源包时添加该文件夹。”
  • 我可以确认它需要在 jar 的根目录中。我在与 AWS 支持合作了几天后声明了这一点。但我会声明这是针对在 Amazon Linux 1 上运行的 Java8 和 Tomcat。Linux 2 不同。

标签: maven amazon-web-services spring-boot amazon-elb amazon-elastic-beanstalk


【解决方案1】:

这对我有用,是我发现解决这个问题的最干净的方法(在 maven 中):

在项目的根目录中添加 .ebextensions 并在插件部分的末尾添加这个 sn-p:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.6</version>
            <executions>
                <execution>
                    <id>prepare</id>
                    <phase>package</phase>
                    <configuration>
                        <tasks>
                            <unzip src="${project.build.directory}/${project.build.finalName}.jar" dest="${project.build.directory}/${project.build.finalName}" />
                            <copy todir="${project.build.directory}/${project.build.finalName}/" overwrite="false">
                                <fileset dir="./" includes=".ebextensions/**"/>
                            </copy>
                            <zip compress="false" destfile="${project.build.directory}/${project.build.finalName}.jar" basedir="${project.build.directory}/${project.build.finalName}"/>
                        </tasks>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

本插件使用ant解压spring boot生成的最终jar,复制根目录下的.ebextensions,再用同名zip(jar)。经过测试并在生产中工作:)

适用于 Spring 1.5.3.RELEASE

【讨论】:

  • 非常有用+1。碰巧你知道一个更新的插件可以做同样的事情吗? maven-antrun-plugin 的最后一个代码来自 2014 年。
  • 非常方便!我更喜欢在没有前导句点的情况下命名源文件夹,这样我的操作系统就不会隐藏它,并在路径中包含 AWS。类似于:src/main/aws/ebextensions。当我将它复制到 zip 中时,它被重命名为 .ebextensions
  • 有些人可能会发现这是一个更好的选择:stackoverflow.com/a/64911750/3112373
  • 这会将文件夹名称设置为“ebextensions”,而不是“.ebextensions”
【解决方案2】:

我遇到了同样的问题,将 .ebextensions 移动到 jar 旁边,正如 Andy 建议的那样,当我将它与直接将 .conf 文件添加到此处建议的所需目录相结合时对我有用:

https://stackoverflow.com/a/41011160/7686379

【讨论】:

    【解决方案3】:

    对于那些使用 Gradle 的人,这里是需要添加到 build.gradle 的内容,以便将 .ebextensions 内容添加到 jar 的根目录。

    假定 .ebextensions 目录和内容位于项目的根目录中。

    普通 Java 应用程序:

    jar {
        from(".") {
            include ".ebextensions/**"
        }
    }
    

    Spring Boot 应用:

    bootJar {
        from(".") {
            include ".ebextensions/**"
        }
    }
    

    Spring Boot 案例与普通 Java 案例略有不同,因为在 Spring Boot 中,实际构建 jar 的是 Spring Boot Gradle 插件 - 它使用特殊的“bootJar”任务代替标准 Java 插件“jar " 任务。

    我认为对于 Maven 构建,Javier 的回答是最干净的方式。对我来说,这说明了在修改“标准”构建时 Gradle 优于 Maven 的灵活性。

    【讨论】:

      【解决方案4】:

      献给所有可能为此而苦恼的人。在你的项目的根目录中有一个如下所示的目录: .ebextentions/nginx/conf.d/proxy.conf 在proxy.conf文件中,你放置这个client_max_body_size 50M;正是这样做的。现在,当您将项目上传到 elastic beanstalk 时,您所做的是创建一个压缩文件夹,然后将目标文件夹和 .ebextensions 目录复制到其中,这称为源包。现在您可以将压缩后的文件夹(包)上传到 elastic beanstalk。

      【讨论】:

      • 这确实有效,但本质上是手动的。可以使用 maven-ant-plugin 自动化
      【解决方案5】:

      我是这样做的:
      mvn install 生成app-0.0.1-SNAPSHOT.jar
      之后,我在具有client_max_body_size 25M; 的根项目路径上创建了.ebextensions/nginx/conf.d/proxy.conf - 在我的情况下是增加最大上传大小。
      对跑步者使用 Github Actions 和 ubuntu-latest - 开箱即用支持 zip 命令,我使用此命令完成了

      cp target/app-0.0.1-SNAPSHOT.jar . && zip -r app-new.zip .ebextensions/ app-0.0.1-SNAPSHOT.jar
      

      基本上app-new.zip 是我上传到 ElasticBeanstalk 的文件

      【讨论】:

        猜你喜欢
        • 2018-01-20
        • 1970-01-01
        • 1970-01-01
        • 2014-06-09
        • 1970-01-01
        • 2022-12-29
        • 2021-06-16
        • 1970-01-01
        • 2016-12-31
        相关资源
        最近更新 更多