【问题标题】:AWS Elastic Beanstalk and ComposerAWS Elastic Beanstalk 和 Composer
【发布时间】:2013-07-05 12:03:27
【问题描述】:

我有一个包含 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/"

但我的应用不会使用此配置进行部署。希望能得到一些帮助,看看我哪里出错了。

谢谢。

【问题讨论】:

  • 您是否尝试过将 composer.json 移动到项目的根目录并进行部署?
  • 快速测试,这似乎奏效了。谢谢。不知道为什么我实际上没有想到这一点,现在似乎很明显。
  • 我遇到了一些相关的问题。请务必注意,您需要创建 .ebextensions 文件夹——不要使用现有的 .elasticbeanstalk 文件夹。

标签: amazon-web-services amazon-ec2 composer-php amazon-elastic-beanstalk


【解决方案1】:

自 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 的一部分。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        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)不可见?
        • ondeck 目录是在 container_commands 阶段创建的。这里是它的一个小总结: * 下载新版本 * 在 /var/app/ondeck 上提取代码 * 运行所有 commands * 运行所有 container_commands 默认 CWD=/var/app/ondeck * 如果它通过没有错误,它将用 ondeck 替换当前:编辑原因:糟糕的输入按钮充当 SAVE。
        • 谢谢,知道这真的很有用。我按照@tbjers 的建议将作曲家移动到项目根目录,并从那里链接了经过快速测试后似乎有效的所有内容。这意味着 EB 开箱即用地处理所有这些问题,我不必修补它。但出于好奇,我也会尝试一下。
        猜你喜欢
        • 2013-08-24
        • 2016-03-11
        • 2017-01-17
        • 2018-05-23
        • 2014-03-22
        • 2015-04-17
        • 2015-10-29
        • 2017-11-08
        • 2017-10-01
        相关资源
        最近更新 更多