」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 在 Koyeb 上部署 Spring Boot 應用程式

在 Koyeb 上部署 Spring Boot 應用程式

發佈於2024-09-17
瀏覽:710

Deploying Spring Boot Applications on Koyeb

介紹

當我們作為開發人員開始建立東西時,我們的主要目標之一就是與他人分享我們所創建的內容。對於前端開發人員來說,這通常很簡單,這要歸功於 Vercel 和 Netlify 等出色的託管服務,它們無縫支援前端應用程式。然而,對於後端開發人員來說,展示我們的工作可能更具挑戰性。我們建立 API,使用資料庫,雖然 JSON 可能很強大,但它在視覺上不如使用 CSS 或 Lottie 建立的動畫那麼引人注目。

這就是為什麼找到一種高效可靠的方式來部署後端應用程式至關重要。 Spring Boot 是一種流行的基於 Java 的框架,它簡化了建立生產就緒應用程式的過程,但部署它們仍然是一個挑戰。這就是 Koyeb 的用武之地。 Koyeb 提供了一個強大且易於使用的平台,讓開發人員以最少的設定快速部署他們的 Spring Boot 應用程式。在本指南中,我們將引導您完成在 Koyeb 上部署帶有 PostgreSQL 資料庫的 Spring Boot 應用程式的整個過程,從開始到結束。


1. 前提條件

在我們深入部署流程之前,請確保您具備以下條件:

  • 一個基本的 Spring Boot 應用程式。 如果您沒有,您可以使用 Spring Initializr 快速產生一個具有以下相依性的專案:
    • Spring Web
    • Spring Data JPA
    • PostgreSQL 驅動程式
  • GitHub(或 GitLab/Bitbucket)儲存庫,託管 Spring Boot 專案的位置。
  • Neon 帳號。 在 Neon 註冊
  • 一個 Koyeb 帳號。 如果您沒有 Koyeb 的網站,請註冊。
  • 已安裝 Maven 或 Gradle,取決於您的 Spring Boot 專案的配置方式。

2. 設定資料庫

  • 在 Koyeb 上,實例化一個免費 PostgreSQL 資料庫,它將提供資料庫 URL 但每月僅限 50 小時。

-在 Neon 上,實例化一個 免費 PostgreSQL 資料庫,該資料庫也將提供資料庫 URL。


3.使用Spring boot連接資料庫

在資源目錄中,您將建立一個名為 env.properties 的文件,其中儲存所有環境變量,在本例中為 DB_URL、DB_USERNAME 和 DB_PASSWORD。

永遠不要提交這個文件到你的github的存儲庫。

env.properties 檔案:

DB_USERNAME=
DB_PASSWORD=
DB_URL=

您的application.properties檔案:

application.properties檔案:

server.port=${PORT:8080}

spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}

spring.jpa.hibernate.ddl-auto=update

spring.config.import=classpath:env.properties

解釋

  • server.port - 這是您的應用程式將運行的連接埠。我們設定了一個環境變數 PORT,如果 PORT 為空,則回退為 8080。
  • spring.datasource.url - 這是來自 Neon 或 Koyeb 儀表板的環境變數。
  • spring.datasource.username - 這是來自 Neon 或 Koyeb 儀表板的環境變數。
  • spring.datasource.password - 這是來自 Neon 或 Koyeb 儀表板的環境變數。
  • spring.config.import - 這將匯入您儲存敏感資料的檔案。

4.建立system.properties文件

在專案的根目錄下,建立一個system.properties檔案。

此檔案指定要使用的 Java 執行時期版本,以便 Koyeb Java 建置套件使用正確的版本執行專案。

記住:Koyeb 接受主要版本值 1.8、11、13、15、17、19 和 20。

如果不指定Java版本,版本1.8將會被使用。

我正在使用Java 21。如果您使用的是其他版本,請相應更改。

系統屬性

java.runtime.version=21

5. 建立控制器

此控制器將在 / 路由處顯示 Hello World 訊息。

package com.example.demo.Modules.User.controller;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;

@RestController
public class UserController {

    @GetMapping("/")
    public String helloWorld() {
        return "Hello World";
    }

}

6.將程式碼推送到Github

在 Github 上建立公共儲存庫並推送您的程式碼。取得此儲存庫的 URL


7. 在 Koyeb 上部署

  • 輸入您的 koyeb 帳戶。
  • 前往服務 > Web 服務 > 使用 Github 建立 Web 服務。
  • 連接到 Github 或貼上公共儲存庫 URL。
  • 等待專案建置。
  • 如果成功,將產生一個公共URL,每個人都可以存取您的Spring Boot應用程式。

結論

就是這樣!您已經創建了一個 Spring Boot 應用程序,將其與雲端資料庫連接,並將所有內容部署在 Koyeb 上。這可以是您想要在作品集中展示的專案的開始,讓客戶看到您可以做什麼。

您可以使用圖像上傳器文章來增加此應用程式。

感謝您的閱讀!


?參考

  • Koyeb - Spring Boot 部署
  • Koyeb - Java 參考

?跟我說話

  • 領英
  • Github
  • 資料夾
版本聲明 本文轉載於:https://dev.to/mspilari/deploying-spring-boot-applications-on-koyeb-44kj?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • Floyd 演算法如何偵測鍊錶中的迴圈?
    Floyd 演算法如何偵測鍊錶中的迴圈?
    使用 Floyd 演算法檢測鍊錶中的循環確定給定鍊錶是否包含循環在 Java 程式設計中是一項具有挑戰性的任務。當清單中的最後一個節點引用前一個節點而不是空引用時,就會發生循環。 為了有效地偵測循環,開發人員通常採用 Floyd 的循環查找演算法,也稱為龜兔賽跑演算法。該演算法使用兩個引用,一個慢速...
    程式設計 發佈於2024-11-07
  • 如何在不使用 Flash 的情況下使用 JavaScript 在客戶端調整圖像大小?
    如何在不使用 Flash 的情況下使用 JavaScript 在客戶端調整圖像大小?
    使用JavaScript 在客戶端調整圖像大小:開源解決方案在當今的Web 開發環境中,通常需要在客戶端調整圖像大小之前將它們上傳到伺服器。這種方法可以優化影像質量,減少伺服器負載,並透過加快頁面載入時間來改善使用者體驗。 雖然 Flash 是調整圖片大小的常見選項,但許多開發人員寧願避免使用它。幸...
    程式設計 發佈於2024-11-07
  • 通訊:數據獲取模式
    通訊:數據獲取模式
    重大公告! 我開始了我日常的前端系統設計學習之旅。我將在部落格中分享每個模組的見解。所以,這就是開始,還有更多精彩! 在本部落格中,我們將探討前端系統設計所必需的不同資料取得機制,包括短輪詢、長輪詢、WebSocket、伺服器發送事件 (SSE) 和 Webhook。每種技術都滿足向客戶端和伺服...
    程式設計 發佈於2024-11-07
  • #daysofMiva 編碼挑戰日:將 JavaScript 連結到 HTML 檔案。
    #daysofMiva 編碼挑戰日:將 JavaScript 連結到 HTML 檔案。
    嗨,大家好。很抱歉這篇文章遲發了,但遲發總比不發好?無論如何,讓我們深入了解今天的文章。 為什麼要將 Javascript 連結到 HTML 檔案。 JavaScript 是一種在瀏覽器中運行的程式語言,可以操縱網頁的內容、結構和樣式。透過將 JavaScript 檔案連結到 HT...
    程式設計 發佈於2024-11-07
  • 為什麼我的 canvas.toDataURL() 沒有儲存我的圖像?
    為什麼我的 canvas.toDataURL() 沒有儲存我的圖像?
    Resolving Image Saving Issues with canvas.toDataURL()When attempting to utilize canvas.toDataURL() to save&&]When attempting to utilize canvas.toDataU...
    程式設計 發佈於2024-11-07
  • Node.js 中的新增功能
    Node.js 中的新增功能
    TL;DR: 让我们探索 Node.js 22 的主要功能,包括 ECMAScript 模块支持和 V8 引擎更新。此版本引入了 Maglev 编译器和内置 WebSocket 客户端,以增强性能和实时通信。还涵盖了测试、调试和文件系统管理方面的改进。 Node.js 22 将于 10 月进入 LT...
    程式設計 發佈於2024-11-07
  • 了解 MongoDB 的distinct() 操作:實用指南
    了解 MongoDB 的distinct() 操作:實用指南
    MongoDB 的distinct() 操作是一個強大的工具,用於從集合中的指定欄位檢索唯一值。本指南將幫助您了解distinct() 的用途、使用它的原因和時間,以及如何在 MongoDB 查詢中有效地實現它。 什麼是distinct()? distinct() 方法傳回集合或集...
    程式設計 發佈於2024-11-07
  • 為什麼 JavaScript 中的「0」在比較中為 False,而在「if」語句中為 True?
    為什麼 JavaScript 中的「0」在比較中為 False,而在「if」語句中為 True?
    揭開JavaScript 的悖論:為什麼「0」在比較中為假,但在If 語句中為假在JavaScript中,原語" 的行為0」給開發者帶來了困惑。雖然諸如“==”之類的邏輯運算符將“0”等同於假,但“0”在“if”條件下表現為真。 比較悖論代碼下面演示了比較悖論:"0" ...
    程式設計 發佈於2024-11-07
  • GitHub Copilot 有其怪癖
    GitHub Copilot 有其怪癖
    過去 4 個月我一直在將 GitHub Copilot 與我們的生產代碼庫一起使用,以下是我的一些想法: 好的: 解釋複雜程式碼:它非常適合分解棘手的程式碼片段或商業邏輯並正確解釋它們。 單元測試:非常擅長編寫單元測試並快速產生多個基於場景的測試案例。 程式碼片段:它可以輕鬆地為通用用例產生有用...
    程式設計 發佈於2024-11-07
  • 靜態類別或實例化類別:什麼時候應該選擇哪一個?
    靜態類別或實例化類別:什麼時候應該選擇哪一個?
    在靜態類別和實例化類別之間做出選擇:概述在PHP 中設計軟體應用程式時,開發人員經常面臨在使用靜態類別或實例化物件。這個決定可能會對程式的結構、效能和可測試性產生重大影響。 何時使用靜態類別靜態類別適用於物件不具備靜態類別的場景獨特的數據,只需要存取共享功能。例如,用於將 BB 程式碼轉換為 HTM...
    程式設計 發佈於2024-11-07
  • ⚠️ 在 JavaScript 中使用 `var` 的隱藏危險:為什麼是時候繼續前進了
    ⚠️ 在 JavaScript 中使用 `var` 的隱藏危險:為什麼是時候繼續前進了
    关键字 var 多年来一直是 JavaScript 中声明变量的默认方式。但是,它有一些怪癖和陷阱,可能会导致代码出现意外行为。现代替代方案(如 let 和 const)解决了许多此类问题,使它们成为大多数情况下声明变量的首选。 1️⃣ 提升:var 在不知不觉中声明变量! ?解释:...
    程式設計 發佈於2024-11-07
  • PDO::MYSQL_ATTR_INIT_COMMAND 需要「SET CHARACTER SET utf8」嗎?
    PDO::MYSQL_ATTR_INIT_COMMAND 需要「SET CHARACTER SET utf8」嗎?
    在有「PDO::MYSQL_ATTR_INIT_COMMAND」的 PDO 中「SET CHARACTER SET utf8」是否必要? 在PHP 和MySQL 中,「SET NAMES」 utf8」和「SET CHARACTER SET utf8」通常在使用UTF-8 編碼時使用。但是,當使用PD...
    程式設計 發佈於2024-11-07
  • 為什麼使用Password_Hash函數時哈希值會改變?
    為什麼使用Password_Hash函數時哈希值會改變?
    了解Password_Hash函數中不同的雜湊值在開發安全認證系統時,開發人員經常會遇到使用password_hash取得不同密碼哈希值的困惑功能。為了闡明此行為並確保正確的密碼驗證,讓我們分析此函數背後的機制。 密碼加鹽:有意的功能password_hash 函數有意產生唯一的鹽它對每個密碼進行哈...
    程式設計 發佈於2024-11-07
  • 為什麼與谷歌競爭並不瘋狂
    為什麼與谷歌競爭並不瘋狂
    大家好,我是 Antonio,Litlyx 的首席執行官,我們的對手是一些巨頭! Microsoft Clarity、Google Analytics、MixPanel...它們是分析領域的重要參與者。當人們聽到一家新創公司正在與如此知名的公司合作時,他們常常會感到驚訝。但讓我們看看為什麼與Goo...
    程式設計 發佈於2024-11-07
  • 如何在 Java Streams 中有效地將物件清單轉換為可選物件?
    如何在 Java Streams 中有效地將物件清單轉換為可選物件?
    使用Java 8 的可選和Stream::flatMap 變得簡潔使用Java 8 流時,將List 轉換為可選 並有效地提取第一個Other 值可能是一個挑戰。雖然 flatMap 通常需要返回流,但可選的 Stream() 的缺失使問題變得複雜。 Java 16 解決方案Java 16 引入了S...
    程式設計 發佈於2024-11-07

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3