我在 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 進行佈署設定 :
佈署過程會顯示在右下角的 Log 中, 出現 "Your service is live" 表示 web app 已上線了 :
點上方的 web app 超連結即可看到此 Flask app 的回應了 :
但免費方案的 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 會重新啟動容器.

























沒有留言 :
張貼留言