iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
0

Docker file

當push到heroku,會build一個image來跑,所以先寫一個docker file
Dockerfile

FROM golang:1.15.2-alpine3.12

ADD . /go/src/app
COPY ./config.example.yaml /go/src/app/config.yaml 

WORKDIR /go/src/app

ENV PORT 8080
EXPOSE 8080

RUN go build -mod=vendor -o main .
CMD ["/go/src/app/main"]

設定檔
heroku.yml

build:
  docker:
    web: Dockerfile
    worker:
       dockerfile: Dockerfile

來跑個指令設定,它才會去讀dockerfile

heroku stack:set container

前端環境

比較好的做法是把前端的環境變數都抽出來,在docker file裡面跑npm install & npm run build
但這次我偷吃步,把参數寫死在code裡面,先build好在/dist,把它推到git
缺點是變數會比較死,修改就要推一次git

src/main.js

Vue.prototype.APIURL = "https://apptomatotimer.herokuapp.com"
Vue.prototype.BASE = "https://apptomatotimer.herokuapp.com"
npm run build

把前端在.gitignore的dist拿掉

後端安全性調整

原本在SetCookie secure的参數是false,為了方法測試
把它改成true,這個cookie只會在https的協議下傳送 (雖然偷我的token沒有任何意義就是
handler/auth.go

c.SetCookie(jwt.Key, jwtToken, config.Val.JWTTokenLife, "/", config.Val.Domain, true, true)

CROSS domin也拿掉
一般會開CROSS domain的都是公開給大家用的API
main.go

// r.Use(middleware.CROSS())

Google OAuth的url設定

之前為了測試都寫localhost,上到heroku最少會有一個https的子domain,把它設定上去
https://ithelp.ithome.com.tw/upload/images/20201005/20129767pvO6iAsRiY.png
https://ithelp.ithome.com.tw/upload/images/20201005/20129767hdgKYtZRNM.png

OAuth同意畫面那邊其實還有一個驗證
某一些OAuth的資料比較敏感,例如Gmail和雲端硬盤,你的網站要經過Goolgle驗證才給你取資料
但目前我只有取會員資料、也沒有流量,所以是不用驗證(Verification not required)

後端吃外部的環境變數

初始化config的時候要先跑這一個func
它會優先去讀最外層的環境變數,跟本地端的config檔做合併
config/config.go

viper.AutomaticEnv()

推到heroku

新增heroku git remote

git remote add heroku {Heroku git URL}
git push heroku

Heroku log

出現什麼問題來都看log就對了~
log有沒有寫好是一個很重要的事情,不然噴錯了你也很難找問題

heroku logs --tail

看到沒噴錯就OK!

打開頁面https://apptomatotimer.herokuapp.com
https://ithelp.ithome.com.tw/upload/images/20201005/20129767OOLmLBicfr.png
用Google Chrome打開沒有問題
同時我也試了Microsoft Edge、Safari,打開是沒問題,一些地方有跑版沒時間修了XD
前端最好是每一個瀏覽器跟不同的版本都測一下 #我懶 #放棄IE使用者

如果你真的要經營的話建議你去買一個domain,可以去godaddy之類,不要一直用heroku的子domain
買完之後把domain掛進來就好

效能的問題

我用的是免費方案,app太久沒用會停掉,當request進來會重開,會花一些時間
還有前端js載入的問題,自己在本機開頁面都超快,但上去之後可能機器比較遠、效能開很低,第一次的載入js很慢,要花上好幾秒
有一些優化要做在前端,目前沒時間了,就先這樣吧XD

API回傳速度最快的大概要200~400ms左右,但其實以API的複雜度來說,只有我在用應該是可以跑100ms內
不過免費仔就沒什麼好抱怨XD

結語

很多小細節,有一些可能沒講到。我自己也是小菜雞做中學
heroku學習成本已經很低了,像目前的公司是用GCP的,要教怎麼用就可以寫30天了XDD,不可能兩篇就打完

今天的commit
修了一些bug,多加了一些判斷

謝謝大家~


上一篇
Day 28 Heroku MySQL&Redis
下一篇
Day30 結語
系列文
Golang & Vue.js 30天從0打造服務30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言