2014-05-22 70 views
4

雖然我的理解是,在不同的部署環境中使用環境變量來配置應用程序是最佳實踐,但我不知道管理這些環境並在其中填充變量的好方法。如何處理env變量羣體

這裏是我考慮的方法:在我們用它來運行我們的應用程序了Upstart腳本填充它們

  • 。我們使用Ansible來配置我們的服務器,這些服務器當前通過靜態新貴腳本進行復制,但是這可以使用環境變量進行模板化。

  • 同樣的方法,但與/etc/environment

  • 使用類似envdir並再次使用ansible填充文件。

另一個問題是在哪裏存儲的值,我在想Redis,但我願意提供建議。 Ansible有一個「保險庫」,我還沒有看到哪一個可能是一個選擇。

這些值是API鍵和數據庫URL之類的東西。

我真的只是想知道其他人使用什麼方法。我接受所有建議。

回答

3

我認爲這個問題是要徵求了很多意見,可能很多相互矛盾的意見,但在這裏,說是我的一些看法:

  • /etc/environment是操作系統的一部分,用於交互式用戶shell的配置。不要將其用於應用程序。
  • 通過ansible模板化的upstart配置對我來說似乎很合理。只要確保文件系統權限適當地鎖定到根目錄,只有當你打算在那裏存儲敏感數據時才能讀取。
  • 您也可以使用模板化的特定於應用程序的配置文件,例如/etc/myapp/config,它幾十年來在許多程序中運行良好。整個環境變量比配置文件的位置實際上更多地來自PaaS的角度(我相信heroku通過他們的12因子應用程序網站來推廣這種方法)。因此,如果您部署的是PaaS或PaaS風格,則envirnoment很方便。但是,如果您通過Ansible在您自己的服務器上安裝您的應用程序,恕我直言,直接配置文件更容易排除故障,原因是我在我的博客文章中列出的原因environment variables considered harmful