今天的目標是將系統正式上線。經過這段時間的開發,我們已完成 Line Message API
的核心功能與日誌處理機制。
接下來將透過 Render 平台結合 GitHub 分支實現自動化部署,讓 LINE Bot 脫離本地環境限制,正式推出第一個可分享給朋友的版本。
本日程式碼的範例連結
Step 1:新增 Web Service
點選
Add new
按鈕,選擇部署Web Service
Step 2:綁定 GitHub 專案
選擇
nestjs-linebot-ironman
專案進行綁定。
Step 3:設定部署分支與指令
選擇 day15
分支進行部署。當該分支有新的變更時,Render 會自動根據 GitHub repo 內容重新部署。
部署指令說明:
NODE_ENV
設為 production
Step 4: 選擇部署方案
這邊選擇 Free Plan,其限制如下:
Step 5:匯入環境變數
原先透過 .env
檔案管理的環境變數,部署至 Render 時需手動匯入,讓平台讀取到本地的配置設定。
確認以上步驟與資料無誤後,點選 Deploy Web Service
按鈕進行部署。
Step 6:確認部署結果
專案下方會顯示伺服器運行的網址
部署過程會依序執行:安裝專案套件 → pnpm run build
打包 → pnpm run start
啟動服務。
整個流程可在 Render 控制台即時觀察。
過去使用 ngrok
時,每次重啟都會產生新的網址,需要在 LINE Developers
後台手動更新 Webhook URL
。現在部署至 Render 後,可將 Webhook URL
改為 Render 提供的固定網址,解決網址異動問題。
UptimeRobot 是一個網站監控服務,免費方案可設定每 5 分鐘監控一次 HTTPS 端點(僅支援 HEAD 請求)。當服務異常時會立即發送警報郵件,讓開發者能即時處理。
更重要的是,這項定期監控特性可以解決 Render 免費版的休眠問題。透過持續的 HEAD 請求保持服務活躍,避免冷啟動延遲,讓應用 24/7 保持即時回應。
接下來將在 Nest 後端新增健康檢查端點,讓 UptimeRobot 定期檢測以維持 Render 服務的活躍狀態。
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 分支,只在正式版本變更時自動部署
Step 1:跳過引導流程
註冊完成後,點選
Skip onboarding
直接進入主控台。
Step 2:新增監控目標
註冊登入後,點選右上角的 New 按鈕新增監控。
Step 3:設定監控 HTTPS 端點
設定監控的 HTTPS 端點(預設使用 HEAD 方法)。
Notify 設定:當端點多次無法回傳 200 狀態碼時,會暫停監控並發送警報信件
服務中斷時的通知信件
至此完成 NestJS 後端部署至 Render 平台,並透過 UptimeRobot 避免服務休眠。部署後若需查看伺服器運行日誌,可至 Grafana Loki 查詢。
今日成功將 LINE Bot 後端服務部署至 Render 雲端平台,透過 GitHub 分支實現自動化部署。過程中解決了本地開發的兩大痛點:使用固定 Webhook URL 取代 ngrok 頻繁變更的連結,以及透過 UptimeRobot 心跳偵測避免服務休眠,確保 LINE Bot 提供 24/7 不間斷服務。結合先前建置的 Grafana Loki 日誌監控系統,LINE Bot 已具備相對完整的生產環境基礎。