我有一个Spring-Boot应用程序,我在Heroku上托管,很快就要开始生产了。目前我使用的是免费版本的Heroku,但在生产前会购买标准的付费版本。
我面临的问题是,当与所有依赖项打包时,我的应用程序的jar大小超过了200+ m。
我已经尝试了两种部署方式(现在都可以使用)
1)使用Heroku maven插件
2)从Git hub和Git- lfs一起部署(用于托管jar文件,因为GitHub不允许大于100mb的文件),并且Heroku需要jar。
我的<<p> strong> Procfile 如下所示:web: java jar目标/x-x-1.1.1.jar
注意:GitHub-LFS免费层也有每月1GB的上传/下载限制,所以我现在坚持使用Heroku maven构建插件工具(因为我也达到了Git-LFS限制)。
在这两种方式中,即使我的源代码在重新打包然后部署到Heroku时略有变化,我也必须上传大约200+M。
我对docker没有太多的知识和专业知识,我现在想要的是一种使用docker和git hub部署到Heroku的方法,而不需要每次都上传打包好的jar, docker会在部署前使用maven构建jar文件!
所以如果有人知道这一点,或者可以指出如何实现这一点的指南,这将减少我的部署时间很多!
Spring-Boot version: 2.2.5
Maven-Build-Plugin: 3.1.0
确实使用Docker应该解决你的问题,因为slug限制并不适用于Heroku容器注册表。您可以按照以下步骤使用GitHub actions来实现此目标。
创建Dockerfile
Dockerfile非常简单。绑定Heroku在运行时分配给您的PORT非常重要
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
Configure GitHub Actions workflow
创建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_KEY
和HEROKU_APP_NAME
,你需要配置相应的Heroku API密钥和你的Heroku应用程序的名称。
我已经捕获了上述所有内容,并在这里提供了一个简单的GitHub repo