Spring boot 使用github向Heroku和Docker部署Spring boot应用程序
我有一个SpringBoot应用程序,我正在Heroku上托管,很快就会投入生产。 目前我正在使用Heroku的免费tier版本,但会在生产前购买标准付费tier 我面临的问题是,当与所有依赖项打包时,我的应用程序的jar大小超过200+M 我尝试了两种部署方式(现在都可以正常使用)Spring boot 使用github向Heroku和Docker部署Spring boot应用程序,spring-boot,docker,heroku,spring-boot-maven-plugin,Spring Boot,Docker,Heroku,Spring Boot Maven Plugin,我有一个SpringBoot应用程序,我正在Heroku上托管,很快就会投入生产。 目前我正在使用Heroku的免费tier版本,但会在生产前购买标准付费tier 我面临的问题是,当与所有依赖项打包时,我的应用程序的jar大小超过200+M 我尝试了两种部署方式(现在都可以正常使用) 1)使用Heroku maven插件 2)从Git hub部署,以及Git LFS(托管jar文件,因为GitHub不允许文件大于100mb),Heroku需要jar 我的Procfile如下所示: web:j
1)使用Heroku maven插件
2)从Git hub部署,以及Git LFS(托管jar文件,因为GitHub不允许文件大于100mb),Heroku需要jar 我的Procfile如下所示: web:java-jar目标/x-x-1.1.1.jar 注意:GitHub LFS免费层也有每月1GB的上传/下载限制,所以我现在坚持使用Heroku maven构建插件工具(因为我也达到了Git LFS限制)
在这两种情况下,我都必须上传大约200+M的内容,即使在重新打包并部署到Heroku时,我的源代码有了细微的变化 我对docker没有太多的知识和专业知识,我现在正在寻找的是一种使用docker和git hub部署到Heroku的方法,而无需每次上传打包的jar,docker将在部署之前使用maven构建jar文件 因此,如果有人知道这一点,或者可以指向如何实现这一点的指南,这将大大减少我的部署时间强> 弹簧启动版本:2.2.5
Maven Build Plugin:3.1.0事实上,使用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
配置GitHub操作工作流
创建GitHubActions工作流(/.github/workflows/main.yml
),配置管道以生成应用程序jar文件,并使用Heroku CLI将映像构建/推送到容器注册表中。每次推送到
main
分支时,都会触发下面的工作流(如果愿意,您可以更改触发事件)
请注意GitHub Actions secretsHEROKU_API_KEY
和HEROKU_APP_NAME
,您需要使用HEROKU API密钥和HEROKU应用程序的名称进行相应配置
我已经捕获了以上所有内容,并提供了一个简单的GitHub repo这正是我所需要的,我走错了方向,直接将docker映像部署到heroku,并使用heroku.yml文件,与之相同,过程变得更加繁忙
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