2025年10月9日 星期四

在 render.com 佈署 Python 網頁應用程式 (一)

我在 8 月初註冊了 render.com 帳號, 但前陣子都在忙著把 Hahow 企業版上註冊的課程看完, 所以一直沒時間測試, 昨天我的 Hahow 使用期限終於截止了 (剩好幾門課沒看完, 可惜), 於是就有時間可以來玩玩 Render 了. 

本篇旨在紀錄我如何在 Render 上佈署一個 Flask app, 註冊 Render 帳號的程序參考 :


關於 Flask 基本用法參考 : 



1. 建立遠端 Git 儲存庫 :

Render 是透過遠端 Git 儲存庫 (GitHub, GitLab, BitBucket) 來佈署 App 專案的, 因此要先將本機的 App 專案用 Git 上傳到儲存庫的 repo 才行, 對於簡單的 App 也可以直接在儲存庫網頁上建立 repo. 

以 GitHub 為例, 登入後按右上角的 + 鈕, 點選 New repository 新增一個 repo : 




輸入自訂的 repo 名稱後按 Create repository 鈕即建立一個新的儲存庫 : 




以上操作的本機 Git 指令如下 :

echo "# render-test-1" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/tony1966/render-test-1.git
git push -u origin main

如果有安裝 Git 就可以在本機用上面指令來建立 repo. 


2. 新增應用程式檔, 相依檔, 與設定檔 :

建立 repo 後點下方的 "creating a new file" 超連結 : 




在 repo 名稱後面填入 App 程式檔名 app.py :




然後於下方 Edit 框貼上下列程式碼, 再按右上角的 Commit changes 鈕 : 

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello from Render via GitHub!"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=10000)




接著建立相依套件檔 requirements.txt, 按右上角 "" 鈕 :



在 repo 名稱後面填入相依套件檔名 requirements.txt :




最後同樣程序建立設定檔 Procfile (注意沒有副檔名), 內容如下 :

web: gunicorn app:app




至此 repo (render-test-1) 底下就有 3 個檔案了 :




這樣便完成應用程式佈署前的準備了. 


3. 將 Web app 佈署到 Render :

登入 render.com 後, 在 Dashboard 頁面中按右上角的 +New 鈕, 點選選單中的 Web service :





在 Git Provider 中點選 GitHub :




按 "Authorize Render" 授權存取 GitHub 上的 repo : 




預設是 All repositories, 這會授權 Render 可存取帳號下的所有 repo (包含私有的 repo), 以後新建的 repo 也能直接被 Render 找到, 毋須每次授權, 這雖然方便但不太安全, 最好是選擇 Only select repositories, 挑選要佈署的 repo (此處為上面建立的 render-test-1) :




輸入 GitHub 密碼授權 Render 存取此 repo :




這時會顯示所授權存取的 repo 列表, 點選 render-test-1 進行佈署設定 : 




在佈署設定頁面中 Name 欄位用來設定 web app 網址的開頭部分 (預設是 repo 名稱), Region 欄位可選擇主機地點 (建議選擇離台灣較近的 Singapore), 實體類型 (即計費方案, 測試用可選 Hobby 免費方案), 環境變數 (例如 API Key 或密碼等, 此處沒用到), 然後按底下的 Deploy Web Service 鈕進行佈署 : 






佈署過程會顯示在右下角的 Log 中, 出現 "Your service is live" 表示 web app 已上線了 :





點上方的 web app 超連結即可看到此 Flask app 的回應了 :





根據 Render 的說明文件, 免費帳戶 (Hobby 類型實體) 可建立的 web app 數量並無限制, 但整個帳戶的使用時數 (instance hours) 與資料庫數量則是有限制的, 免費方案每個月有 750 小時運行時間; 資料庫則只能有一個是 active, 參考 :


但免費方案的 web app 如果 15 分鐘內沒有收到任何 HTTP 請求, 則服務就會自動進入休眠 (spin down) 狀態, 當有新的請求時才會啟動喚醒服務 (cold start), 這可能需要幾秒鐘的時間 :




如果希望  web app 一直穩定運行不要自動休眠可以考慮付費方案, 最低是每個月 7 美元的 Starter 方案 (512MB RAM), 其次是每月 25 美元的 Standard 方案 (2GB RAM). 

如果要刪除或暫停 web app, 可在 Dashboard 上按此 web app 最右邊的三個小點按鈕, 選擇 Settings : 




將 Settings 頁面拉到最底下, 按 Delete web service 即可刪除此 app, 這會將此 app 在 Render 上的所有資料全部清除, 但不會去刪除 GitHub 上的 repo :




也可以按 Suspend web service 暫停 app 服務, 這只會停止該服務的所有 container, 服務的設定 (域名, 環境變數, 部署紀錄, log) 都還在, 不會再消耗 CPU, RAM, 流量 (付費方案不會再被計費), 拜訪網址不會顯示回應, 但可以隨時 Resume (恢復服務), Resume 後 Render 會重新啟動容器. 

沒有留言 :