iT邦幫忙

2024 iThome 鐵人賽

0
Modern Web

Spring Boot API 開發:從 0 到 1系列 第 38

Day 37 部署 Spring Boot

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20240914/20121948CKkjvR1cgH.png

Spring Boot 應用程式也算是開發的差不多了

現在是時候把它發佈到正式環境了,這篇文章就來看看,應該要怎麼做

建立 JAR 檔

指令方式

使用 Gradle 的話,只要在 專案根目錄 執行以下指令

Gradle 就會建立一個 可執行的 JAR 檔 ,這個 JAR 檔會包含你的應用程式和所有必要的依賴

./gradlew bootJar

https://ithelp.ithome.com.tw/upload/images/20240914/20121948IadF1VaRN3.png

build/libs 的目錄下,就會產生一個 JAR 檔

https://ithelp.ithome.com.tw/upload/images/20240914/201219489OfjtfrSin.png

IDE 方式

如果不想打指令的話,也可以在 Gradle 的視窗,找到 Tasks > build > bootJar,在上面點兩下

一樣會產生 JAR 檔在 build/libs 的目錄下

https://ithelp.ithome.com.tw/upload/images/20240914/20121948hnjfwKirx6.png

https://ithelp.ithome.com.tw/upload/images/20240914/20121948HoKYA5DQXg.png

執行 JAR 檔

在根目錄下面,執行以下的指令,就可以把應用程式跑起來了

java -jar build/libs/todolist-0.0.1-SNAPSHOT.jar 

預設一樣是在 8080 port,可以開瀏覽器來確認看看

https://ithelp.ithome.com.tw/upload/images/20240914/20121948Rky2VrrT5F.png

建立 Docker Image

使用 Docker 封裝 JAR 檔

在專案根目錄建立一個名為 Dockerfile 的檔案,內容如下

# 使用 OpenJDK 17 作為 base Image
FROM openjdk:17-jdk-slim

# 設置工作目錄
WORKDIR /app

# 把 build 完的 JAR 檔,複製到 container 裡面,改名成 app.jar
COPY build/libs/*.jar app.jar

# 暴露應用程序的 port(假設使用 8080 port)
EXPOSE 8080

# 運行 JAR 文件
ENTRYPOINT ["java", "-jar", "app.jar"]

在根目錄下面,執行指令,就會建立一個 docker Image

https://ithelp.ithome.com.tw/upload/images/20240914/20121948MOKhEseAc4.png

可以查看 Image 是不是有建立

https://ithelp.ithome.com.tw/upload/images/20240914/201219480Qqh5tg1Cf.png

執行 todoapp Image,可以查看一下,是否有成功執行

https://ithelp.ithome.com.tw/upload/images/20240914/20121948yQxQVYPcyM.png

打開瀏覽器,瀏覽 8080 port,應該是可以成功的看到畫面

讓 Docker 也負責建立 JAR 檔

我們把 build 成 JAR 檔的工作,也交由 Docker 來執行

修改原本的 Dockfile,分成兩個階段 build JAR 檔 和 建立 Image

# 第一階段: build App

# 使用 gradle 8.10 版本的 JDK 17 Image
FROM gradle:8.10-jdk17 AS build

# 設置工作目錄
WORKDIR /app

# 複製相關的檔案
COPY build.gradle settings.gradle ./
COPY src ./src

# gradle build
RUN gradle build --no-daemon

# 第二階段:建立運行時 Image

# 使用 OpenJDK 17 作為 base Image
FROM openjdk:17-jdk-slim

# 設置工作目錄
WORKDIR /app

# 把 build 完的 JAR 檔,複製到 container 裡面,改名成 app.jar
COPY --from=build /app/build/libs/*.jar app.jar

# 暴露應用程序的 port(假設使用 8080 port)
EXPOSE 8080

# 運行 JAR 文件
ENTRYPOINT ["java", "-jar", "app.jar"]

重新建立 Image 的 2.0 版本

https://ithelp.ithome.com.tw/upload/images/20240914/20121948HAvdCmFXIv.png

可以查看 Image 是不是有建立 2.0 的版本

https://ithelp.ithome.com.tw/upload/images/20240914/20121948UfcvQ5YTxe.png

執行 todoapp Image 2.0 版本,可以查看一下,是否有成功執行

https://ithelp.ithome.com.tw/upload/images/20240914/20121948zLqi2O2fg4.png

打開瀏覽器,瀏覽 8080 port,應該是可以成功的看到畫面

同場加映:使用 Zeabur 部署應用程式

Zeabur 是一個簡單好用的部署平台

基本上只要點選幾下,幾分鐘後就可以上線一個應用程式

下面來看如何在 Zeabur 部署一個 Spring Boot 應用程式

Dashboard 點選 New Project

https://ithelp.ithome.com.tw/upload/images/20240914/20121948DpKsebIyMI.png

選擇一個專案的所在區域,這裡使用 Tokyo, Japan

https://ithelp.ithome.com.tw/upload/images/20240914/20121948oDi9RVtp9x.png

選擇部署的方式,這裡使用 Github

https://ithelp.ithome.com.tw/upload/images/20240914/20121948XXD1sdCRKZ.png

選擇一個 Github 的 repo ,這裡當然是選我們的 Todo 應用程式

https://ithelp.ithome.com.tw/upload/images/20240914/20121948t9qHpPiPXP.png

如果它在目錄裡面偵測到 Dockerfile,就會顯示使用 Docker,然後按 Deploy 部署

https://ithelp.ithome.com.tw/upload/images/20240914/20121948bRcl1UYt3w.png

可以在專案 Deployments 裡面有一個 Building 正在進行,點選看一下 Build Logs

https://ithelp.ithome.com.tw/upload/images/20240914/20121948Quji9iSTKm.png

https://ithelp.ithome.com.tw/upload/images/20240914/20121948LRaqd7u2fO.png

等到 Build 完後,就會自動切到 Runtime Logs,就可以看到有相關的 Spring Boot log

https://ithelp.ithome.com.tw/upload/images/20240914/20121948stPJrjj4BT.png

回到專案的頁面,選選 Networking 的選單

https://ithelp.ithome.com.tw/upload/images/20240914/20121948do6LGk1DmZ.png

建立一個自定義的 Domain

https://ithelp.ithome.com.tw/upload/images/20240914/20121948V5VlR3UDTE.png

https://ithelp.ithome.com.tw/upload/images/20240914/201219488B39RlvDe0.png

確認新增後,就可以在專案上面看到相關的 Domain 資訊

https://ithelp.ithome.com.tw/upload/images/20240914/20121948pco3hZsBIQ.png

api-test.http 裡面的 Domain 換成 ZeaburDomain 就可以來測試了

可以看到 API 都可以正常呼叫

https://ithelp.ithome.com.tw/upload/images/20240914/201219484JFGcjOVF3.pnghttps://ithelp.ithome.com.tw/upload/images/20240914/20121948tcgWvoasmz.pnghttps://ithelp.ithome.com.tw/upload/images/20240914/20121948QRh9cb9TaK.png

結論

介紹了發佈 Spring Boot 應用程式的多種方法,包括建立 JAR 檔、使用 Docker 容器化,以及透過 Zeabur 平台進行雲端部署

這些方法各有優勢,開發者可以根據專案需求選擇最適合的方式,輕鬆將 Spring Boot 應用程式部署到生產環境中

同步刊登於 Blog 「Spring Boot API 開發:從 0 到 1」Day 37 部署 Spring Boot

我的粉絲專頁

圖片來源:AI 產生

參考連結


上一篇
Day 36 Spring Boot Actuator 監控與管理
下一篇
Day 38 歸途:心路歷程
系列文
Spring Boot API 開發:從 0 到 139
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言