使用 github 使用 Docker 将 Spring 启动应用程序部署到 Heroku

Deploying Spring boot App, to Heroku With Docker using github

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

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

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


1) 使用 Heroku maven 插件


2) 从 Git hub 和 Git-LFS 一起部署(用于托管 jar 文件,因为 GitHub 不't allow a file largest than 100mb) and the jar is needed for Heroku.

我的 Procfile 看起来像这样:

web: java -jar target/x-x-1.1.1.jar

注意:GitHub-LFS 免费套餐每月 upload/download 也有 1GB 的限制,所以我现在坚持使用 Heroku maven 构建插件工具(因为我也达到了到 Git-LFS 限制)。


在这两种方式中,我都必须上传大约 200+M,即使我的源代码在重新打包然后部署到 Heroku 时有轻微的变化。

我没有太多关于 docker 的知识和专业知识,我现在正在寻找一种使用 docker 和 git 集线器部署到 Heroku 的方法,而无需上传每次打包jar,Docker部署前会使用maven构建jar文件!

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

Spring-启动版本:2.2.5

Maven-Build-Plugin: 3.1.0

确实使用 Docker 应该可以解决您的问题,因为 slug 限制不适用于 Heroku Container Registry。您可以按照以下步骤使用 GitHub 操作来实现此目的。

创建Docker文件

Docker文件非常简单。绑定 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

配置 GitHub 操作工作流

创建 GitHubActions 工作流 (/.github/workflows/main.yml) 配置管道以构建应用程序 jar 文件并使用 Heroku CLI build/push 将图像放入 Container Registry。
下面的工作流程在每次推送到 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 存储库 here