megrxu

部署 Python 程式碼到 Heroku

Mar 27, 2018  #Code 

由於在 GCP 開的一臺伺服器上面只跑了兩個 Telegram Bot,覺得不太划算(雖然還在免費額度內),因此一直在嘗試尋找類似於 Github Pages 一樣可以託管 Python 程式碼的平臺。

前一陣子看到了 Heroku,十分想試試,但是無奈當時網路相當不穩定,只註冊了一個賬號就無法裸連了,隨即擱置了下來。今天重新嘗試了一下,竟然很快配好了。不由得感慨真的是相當方便。

前期準備

其實沒有任何需要準備的,如果對於規模相當小的程式碼來說。

官方的入門提示也十分詳盡,基本可以涵蓋到跑起自己的服務來的每一個步驟。

新增的檔案

最重要的新增的檔案有兩個,PipfileProcfile。前者用來建立一個 pipenv 環境,安裝依賴等等。後者用來定義應用型別以及執行部署的命令。

過程

  1. heroku login 登陸。

  2. 進入到需要部署的專案目錄,並新增好必要檔案。heroku create 建立新的 App。

  3. 在 Heroku 的 Dashboard 上進行全域性變數的新增。比如不在程式碼中出現的金鑰,api_key 之類的。

  4. Commit 後 Push 到 Heroku。git push heroku master

  5. 這樣 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 上面沒有太多好評。🤔



可能相關的