將Go部屬至Heroku
這次搭著猛男撿樹枝阿講錯是動物森友會的熱潮做了一個 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:
- gorun :
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的後端程式碼提供大家參考