8

我有一個具有Composer依賴關係的應用程序,我想將其部署到Elastic Beanstalk容器。但是,我的composer.json文件不在項目根文件夾中。我的項目根具有以下結構:AWS Elastic Beanstalk和Composer

- .ebextensions 
- scripts 
- www (Webroot) 
    - composer.json 

而且我已經在容器配置選項中將文檔根設置爲/ www。問題是我需要在盒子上安裝composer並運行composer安裝腳本來添加項目依賴項。我知道在部署期間,EB會檢查項目根目錄中是否有composer.json文件並安裝Composer,但在這種情況下,我的composer.json文件位於子目錄中。

我認爲在部署應用程序後,可以使用.ebextenstions添加命令來安裝Composer和依賴項。我創建了一個文件.ebextensions/01-composer.config與以下容器的命令:

container_commands: 
    01-install-composer: 
    command: "curl -sS https://getcomposer.org/installer | php" 
    02-install-packages: 
    command: "php composer.phar install" 
    cwd: "/var/app/current/www/" 

但我的應用程序將無法使用此配置部署。希望得到一些幫助,看看我哪裏去錯了。

謝謝。

+4

您是否嘗試將composer.json移動到項目的根目錄並進行部署? – tbjers

+0

一個快速測試,這似乎工作。謝謝。不知道爲什麼我沒有真正想到這一點,現在看來很明顯。 –

+1

我有一個相關的問題。需要注意的是,您需要創建.ebextensions文件夾 - 不要使用現有的.elasticbeanstalk文件夾。 – Acyra

回答

14

Composer在Beanstalk的PHP AMI中已經安裝了默認設置。

還要考慮container_commands是通過'/ var/app/ondeck'而不是當前運行。嘗試是這樣的:

container_commands: 
    01-install-packages: 
    command: "composer.phar install -d /var/app/ondeck/www" 
+0

沒有/ var/app/ondeck/www目錄。這些東西只能看到Beanstalk,而不是直接登錄到EC2實例的用戶(root)? –

+5

'ondeck'目錄是在container_commands階段創建的。下面是它的一個輕微的總結: *下載新版本 *在/ var上提取代碼/應用/ ondeck *運行所有'commands' *默認運行所有'container_commands' CWD =在/ var /應用/ ondeck *如果它通過沒有錯誤,它將取代目前與ondeck :編輯原因:糟糕的輸入按鈕作爲保存。 –

+1

謝謝,這是非常有用的知道。我按照@tbjers的建議將作曲家移動到項目根目錄,並將從那裏開始的所有內容鏈接到一個快速測試似乎已經工作的地方。這意味着EB可以處理所有這些問題,而且我不必修補它。但我會嘗試這個以及出於好奇。 –

1

去與由@tbjes提供的建議,並動了我的文檔根到項目根目錄之外,並快速測試都似乎是工作的開箱,而無需經過作曲家相關的文件通過.ebxtenstions配置文件運行作曲家。

4

請注意,AWS在Elastic Beanstalk中使用的大多數PHP容器都是通過立即運行composer.phar install來自動部署的。如果您沒有「供應商」文件夾,您應該可以跳過此步驟。如果你想手動運行它,上面的方法應該可以工作,但你應該只需要提到類似@kewubenduben的東西。

如果您嘗試訪問私人遠程存儲庫,請查看此處的Q和A:AWS Elastic Beanstalk using PHP with Private Composer Repositories,無恥插件。