9

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

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

我已经在容器配置选项中将文档根目录设置为 /www。问题是我需要在盒子上安装作曲家并运行作曲家安装脚本来添加项目依赖项。我知道在部署期间,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

4 回答 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"
于 2013-07-08T14:00:30.720 回答
9

请注意,AWS 在 Elastic Beanstalk 中使用的大多数 PHP 容器现在都是通过运行 composer.phar install 来自动部署的。如果您没有“供应商”文件夹,您应该可以跳过此步骤。如果您想手动运行它,上述方法应该可以工作,但您只需要提到@kewubenduben 之类的东西。

如果您尝试访问私有远程存储库,请在此处查看问答:AWS Elastic Beanstalk using PHP with Private Composer Repositories,无耻插件。

于 2014-02-20T20:19:09.000 回答
1

遵循@tbjes 提供的建议,将我的文档根目录之外的作曲家相关文件移动到项目根目录,经过快速测试后,所有文件似乎都可以开箱即用,而无需通过 .ebxtenstions 配置文件运行作曲家。

于 2013-07-09T08:32:25.097 回答
0

自 2019 年起,语法略有变化。要在通过弹性 beanstalk 部署时自动运行 composer,请将以下文件 (01composer.config) 添加到存储库/代码项目根目录中名为“.ebextensions”的文件夹中:

在此处输入图像描述

该文件的内容应如下所示,以便在每次部署代码时简单而有效地运行 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 必须已经安装,默认情况下它应该是 AWS 的 PHP AMI 的一部分。

于 2020-06-22T09:22:16.903 回答