如果各位在前幾章有跟著操作並將專案推送到 GitHub
,很有可能會收到類似下圖的警告,提醒你機密資訊已被記錄到版本歷史中。特別是在使用 git
時,洩漏機密資訊是一件特別麻煩的事情,一定要使用 rebase
清理歷史紀錄,否則其他人可以切回舊版本,從中發現這些敏感資料。
(這張圖是正常的,因為我真正的部署資料都放在 WebApp-Deployment 了,這層只包含一些測試用的資料)
接下來的幾章就是要來介紹,我預計怎麼管理各種密碼、憑證等部署用的敏感資料。
首先,我的目標非常簡單:
綜合這些需求,我會建立一個 config
資料夾,並將它加入 .gitignore
,防止敏感內容進入版本控制。
config/ # config 資料夾中的所有內容都不會被 git 追蹤
接著,將整個 config
資料夾複製為 config.example
,並移除其中的敏感資料。這樣無論是別人還是我自己在新機器上 clone 專案後,只需簡單執行 cp config.example config
,環境就能順利跑起來。
例如,從上一章我們可以看到,我的 odoo_Certificate.crt
是放在 ./config/certs
中,並且在 config.example
放入一個替代憑證(不是從實際信任鏈簽發的憑證),讓專案在 clone 下來時就可以直接執行,也讓其他人可以清楚知道真實的憑證應該使用什麼檔案名稱。
此外,還記得我們 docker-compose 入門:同步啟動 odoo 與 PostgreSQL的 docker-compose.yml
設定,原本的環境變數設定如下:
postgresql:
...
environment:
- POSTGRES_DB=odoo_db
- POSTGRES_USER=odoo_user
- POSTGRES_PASSWORD=JXPF9aDZeZWlrDpf
...
為了更好地管理這些環境變數,我們可以將它們移至 dev.env
中,並將該檔案存放在 config
資料夾中。
建立 dev.env
檔案內容如下:
POSTGRES_DB=odoo_db
POSTGRES_USER=odoo_user
POSTGRES_PASSWORD=JXPF9aDZeZWlrDpf
最後 docker-compose.yml
中的設定將修改為:
postgresql:
...
env_file:
- ./config/dev.env
這樣,環境變數將不會直接暴露在 docker-compose.yml
中,而是從 config/dev.env
中讀取。
這算是蠻土炮的做法,但我覺得頗有效的,也不會增加太多複雜度。然而,如果你有一些需求,比如儲存共用的外部 API token,或者其他像是:
AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
)這時使用類似 git-secret
和 git-crypt
的方法也可以好好考慮。這些工具能夠加密敏感的檔案,並且僅允許擁有相應 GPG 私鑰的使用者解密,在共用的同時保護這些敏感訊息的安全。