本來今天是要講完 Grafana 的部分,不過我發現我還是來不及做完...目前的進度只有下面這樣,我認為還缺了點東西,看看明天能不能處理完吧。
所以今天我想來講講其他的主題,有關目前 NOJ 部署上,我認為的一些問題以及可能的改善方向。
目前的情況是我們會把整個 repo 放在 server 上面,每當需要更新的時候就上去 build docker image 以及把 container 跑起來。因為有些設定是無法公開的,像是 JWT 使用的 secret、沙盒使用的 token 等等,加上我們那時候對於這些 credential 的管理並不熟悉,所以我們是把這些東西直接寫進 docker-compose.prod.yml
這個生產環境使用的設定檔,並且避免它們進版控。(實際上還有一些其他檔案也是啦...)
這樣子的做法我想會有幾個問題,首先第一個是這樣的流程容易引入人為的變更,而導致我們不好確定目前運行的服務是什麼狀態,以過去的經驗來看,因為 code 就在那邊嘛...所以有時候就會有直接在 server 上 hotfix 之後部署下去的狀況,在這種情況下,就導致了這些修復不會即時的被 commit。雖然說這當然可以透過規範大家不要修改上面的 code 來解決,但若是可以從根本上杜絕,也就是不要在 server 上面放 code,而是在 CI 流程中 build image 再部署。
另外一個問題是,因為我們姑且也算是開源專案嘛(雖然我覺得還有許多問題要解決),若是要讓其他人也可以正常的部署的話,那麼那些正式環境的設定也應該要可以進到版控裡面才對,而 secret 的部分讓不同的人可以去替換掉。可是以目前的設計來說它們是綁在一起的,並沒有分開,所以暫時做不到。
其他多少還有一些小問題,都容易導致整個服務的狀態變得不穩定,進而導致維運的困難,所以我的短期目標,應是要讓正式環境的設定檔也可以進版控吧。