簡體   English   中英

將PHP Web應用程序部署到Elastic Load Balancer后面的多個EC2實例

[英]Deploying a PHP webapp to multiple EC2 instances behind a Elastic Load Balancer

我的問題基本上是兩個問題,但由於它們密切相關,我認為讓它們成為有意義的是有道理的。

案件:
我正在運行一個webapplication,它分布在AWS Elastic Load Balancer后面的多個AWS EC2實例上

預期目標:
a)在部署新的應用程序代碼(php)時,它應自動分發到所有EC2實例。
b)當添加新的EC2實例時,它們應該使用最新的應用程序代碼自動“引導”

到目前為止我的想法:
廣告a)
phing(http://phing.info)可能就是這部分的答案。 我可能會為每個EC2實例添加多個目標,並且在運行部署時,它將部署到所有計算機。 可能不幸的是沒有並行。 但是,當以負載均衡器中的EC2實例“暫停”,再次升級,“取消暫停”並再次運行到下一個實例的方式編寫腳本時,這可能甚至是有益的。

廣告b)
不知道我將如何實現這一目標。 在傳統的“基於硬件的設置”中,我可能在網絡存儲設備上有一個“應用程序代碼”卷,並且當添加新服務器時,我只需附加該卷。 在部署新的appcode時,我只對該卷進行了一次部署操作。 所以我需要一些“中央存儲”,從新引導的機器/實例下載它的應用程序代碼。 我考慮過git,但畢竟git不是一個部署工具,可能不應該被強制用作一個。

我很高興看到你為這些任務設置的設置,並聽取你對這種情況的提示和想法。

謝謝,

約書亞

這可以使用phing進行。 但是,我不確定為什么要讓新實例自動檢索appcode? 你經常得到額外的實例嗎? 並且為了a)將代碼部署到多個實例,它仍然需要知道它們?

此設置需要主部署服務器並使用推送策略。 主服務器需要phing,任何所需的phing包,以及EC2實例的可選ssh密鑰。

建議a)

(這只是所需的phing任務的大致輪廓)

  • 檢索實例列表(配置文件或suuplied參數)
  • 將appcode從存儲庫導出到主服務器(例如SubVersion)
  • Tar appcode
  • scp tarball到所有EC2實例(到部署文件夾)
  • 在EC2實例上使用rsh解包tarball
  • 使用EC2實例上的rsh更新符號鏈接,以便webserver文件夾指向新的部署文件夾
  • 清除Web服務器上的所有緩存

在您發布新版本后,可以調用上述內容。

建議b)這可以通過每隔幾個小時運行一次phing腳本,讓它登錄到EC2實例並檢查appcode來實現。 如果找不到,它將部署最新的最終版本。 當然,這需要在Web服務器,配置文件等方面正確設置EC2實例(但是,這也可以通過phing遠程shell實現)。

我以前使用過類似的設置,但沒有嘗試使用像EC2這樣的服務。

我相信phing是一個很好的工具。 Capistrano也可能有所幫助。

我在非常相似的環境中部署我的應用程序。 到目前為止,我一直在使用簡單的bash scirpts,但我可能會轉向基於phing的解決方案,主要是因為開發shell腳本有困難(你必須知道一個不是很靈活的新語法,而不是提到跨平台)和並行處理的可用性,這在phing中存在。

Phing是管理部署任務的絕佳工具,幾乎涵蓋了(a)的大部分內容。

我們使用OpsCode Chef進行基礎架構管理。 它有一個deploy_revision目標,同時支持SVN和Git repos用於應用程序代碼部署,而knife(主Chef命令行工具)有一個EC2插件,允許您通過一個命令啟動新的EC2具有您在Chef中定義的任何角色和環境的實例,並部署您的應用程序代碼。

為了使用ELB后面的多個EC2實例來管理它,我們使用Python boto庫編寫連接到ELB的非常簡單的腳本,獲取附加到該ELB的所有實例的列表,並逐個刪除實例。 ELB,在該實例上運行Chef更新(部署新的應用程序代碼和任何機器配置更改),將實例重新附加到ELB並轉到下一個實例。

a)看看Capistrano ,因為你沒有使用Ruby(和RoR)使用railsless-deploy插件。 Capistrano可以部署到多個服務器。

b)沒有任何經驗,但如果沒有Capistrano的插件/寶石可以為你做這件事,我也不會感到驚訝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM