当前位置: 首页 > 知识库问答 >
问题:

使用github将Spring boot应用程序与Docker一起部署到Heroku

赫连开畅
2023-03-14

我有一个Spring-Boot应用程序,我正在Heroku上托管,很快就会开始生产。目前我正在使用Heroku的免费层版本,但将购买标准付费层之前生产。

我面临的问题是,当我的应用程序与所有依赖项打包时,其jar大小超过200+M。

我已经尝试了两种部署方式(现在两种方式都可以使用)

1)使用Heroku maven插件

2)从Git hub和Git-LFS(托管jar文件,因为GitHub不允许大于100MB的文件)进行部署,并且Heroku需要jar。

我的Procfile如下所示:

在这两种情况下,即使我的源代码在重新打包并部署到Heroku时稍有改动,我也必须上传200M左右。

我没有很多关于docker的知识和专长,我现在正在研究的是一种使用docker和git hub部署到Heroku的方法,而不是每次都上传打包的jar,docker将在部署之前使用maven构建jar文件!

因此,如果有人知道这一点,或者可以指向如何实现这一点的指南,这将大大减少我的部署时间!

Spring-Boot版本:2.2.5

maven-build-plugin:3.1.0

共有1个答案

欧旻
2023-03-14

实际上,使用Docker应该可以解决您的问题,因为slug限制不适用于Heroku容器注册。您可以按照以下步骤使用GitHub操作来实现这一点。

创建Dockerfile

Dockerfile非常简单。在运行时绑定Heroku分配给您的端口是很重要的

FROM adoptopenjdk/openjdk11:latest

RUN mkdir -p /software

ADD target/x-x-1.1.1.jar /software/x-x-1.1.1.jar

CMD java -Dserver.port=$PORT $JAVA_OPTS -jar /software/x-x-1.1.1.jar

创建GitHubActions工作流(/.gitHub/workflows/main.yml),配置管道来构建应用程序jar文件,并使用Heroku CLI将映像构建/推送到容器注册表中。
下面的工作流在每次推送到main分支时都会被触发(如果愿意,您显然可以更改触发器事件)。

name: Build & Push to Heroku Docker Registry

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Git Checkout
      uses: actions/checkout@v1
    - name: Set up JDK 11
      uses: actions/setup-java@v1
      with:
        java-version: 11
    - name: Build with Maven
      run: mvn -B package --file pom.xml
    - name: Heroku Container Registry login
    env: 
      HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
    run: heroku container:login 
    - name: Build and push
    env:
      HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
    run: heroku container:push -a ${{ secrets.HEROKU_APP_NAME }} web 
    - name: Release
    env:
      HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
    run: heroku container:release -a ${{ secrets.HEROKU_APP_NAME }} web 

请注意GitHub操作秘密heroku_api_keyheroku_app_name,您需要使用Heroku API密钥和您的Heroku应用程序的名称相应地配置它们。

我已经捕获了上面的所有内容,并在这里提供了一个简单的GitHub repo

 类似资料:
  • 完成干净的构建后,我将war文件复制到Tomcat的文件夹中。但是部署会发生两次,并且在上下文已经存在的情况下以异常结束。我错过了什么? 非常感谢您的帮助。

  • 嘿,我已经尝试了几天了,我已经遍历了文档,我遵循了教程,当我试图将react应用程序部署到github页面时,我无法通过npm运行部署。我将npm称为运行构建,我将正确的url放置到package.json作为“主页”,我再次调用它并获得“部署”和“预部署”,我在节点模块中肯定有gh-pages,我的意思是我得到了所有我遵循的每一个步骤,每个教程都可以告诉我。我遇到了一个问题,内容如下: 错误:无

  • 我想第一次使用docker发布我在spring boot中制作的应用程序。然而,在发布时出现了一个问题。 因此,我上传到conter的图像不显示。 以下是我采取的步骤,我将立即添加我使用gradle的步骤。 > 我将Docker插件下载到IntelliJ 我创建了一个Dockerfile,其中我放了: 音量 /tmp ARG JAR_文件 在终端中,我键入以下命令来构建项目: chmod 777

  • 我已经构建了一个Springboot应用程序,其中包括AngLuar5。我有一个gradle构建脚本,它将angular文件加载到我的springboot项目中,这些文件位于springboot项目的resources/static下。当我启动我的应用程序时,angular的路由不再工作,我得到了 错误:无法匹配任何路由。URL段:“访问” 我的项目结构: 如果我打字 www.mysite.com

  • 问题内容: 我正在尝试在Heroku上使用Flask开发我的第一个“大型”应用程序,并尝试将此处的基本教程与以下说明结合:https : //devcenter.heroku.com/articles/python与以下说明:http:// flask.pocoo.org/docs/patterns/packages/#larger- applications。它在本地与“先行启动”一起工作,但是

  • 我已经尝试了许多配置来部署我的Restful Springboot2应用程序到heroku使用proplfile无济于事。我已经尝试了这里的一些建议/解决方案。 Procfile: Heroku日志:。 非常感谢任何对此的帮助。