1

部署多容器docker symfony應用程序的正確方法是什麼?在AWS Elastic Beanstalk上部署Dockerized Symfony2應用程序

我有以下的知識基礎和情況至今:

  1. 我的搬運工,撰寫環境中工作的地方,由nginx的,PHP5-FPM,memcached的,MySQL和mailcatcher的
  2. 我使用的多容器EB應用程序和目標是有一個單獨的「測試」和「生產」環境運行與單獨的配置
  3. 我已經知道我不能簡單地在EB內建立整個事情,並且必須已經建立了圖像,因此我有他們全部在這裏:https://hub.docker.com/u/sunbake/dashboard/
  4. 我知道我可以爲每個EB環境
  5. 設置自定義的環境變量,我知道SYMFONY__WHATEVER_NAME可以很容易地使用應用程序參數

現在真正困擾我,我問怎麼做以更好的方式?

  • 插入如數據庫密碼的敏感值似乎有點腥 - 如果不出意外,HTML輸入提交值可以獲取存儲在瀏覽器緩存/歷史
  • 設置整個操作系統的敏感數據的環境變量大致相同 - 想象一下,有人獲得任何類型的系統訪問權限,然後獲得env變量。即使這是唯一可能的事情,獲取明文密碼是不好的
  • 爲了通過nginx將環境變量獲取到通過php-fpm運行的PHP skript,nginx配置文件必須通過它們。換句話說,如果我想使用這種方法,我必須在我的nginx.conf中有硬編碼參數(是的,沒有值,但是繼續閱讀)。
  • 第八發子彈我整點和問題:

  • 鑑於本文的第三個子彈那就意味着我要重建整個圖像每次我想添加一個參數,這可以完成,但似乎是一個開銷,也意味着我不能使用該圖像的多個應用程序,它可能有不同的參數
  • 鑑於圖像和它的源必須是公開的(我不打算在這個用例中支付碼頭中心),它還公開了應用程序如何工作的部分內容。例如,如果一個潛在的攻擊者能夠以某種方式執行代碼來列出我的env變量,他就知道哪些env變量要準確查找。
  • 我希望用全到位桶 - 泊塢窗 - dockerhub-EB到多個環境中自動部署:

    • 發展本地主機與一組特定的泊塢窗圖像(mailcatcher,本地MySQL實例上,Xdebug的啓用)
    • 測試環境中對AWS EB在他們的RDS沒有mailcatcher和數據庫
    • 生產環境相同的測試之一,但沒有了XDebug和一些小的優化調整

    當然,必須有一種方法來做到這一點。我相信我已經走得很遠,但我有點不對勁。任何提示將不勝感激。

    回答

    0

    這個帖子完全值得TL; DR部分

    1. 您可以從Dockerhub切換到Tutom,它提供了10個免費的私人倉庫
    2. 你不應該把裏面泊塢窗硬編碼參數。這與擁有泊塢窗圖像的整個觀點相矛盾
    3. 您應該使用EB環境變量在運行時動態添加/刪除env vars。這將使您無需每次重新構建docker(您只需要從aws控制檯重新啓動應用服務器,僅需要一分鐘)
    4. 您可以加密env vars的值,並且在你的代碼中解密它們。這樣他們仍然是一個祕密。
    +0

    #1:好的,謝謝你的提示//#2:的確,因此我的帖子//#4:好主意,謝謝!然後#3:是的,整篇文章是關於我無法讓nginx獲取所有EB環境變量(及其值)並將它們傳遞給PHP-FPM的沮喪。我只能預定義這些變量,然後動態地賦值。你能詳細說明一下嗎? –

    +0

    @JanKlan你在#3面臨的問題是什麼?一旦你在彈性beanstalk控制檯(或cli)中定義了你的變量,你可以在docker實例中訪問它們。你想在主機上訪問它們嗎? (例如,nginx在哪裏) – Tal

    +0

    問題是,對於我使用(或計劃使用)的每個應用程序,都會有一組不同的配置參數 - 不是值,而是參數。我的目標是擁有一個通用docker環境,該環境將Symfony源代碼安裝到目錄中,並將這個環境與不同的Symfony應用程序一起使用。每個應用程序最終都會不僅在參數值上有所不同,而且在可配置的一組參數中也會有所不同。到目前爲止,我知道的唯一方法是在nginx配置文件中硬編碼env變量名。這隻適用於每套參數一個Symfony應用程序,因此一個碼頭容器。 –

    相關問題