由於在 GCP 開的一臺伺服器上面只跑了兩個 Telegram Bot,覺得不太划算(雖然還在免費額度內),因此一直在嘗試尋找類似於 Github Pages 一樣可以託管 Python 程式碼的平臺。
前一陣子看到了 Heroku,十分想試試,但是無奈當時網路相當不穩定,只註冊了一個賬號就無法裸連了,隨即擱置了下來。今天重新嘗試了一下,竟然很快配好了。不由得感慨真的是相當方便。
前期準備
其實沒有任何需要準備的,如果對於規模相當小的程式碼來說。
官方的入門提示也十分詳盡,基本可以涵蓋到跑起自己的服務來的每一個步驟。
新增的檔案
最重要的新增的檔案有兩個,Pipfile
和 Procfile
。前者用來建立一個 pipenv 環境,安裝依賴等等。後者用來定義應用型別以及執行部署的命令。
過程
heroku login
登陸。進入到需要部署的專案目錄,並新增好必要檔案。
heroku create
建立新的 App。在 Heroku 的 Dashboard 上進行全域性變數的新增。比如不在程式碼中出現的金鑰,api_key 之類的。
Commit 後 Push 到 Heroku。
git push heroku master
這樣 Heroku 就會嘗試部署,如果是 web 型別的應用的話,會自動執行部署命令。
一個簡單的 Python 指令碼就可以部署在上面了。
遇到的問題
在嘗試部署 Telegram Bot 時,在
Procfile
裡聲明瞭型別為web
。執行之後剛開始一切正常,過一會兒會出現Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
的報錯。原因應該是在選擇
web
型別執行時,這個例項必須和宣告的一個埠繫結,而我的玩具程式碼中沒有這樣的宣告,導致繫結失敗。因此,使用其他型別,比如worker
即可正常工作。免費額度。 Heroku 似乎給免費使用者每月 550 小時的額度。並且在無活動 30 分鐘之後會進入休眠(但是可以被重新喚醒)。所以還好啦。
不知道還有沒有其他坑。我看 V2 上面沒有太多好評。🤔