將Go部屬至Heroku

Chung-chun Lo
Skyler Record
Published in
4 min readMay 10, 2020

這次搭著猛男撿樹枝阿講錯是動物森友會的熱潮做了一個 Project 。主要是可以讓大家提供自己目前的菜價並顯示在網站

讓大家可以透過網站知道目前最高的菜價在誰的島上,也提供玩家可以在網站上互加好友分享彼此的朋友編號。

這次的 Project 我主要是將 DB 跟前端放在 GCP 上,而後端的部分則是放到了Heroku 以便降低 GCP 的使用量畢竟 GCP 還是貴阿

但由於真的是太久沒用 Heroku 了所以這次將 project Deploy 至 Heroku 整整花了我一整天...

想說把操作流程記錄下來以便日後可以參考

Heroku

相信 Heroku 這個平台應該許多人有聽過也使用過,Heroku 的免費方案會提供 Dyno 每個月有550小時的免費時數,而每個服務至少都需要一個 Dyno 才可運作。

如果30分鐘內都沒有呼叫到服務的話 Heroku 就會自動睡著,睡著後不會計算消耗時數每當有新的服務請求時需要約 20-30秒的喚醒時間。綁定信用卡後可以再免費使用 DB 以及多贈送每個月 450小時的時數。

Heroku 提供三種 Deploy 方式

  • 將程式碼用 git push 至 Hreoku
  • 連接 GitHub
  • 以 Docker Container 的方式

這次我原本打算利用 Docker 的方式 Deploy ,但無奈不知為何 Build 出來的image 在 local 都可以正常運行但每次 Deploy 上去後都會 Crash....

後來我就放棄使用 Docker 的方式改使用第一種直接將程式碼push上Heroku。不選擇連結 GitHub 的原因是因為裡面有些 DB 資訊什麼的我原本是將 Config給 ignore,但如果是這樣程式就無法正常運作。

首先呢要使用 Heroku 需要先在電腦安裝 Heroku CLI ,安裝完畢後在Command line 進行登入

$ heroku login

這時候會跳出你的瀏覽器此時輸入你的 Heroku 帳號密碼即可,登入完畢後再建立一個新的 App。

$ heroku create vegeter

這時候你會在你的 Heroku 頁面看到剛剛新增的 App

新增 Git Romote

$ heroku git:remote -a vegeter

Heroku.yml

build:    
languages:
- go
run :
web : vegeter

記得要在專案內新增 Heroku.yml 不然 Heroku 會無法正常運作,我每次隔很久沒使用都會忘記然後就卡在這好久...

再來只要將程式 push 上 Heroku 他就會開始自動 Bulid 拉

$ git add .
$ git commit -am "make it better"
$ git push heroku master

完成後就可以進到 App 的 Dashboard 查看 Deploy 的情況拉

Deploy 上去後我發現服務沒有正常啟動,進到 log 後發現過沒幾分鐘服務就會顯示錯誤。

heroku[web.1]: State changed from starting to crashed

找了老半天才發現,通常我都會在程式內指定 port 但如果要放到 Heroku的話因為 Heroku 會自動分配 Port 所以必須將 Port 改為讀取環境變數的方式服務才能正常運作。

os.Getenv("Port")

後來想一想或許我用 Dcoker 部屬會一直 Crash 也許也是因為這個原因...

總之最後還是成功在Heroku上執行拉,最後放上這個Project的後端程式碼提供大家參考

--

--