小獅:可以創建使用者了,但是我們要用哪一組帳號密碼去建立 token
然後,使用該 token
去建立帳號?
老獅:如上次討論的,我們可以用環境變數設定一組帳號密碼,例如:
INIT_SUPERUSER_USERNAME
INIT_SUPERUSER_PASSWORD
老獅:在伺服器跑起來以前去執行建立帳號的動作,這樣我們就可以使用該帳號
小獅:如何在伺服器跑起來以前去執行創建帳號?
老獅:這取決於你是如何部署你的伺服器的
小獅:我有看到 FastAPI
提供 startup
的事件監聽,我們可以在該事件後 hook
一些程式碼,在伺服器起起來時去作動,這可行嗎?
老獅:可以的,但是該方式有可能導致 Race Condition
小獅:Race Condition
?
老獅:是的,想想你今天一次有多個 Web 伺服器起起來時,會發生什麼?
小獅:一堆機器同時跑建立帳號的指令
老獅:這樣會導致什麼後果?
小獅:如果我們環境變數都一樣,那最終結果應該一樣,但是如果不一樣的話。。。
老獅:你就會不知道建立的帳號密碼是哪個才對
小獅:對耶,那我們該怎麼辦?
老獅:我們可以部署時,自動跑該 Script
當然要確保該環境可以連上資料庫
小獅:這我們要煩惱嗎?
老獅:如果我們要自己部署時再煩惱吧!我們可以先把流程規劃好,讓最後要部署的人或是我們自己建立的 CD
(Continuous Delivery) 去處理
小獅:好,那我們預設,會有一個可以執行 Script
的 shell 去執行 python3 src/scripts/make_init_superuer.py
並且預期,一次部署只會跑一次,以此當做開發目標
老獅:看起來沒問題,我們來實作吧