iT邦幫忙

2025 iThome 鐵人賽

DAY 22
0
Modern Web

Line Bot × NestJS:30 天開發日記系列 第 22

Day 22:Render 雲端平台部署 Nest 後端伺服器

  • 分享至 

  • xImage
  •  

2025 鐵人賽背景圖

前言

今天的目標是將系統正式上線。經過這段時間的開發,我們已完成 Line Message API 的核心功能與日誌處理機制。

接下來將透過 Render 平台結合 GitHub 分支實現自動化部署,讓 LINE Bot 脫離本地環境限制,正式推出第一個可分享給朋友的版本。

本日程式碼的範例連結

Render 部署流程

Step 1:新增 Web Service

點選 Add new 按鈕,選擇部署 Web Service

Render 部署 Web Service

Step 2:綁定 GitHub 專案

選擇 nestjs-linebot-ironman 專案進行綁定。

Render 平台選擇 Github 專案

Step 3:設定部署分支與指令

選擇 day15 分支進行部署。當該分支有新的變更時,Render 會自動根據 GitHub repo 內容重新部署。

部署指令說明:

  • Build Command:執行專案打包,預設會以 Production 環境建置
  • Start Command:啟動服務,Render 會自動將 NODE_ENV 設為 production

Render 部署設定

Step 4: 選擇部署方案

Render 選擇部署方案

這邊選擇 Free Plan,其限制如下:

  • 記憶體:512 MB
  • CPU:0.1
  • 自動休眠:15 分鐘無使用會自動休眠,導致 LINE Bot 服務中斷

Step 5:匯入環境變數

Render 匯入環境變數

原先透過 .env 檔案管理的環境變數,部署至 Render 時需手動匯入,讓平台讀取到本地的配置設定。

確認以上步驟與資料無誤後,點選 Deploy Web Service 按鈕進行部署。

Step 6:確認部署結果

專案下方會顯示伺服器運行的網址

部署過程會依序執行:安裝專案套件 → pnpm run build 打包 → pnpm run start 啟動服務。

整個流程可在 Render 控制台即時觀察。

Render 控制台即時顯示紀錄

LINE Developers 更新 Webhook URL

過去使用 ngrok 時,每次重啟都會產生新的網址,需要在 LINE Developers 後台手動更新 Webhook URL。現在部署至 Render 後,可將 Webhook URL 改為 Render 提供的固定網址,解決網址異動問題。

Uptimerobot 是什麼?

UptimeRobot 是一個網站監控服務,免費方案可設定每 5 分鐘監控一次 HTTPS 端點(僅支援 HEAD 請求)。當服務異常時會立即發送警報郵件,讓開發者能即時處理。

更重要的是,這項定期監控特性可以解決 Render 免費版的休眠問題。透過持續的 HEAD 請求保持服務活躍,避免冷啟動延遲,讓應用 24/7 保持即時回應。

接下來將在 Nest 後端新增健康檢查端點,讓 UptimeRobot 定期檢測以維持 Render 服務的活躍狀態。

Nest 後端建立健康檢查端點

Step 1:建立心跳檢查 Controller

執行以下指令建立 Controller

nest g controller heartbeat --no-spec

Step 2:設定心跳檢查端點

免費版本的情況下 Uptimerobot 使用 HEAD 傳輸方法每五分鐘打端口確認回傳狀態碼 200

heartbeat/heartbeat.controller.ts

import { Controller, Head } from '@nestjs/common';

@Controller('heartbeat')
export class HeartbeatController {
  @Head('')
  heartbeat(): string {
    return 'OK';
  }
}

設置完成後,可使用 Postman 測試 heartbeat 端點,透過 HEAD 請求應能獲得 HTTP 200 狀態碼。

Step 3:更改部署分支為 day16

實際上線時建議綁定 master 分支,只在正式版本變更時自動部署

Render 改變分支

UptimeRobot 設定網站監控

Step 1:跳過引導流程

註冊完成後,點選 Skip onboarding 直接進入主控台。

UptimeRobot 跳過引導流程

Step 2:新增監控目標

註冊登入後,點選右上角的 New 按鈕新增監控。

UptimeRobot 新增監控目標

Step 3:設定監控 HTTPS 端點

設定監控的 HTTPS 端點(預設使用 HEAD 方法)。

Notify 設定:當端點多次無法回傳 200 狀態碼時,會暫停監控並發送警報信件

UptimeRobot Monitor 設定

服務中斷時的通知信件

UptimeRobot 服務中斷 Notify 信件

至此完成 NestJS 後端部署至 Render 平台,並透過 UptimeRobot 避免服務休眠。部署後若需查看伺服器運行日誌,可至 Grafana Loki 查詢。

Grafana Loki 心跳檢測紀錄

本日結語

今日成功將 LINE Bot 後端服務部署至 Render 雲端平台,透過 GitHub 分支實現自動化部署。過程中解決了本地開發的兩大痛點:使用固定 Webhook URL 取代 ngrok 頻繁變更的連結,以及透過 UptimeRobot 心跳偵測避免服務休眠,確保 LINE Bot 提供 24/7 不間斷服務。結合先前建置的 Grafana Loki 日誌監控系統,LINE Bot 已具備相對完整的生產環境基礎。


上一篇
Day 21:Nest Pino 整合 Grafana Loki 日誌
系列文
Line Bot × NestJS:30 天開發日記22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言