AWS弹性Beanstalk和Composer

9

我有一个使用Composer依赖的应用程序,我想部署到Elastic Beanstalk容器中。但是我的composer.json文件不在项目根目录中。我的项目根目录具有以下结构:

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

我已将容器配置选项中的文档根目录设置为/ www。问题是我需要在盒子上安装composer并运行composer install脚本以添加项目依赖项。我知道在部署EB期间,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
一个快速测试,看起来这个已经起作用了。谢谢。不确定为什么我之前没有想到,现在看起来很明显。 - Adrian Walls
1
我有一个有点相关的问题。需要注意的是,您需要创建.ebextensions文件夹--不要使用现有的.elasticbeanstalk文件夹。 - Acyra
这个答案可能会有帮助:https://stackoverflow.com/a/76359381/12326605 - undefined
4个回答

19

Composer已默认安装在Beanstalk的PHP AMI中。

还要注意的是,container_commands是通过'/var/app/ondeck'运行而不是当前目录。尝试像这样:

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

/var/app/ondeck/www 目录不存在。这是仅对 Beanstalk 可见而不对直接登录 EC2 实例的用户(root)可见的内容吗? - Adrian Walls
5
ondeck目录是在容器命令阶段创建的。以下是其简要摘要:
  • 下载新版本
  • /var/app/ondeck 上解压代码
  • 运行所有 commands
  • 使用默认CWD=/var/app/ondeck运行所有 container_commands
  • 如果没有错误,则用 ondeck 替换当前版本
- Ker Ruben Ramos
1
谢谢,这真的很有用。我按照@tbjers建议将composer移动到项目根目录,并从那里链接了所有内容,经过快速测试后似乎已经起作用了。这意味着EB可以直接处理所有这些问题,我不必再去调整它们。但出于好奇,我也会尝试一下这个方法。 - Adrian Walls

9

请注意,AWS在Elastic Beanstalk中使用的大多数PHP容器都是通过运行composer.phar install进行自动部署的。如果您没有“vendors”文件夹,则应该可以跳过此步骤。如果希望手动运行,上述方法应该可行,但您只需要像@kewubenduben提到的那样做。

如果您正在尝试访问私有远程存储库,请查看这里的问答:AWS Elastic Beanstalk使用带有私有Composer存储库的PHP,无耻地插入广告。


1

我采纳了@tbjes提供的建议,将与composer相关的文件移动到项目根目录之外的文档根目录,并经过快速测试,所有内容似乎都可以直接使用,而无需通过.ebxtenstions配置文件运行composer。


0

从2019年开始,语法略有变化。如果您通过弹性 Beanstalk 部署,想要自动运行 composer,请将以下文件(01composer.config)添加到名为“.ebextensions”的文件夹中,该文件夹位于您的代码库/项目的根目录中:

enter image description here

该文件的内容应如下,以便每次部署代码时都能简单而有效地运行composer:

commands:
   composer_update:
      command: export COMPOSER_HOME=/root && /usr/bin/composer.phar self-update

option_settings:
   - namespace: aws:elasticbeanstalk:application:environment
     option_name: COMPOSER_HOME
     value: /root

container_commands:
  01-install_dependencies:
       command: "php /usr/bin/composer.phar install"
       cwd: "/var/app/ondeck"
  
  02-optimize:
      command: "php /usr/bin/composer.phar dump-autoload --optimize"
      cwd: "/var/app/ondeck"

间距很重要。缩进与上面的代码相同(从一个有效示例中复制,2020年6月)。 文件名开头的数字01表示这些命令文件的运行顺序。您可以根据自己的设置更改这些数字/顺序。我总是将composer放在列表的第一位。

编辑:FYI composer install不会安装composer!它只会安装composer中的软件包。Composer必须已经安装,作为AWS的PHP AMI的默认部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接