使用 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_KEY
和 HEROKU_APP_NAME
,您需要使用 Heroku API 密钥和您的 Heroku 应用程序的名称进行相应配置。
我已经捕获了以上所有内容并提供了一个简单的 GitHub 存储库 here
我有一个 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_KEY
和 HEROKU_APP_NAME
,您需要使用 Heroku API 密钥和您的 Heroku 应用程序的名称进行相应配置。
我已经捕获了以上所有内容并提供了一个简单的 GitHub 存储库 here