iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
Odoo

Odoo 部署策略系列 第 12

config 資料夾:odoo 部署中的敏感檔案管理

  • 分享至 

  • xImage
  •  

如果各位在前幾章有跟著操作並將專案推送到 GitHub,很有可能會收到類似下圖的警告,提醒你機密資訊已被記錄到版本歷史中。特別是在使用 git 時,洩漏機密資訊是一件特別麻煩的事情,一定要使用 rebase 清理歷史紀錄,否則其他人可以切回舊版本,從中發現這些敏感資料。

https://ithelp.ithome.com.tw/upload/images/20240925/20168935GBXQ8UTMS1.png
(這張圖是正常的,因為我真正的部署資料都放在 WebApp-Deployment 了,這層只包含一些測試用的資料)

接下來的幾章就是要來介紹,我預計怎麼管理各種密碼、憑證等部署用的敏感資料。


首先,我的目標非常簡單:

  1. 所有機敏的資料都不能被記錄在版本歷史中。
  2. 這些資料應該統一管理,讓我在另一台系統安裝時,避免這裡需要複製、那裡需要修改的麻煩。我記得曾經在使用別人的專案時,設定文件到處放就算了,文件也不清楚,導致花了相當多的時間在一開始研究。
  3. 非機敏的資料應盡可能跟隨專案一同管理,確保環境能完整複製。

綜合這些需求,我會建立一個 config 資料夾,並將它加入 .gitignore,防止敏感內容進入版本控制。

config/ # config 資料夾中的所有內容都不會被 git 追蹤

接著,將整個 config 資料夾複製為 config.example,並移除其中的敏感資料。這樣無論是別人還是我自己在新機器上 clone 專案後,只需簡單執行 cp config.example config,環境就能順利跑起來。

例如,從上一章我們可以看到,我的 odoo_Certificate.crt 是放在 ./config/certs 中,並且在 config.example 放入一個替代憑證(不是從實際信任鏈簽發的憑證),讓專案在 clone 下來時就可以直接執行,也讓其他人可以清楚知道真實的憑證應該使用什麼檔案名稱。

此外,還記得我們 docker-compose 入門:同步啟動 odoo 與 PostgreSQLdocker-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 憑證(例如 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY
  • 支付系統的私鑰(如 Stripe 或 PayPal 的 API 金鑰)
  • OAuth 相關的憑證(例如 Google OAuth 或 Facebook OAuth 憑證)
  • 機密資料庫憑證(特別是在生產環境中)

這時使用類似 git-secretgit-crypt 的方法也可以好好考慮。這些工具能夠加密敏感的檔案,並且僅允許擁有相應 GPG 私鑰的使用者解密,在共用的同時保護這些敏感訊息的安全。


上一篇
odoo 反向代理設定第四步:自簽 Root CA 並安裝 SSL 憑證
下一篇
odoo.conf 內的敏感資訊:分離與保護的策略
系列文
Odoo 部署策略30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言