在 Heroku 上部署 Java 應用程式
1. 概述
在本教程中,我們將了解如何使用 Heroku 將簡單的 Spring Boot Java 應用程式部署到雲端,Heroku 是一個透過處理基礎架構來簡化應用程式部署、管理和擴展的平台。
2. 安裝
出於本文的目的,我們將使用一個簡單的 Hello World Spring Java 應用程序,並使用 Maven 作為建置系統。該應用程式將有一個返回Hello, Heroku!
的映射。訪問時。
2.1.項目設定
打開 Hello World 專案後,讓我們新增一些設定檔。
首先,我們在專案的根目錄中建立一個Procfile
。該檔案定義了進程類型並明確概述了啟動應用程式的命令。創建後,我們添加以下命令:
web: java -Dserver.port=$PORT -jar target/*.jar
現在,我們在根資料夾中建立一個system.properties
檔案。在此檔案中,我們將指定 Heroku 應使用的 Java 執行環境。預設情況下,Heroku 使用 Java 8:
java.runtime.version=17
我們已經完成了專案的設定。接下來,我們將配置 Heroku,這將為我們的部署做好準備。
2.2. Heroku 設定
Heroku CLI 的要求是 Git ,因此,我們需要在繼續之前安裝它。
讓我們登入 Heroku 網站並下載 Windows 的 CLI 用戶端,或使用brew tap heroku/brew && brew install heroku
(適用於 Mac)。
安裝完成後,我們現在可以透過網站或 CLI 建立一個 Heroku 專案。讓我們打開一個終端機視窗並導航到我們的專案。
為了使用 Heroku,我們需要使用指令heroku login
透過 CLI 登入。
我們現在需要使用git init
建立一個 Git 儲存庫,並使用heroku create
一個 Heroku 應用程式。系統為預設應用程式分配一個隨機名稱,並將區域設定為美國。不過,使用者可以透過平台網站輕鬆修改這些設定。
3. 透過 Heroku CLI 部署
讓我們暫存並提交我們的程式碼,並使用git push heroku main
將變更推送到 Heroku 儲存庫。
Heroku 會自動偵測我們的 Java 應用程式並啟動建置流程。成功完成後,我們可以透過 Web 瀏覽器存取提供的 URL(通常類似於https://our-app-name.herokuapp.com/
)來存取我們的應用程式。
結果,我們應該會看到 Spring 應用程式啟動,並且網站應該顯示Hello, Heroku!
。
或者,我們可以透過在終端機中執行heroku open
來快速驗證應用程式的啟動。
4.透過Heroku Maven插件部署
除了使用 CLI 之外,Heroku 還支援透過名為Heroku Maven Plugin 的Maven 外掛程式建置和發布應用程式。
要使用該插件,我們需要將其新增至pom.xml
:
<plugin>
<groupId>com.heroku.sdk</groupId>
<artifactId>heroku-maven-plugin</artifactId>
<version>3.0.7</version>
<configuration>
<logProgress>true</logProgress>
</configuration>
</plugin>
解決依賴關係後,我們可以使用命令mvn clean heroku:deploy
開始部署我們的應用程式。
這種方法對於經歷冗長編譯過程或透過 CI 部署的應用程式可能特別有益。
該插件為我們提供了多種配置,包含在pom.xml
檔案的configuration
元素中。讓我們來探討其中的一些。
首先,我們可以設定插件使用的 JDK 版本,這會覆蓋system.properties
設定:
<jdkVersion>17</jdkVersion>
此外,我們可以配置變數,它會覆蓋先前定義的變數:
<configVars>
<MY_VAR>SomeValue</MY_VAR>
</configVars>
此外,我們可以指定啟動應用程式的命令:
<processTypes>
<web>java -Dserver.port=$PORT -jar target/*.jar
</processTypes>
5. 透過 CI/CD 管道部署
在本文的下一部分中,我們將探討使用 GitHub 和 GitLab 進行部署。
Heroku 為我們提供了與 GitHub 的直接連接,使我們的應用程式部署更加容易。**另一方面,使用 GitLab 則需要配置管道。**
要使用這些選項,我們需要將專案推送到這些平台上的儲存庫。
5.1. GitHub
打開 Heroku 網站後,我們選擇我們一直在處理的專案。隨後,我們導覽至Deploy
標籤並選擇 GitHub 作為部署方法。
快速登入後,我們搜尋並選擇我們的儲存庫。然後,我們啟用Automatic Deploys
,以便任何對主分支的推送都會自動觸發 Heroku 上的部署。
5.2. GitLab
使用 GitLab,我們必須將.gitlab-ci.yml
檔案加入我們的專案中:
image: maven:3.8.7-eclipse-temurin-17
stages:
- test
- deploy
cache:
paths:
- .m2/repository
- target
unit-test:
stage: test
image: maven:latest
script:
- echo "Maven test started"
- "mvn test"
deploy_job:
stage: deploy
image: maven:latest
script:
- HEROKU_API_KEY=${HEROKU_API_KEY} mvn clean heroku:deploy
此外,我們需要將 Heroku API 金鑰新增至專案設定中找到的 GitLab CI/CD 變數中。可以透過存取使用者個人資料從 Heroku 網站檢索 API 金鑰。
由於我們在腳本中使用 Heroku Maven 插件,因此我們需要將額外的配置合併到pom.xml
檔案中。具體來說,我們必須添加 Heroku 平台上顯示的應用程式名稱。為了實現這一點,我們在插件的配置元素中定義應用程式名稱:
<appName>our-app-name</appName>
推送我們的變更會啟動管道,隨後部署應用程式。
6. 使用 Docker 進行部署
假設 Docker 安裝在本機,我們首先在專案的根目錄中建立一個Dockerfile
。然後我們填充以下內容:
FROM maven:3.8.4-openjdk-17 AS build
WORKDIR /app
COPY . .
RUN mvn clean package -DskipTests
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
透過上面的腳本,我們使用 Maven 建置應用程序,將建置的.jar
檔複製到更精簡的 JDK 映像中,並公開連接埠8080
供應用程式運行。
其次,我們需要在resource
資料夾中新增application.properties
檔案來設定伺服器連接埠:
server.port=${PORT:8080}
透過這樣做,Docker 可以將連接埠對應到我們的 Spring 應用程式連接埠。
第三,我們將建置並執行 Docker 映像,確保其正常功能:
docker build -t our-heroku-app .
docker run -p 8080:8080 our-heroku-app
讓我們curl localhost:8080
來檢查Hello, Heroku!
細繩。
最後,我們必須部署並發布對 Heroku 的變更。為此,我們在終端機中執行一些命令。
我們首先執行heroku container:login,
將我們登入 Heroku 容器登錄檔。然後,我們使用heroku container:push web –app our-heroku-app.
最後,為了發布我們應用程式的鏡像,我們使用heroku container:release web –app our-heroku-app.
發布後,我們的應用程式應該已上線,我們可以使用命令heroku open –app our-heroku-app
進行驗證。
七、結論
在本文中,我們探索了在 Heroku 上部署 Java 應用程式的多種方法。
我們了解如何使用提供的 CLI 輕鬆設定和部署 Heroku 應用程式。
此外,我們利用 Heroku Maven 插件的命令來簡化終端和 CI/CD 環境的部署。
最後,我們了解了 Docker 對於快速應用部署的好處。
與往常一樣,可以在 GitHub 上找到程式碼。