使用 Elastic Beanstalk PHP 平台 - Amazon Elastic Beanstalk
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Elastic Beanstalk PHP 平台

Amazon Elastic Beanstalk 为不同版本的 PHP 提供并支持各种平台分支。这些平台支持独立运行或在 Composer 下运行的 PHP Web 应用程序。有关支持的平台分支的完整列表,请参阅 Amazon Elastic Beanstalk 平台文档中的 PHP

Elastic Beanstalk 提供了配置选项,您可以使用这些选项自定义在 Elastic Beanstalk 环境中的 EC2 亚马逊实例上运行的软件。您可配置应用程序所需的环境变量,启用到 Amazon S3 的日志轮换,将应用程序源中包含静态文件的文件夹映射至代理服务器所提供的路径,并设置常见 PHP 初始化设置。

Elastic Beanstalk 控制台中提供了配置选项,可用于修改运行环境的配置。要避免在终止环境时丢失环境配置,可以使用保存的配置来保存您的设置,并在以后将这些设置应用到其他环境。

要保存源代码中的设置,您可以包含配置文件。在您每次创建环境或部署应用程序时,会应用配置文件中的设置。您还可在部署期间使用配置文件来安装程序包、运行脚本以及执行其他实例自定义操作。

如果使用了 Composer,您可以将 composer.json 文件包含在源包中以在部署期间安装程序包。

对于未提供为配置选项的高级 PHP 配置和 PHP 设置,您可以使用配置文件来提供 INI 文件,该文件可扩展并覆盖由 Elastic Beanstalk 应用的默认设置或者安装其他扩展。

在 Elastic Beanstalk 控制台中应用的设置会覆盖配置文件中的相同设置(如果存在)。这让您可以在配置文件中包含默认设置,并使用控制台中的特定环境设置加以覆盖。有关优先顺序和其他设置更改方法的更多信息,请参阅配置选项

有关扩展 Elastic Beanstalk 基于 Linux 的平台的各种方法的详细信息,请参阅 扩展 Elastic Beanstalk Linux 平台

安装适用于 PHP 的 S Amazon DK

如果您需要从应用程序内部管理 Amazon 资源,请安装 适用于 PHP 的 Amazon SDK。例如,借助 SDK for PHP,您可以使用 Amazon DynamoDB(DynamoDB)来存储用户和会话信息,而无需创建关系数据库。

使用 Composer 安装适用于 PHP 的 SDK

$ composer require aws/aws-sdk-php

有关更多信息,请参阅 Amazon SDK for PHP 主页。有关说明,请参阅安装 Amazon SDK for PHP

Amazon Linux 2 上的 PHP 8.1 注意事项

如果使用的是 Amazon Linux 2 上的 PHP 8.1 平台分支,请阅读本节。

注意

本主题中的信息仅适用于 Amazon Linux 2 上的 PHP 8.1 平台分支。它不适用于基于 AL2 023 的 PHP 平台分支。它也不适用于 Amazon Linux 2 上的 PHP 8.0 平台分支。

Elastic Beanstalk 将亚马逊 Linux 2 平台分支上的 PHP 8.1 相关的 RPM 包存储在本地目录中的实例 EC2 上,而不是亚马逊 Linux 存储库中。您可以使用 rpm -i 来安装程序包。从 PHP 8.1 平台版本 3.5.0 开始,Elastic Beanstalk 将 PHP 8.1 相关的 RPM 包存储在以下本地目录中。 EC2

/opt/elasticbeanstalk/RPMS

下面的示例将安装 php-debuginfo 程序包。

$rpm -i /opt/elasticbeanstalk/RPMS/php-debuginfo-8.1.8-1.amzn2.x86_64.rpm

软件包名称中的版本将根据 EC2 本地目录中列出的实际版本而有所不同/opt/elasticbeanstalk/RPMS。使用相同的语法安装其他 PHP 8.1 RPM 程序包。

展开以下部分以显示我们提供的 RPM 程序包列表。

以下列表提供了 Elastic Beanstalk PHP 8.1 平台在 Amazon Linux 2 上提供的 RMP 程序包。它们位于本地目录 /opt/elasticbeanstalk/RPMS 下。

列出的程序包名称中的版本号 8.1.8-1 和 3.7.0-1 只是举例说明。

  • php-8.1.8-1.amzn2.x86_64.rpm

  • php-bcmath-8.1.8-1.amzn2.x86_64.rpm

  • php-cli-8.1.8-1.amzn2.x86_64.rpm

  • php-common-8.1.8-1.amzn2.x86_64.rpm

  • php-dba-8.1.8-1.amzn2.x86_64.rpm

  • php-dbg-8.1.8-1.amzn2.x86_64.rpm

  • php-debuginfo-8.1.8-1.amzn2.x86_64.rpm

  • php-devel-8.1.8-1.amzn2.x86_64.rpm

  • php-embedded-8.1.8-1.amzn2.x86_64.rpm

  • php-enchant-8.1.8-1.amzn2.x86_64.rpm

  • php-fpm-8.1.8-1.amzn2.x86_64.rpm

  • php-gd-8.1.8-1.amzn2.x86_64.rpm

  • php-gmp-8.1.8-1.amzn2.x86_64.rpm

  • php-intl-8.1.8-1.amzn2.x86_64.rpm

  • php-ldap-8.1.8-1.amzn2.x86_64.rpm

  • php-mbstring-8.1.8-1.amzn2.x86_64.rpm

  • php-mysqlnd-8.1.8-1.amzn2.x86_64.rpm

  • php-odbc-8.1.8-1.amzn2.x86_64.rpm

  • php-opcache-8.1.8-1.amzn2.x86_64.rpm

  • php-pdo-8.1.8-1.amzn2.x86_64.rpm

  • php-pear-1.10.13-1.amzn2.noarch.rpm

  • php-pgsql-8.1.8-1.amzn2.x86_64.rpm

  • php-process-8.1.8-1.amzn2.x86_64.rpm

  • php-pspell-8.1.8-1.amzn2.x86_64.rpm

  • php-snmp-8.1.8-1.amzn2.x86_64.rpm

  • php-soap-8.1.8-1.amzn2.x86_64.rpm

  • php-sodium-8.1.8-1.amzn2.x86_64.rpm

  • php-xml-8.1.8-1.amzn2.x86_64.rpm

  • php-pecl-imagick-3.7.0-1.amzn2.x86_64.rpm

  • php-pecl-imagick-debuginfo-3.7.0-1.amzn2.x86_64.rpm

  • php-pecl-imagick-devel-3.7.0-1.amzn2.noarch.rpm

您可以使用 PEAR 和 PECL 程序包来安装常用扩展。有关 PEAR 的更多信息,请参阅 PEAR PHP Extension and Application Repository 网站。有关 PECL 的更多信息,请参阅 PECL 扩展网站。

以下示例命令将安装 Memcached 扩展。

$pecl install memcache

或者您也可以使用以下方法:

$pear install pecl/memcache

以下示例命令将安装 Redis 扩展。

$pecl install redis

或者您也可以使用以下方法:

$pear install pecl/redis

配置 PHP 环境

您可以使用 Elastic Beanstalk 控制台启用到 Amazon S3 的日志轮换,配置应用程序可以从环境中读取的变量以及更改 PHP 设置。

在 Elastic Beanstalk 控制台中配置 PHP 环境
  1. 打开 Elastic Beanstalk 控制台,然后在 “区域” 列表中,选择您的。 Amazon Web Services 区域

  2. 在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。

  3. 在导航窗格中,选择 Configuration(配置)。

  4. Updates, monitoring, and logging(更新、监控和日志记录)配置类别中,选择 Edit(编辑)。

PHP 设置

  • Proxy server(代理服务器)– 要在环境实例上使用的代理服务器。默认情况下,使用 nginx。

  • Document root(文档根目录)– 包含您站点的默认页面的文件夹。如果您的欢迎页面不位于源包的根目录,请指定包含该页面且与根路径相关的文件夹。例如,如果欢迎页面位于名为 /public 的文件夹中,则为 public

  • Memory limit(内存限制)– 允许脚本分配的最大内存量。例如 512M

  • Zlib output compression(Zlib 输出压缩)– 设置为 On 可压缩响应。

  • Allow URL fopen(允许 URL fopen)– 设置为 Off 可防止脚本从远程位置下载文件。

  • Display errors(显示错误)– 设置为 On 可显示要调试的内部错误消息。

  • Max execution time(最长执行时间)– 脚本在被环境终止前允许运行的最长时间,单位为秒。

日志选项

“日志选项”部分有两个设置:

  • Instance profile(实例配置文件)– 指定有权访问与应用程序关联的 Amazon S3 存储桶的实例配置文件。

  • 启用向 Amazon S3 的日志文件轮换-指定是否将应用程序的 Amazon EC2 实例的日志文件复制到与您的应用程序关联的 Amazon S3 存储桶中。

静态文件

为了提高性能,您可以使用 Static files(静态文件)部分配置代理服务器,以便从 Web 应用程序内的一组目录提供静态文件(例如 HTML 或图像)。对于每个目录,您都将虚拟路径设置为目录映射。当代理服务器收到对指定路径下的某个文件的请求时,它将直接提供此文件,而不是将请求路由至您的应用程序。

有关使用配置文件或 Elastic Beanstalk 控制台配置静态文件的详细信息,请参阅 提供静态文件

环境属性

环境属性部分允许您在运行您的应用程序的 Amazon EC2 实例上指定环境配置设置。这些设置会以密钥值对的方式传递到应用程序。

您的应用程序代码可使用 $_SERVERget_cfg_var 函数来访问环境属性。

$endpoint = $_SERVER['API_ENDPOINT'];

请参阅环境变量和其他软件设置了解更多信息。

配置的命名空间

您可以使用配置文件设置配置选项并在部署期间执行其他实例配置。配置选项可以特定于平台,也可以应用于整个 Elastic Beanstalk 服务中的所有平台。配置选项被组织到命名空间中。

以下命名空间配置您的代理服务和 PHP 特定选项:

以下示例配置文件指定一个静态文件选项,该选项将名为 staticimages 的目录映射到路径 /images,并显示 aws:elasticbeanstalk:container:php:phpini 命名空间中提供的每个选项的设置:

例 .ebextensions/php-settings.config
option_settings: aws:elasticbeanstalk:environment:proxy: ProxyServer: apache aws:elasticbeanstalk:environment:proxy:staticfiles: /images: staticimages aws:elasticbeanstalk:container:php:phpini: document_root: /public memory_limit: 128M zlib.output_compression: "Off" allow_url_fopen: "On" display_errors: "Off" max_execution_time: 60 composer_options: vendor/package
注意

aws:elasticbeanstalk:environment:proxy:staticfiles 命名空间未在 Amazon Linux AMI PHP 平台分支(在 Amazon Linux 2 之前)上定义。

Elastic Beanstalk 提供了许多用于自定义环境的配置选项。除了配置文件之外,您还可使用控制台、保存的配置、EB CLI 或 Amazon CLI来配置选项。请参阅配置选项了解更多信息。

安装 Elastic Beanstalk PHP 应用程序的依赖项

本主题介绍如何配置您的应用程序以安装其所需的其他 PHP 包。您的应用程序可能具有对其他 PHP 包的依赖项。您可以将应用程序配置为在环境的亚马逊弹性计算云 (Amazon EC2) 实例上安装这些依赖项。或者,您也可以将应用程序的依赖项包含在源包中并将它们与应用程序一起部署。以下部分讨论这两种方法。

使用 Composer 文件在实例上安装依赖项

使用项目源根目录中的composer.json文件使用 composer 在环境的 Amazon EC2 实例上安装应用程序所需的软件包。

例 composer.json
{ "require": { "monolog/monolog": "1.0.*" } }

如果 composer.json 文件存在,Elastic Beanstalk 将运行 composer.phar install 以安装依赖项。您可以通过在 aws:elasticbeanstalk:container:php:phpini 命名空间中设置 composer_options 选项来添加要追加到命令的选项。

使依赖项包含在源包中

如果您的应用程序具有大量依赖项,则安装它们可能需要很长时间。这可能会增加部署和扩展操作,因为需要在每个新实例上安装依赖项。

要避免对部署时间带来负面影响,请在您的开发环境中使用 Composer 解析依赖项并将其安装到 vendor 文件夹中。

使依赖项包含在您的应用程序源包中
  1. 运行以下命令:

    % composer install
  2. 使生成的 vendor 文件夹包含在您的应用程序源包的根目录中。

当 Elastic Beanstalk 在实例上找到 vendor 文件夹时,它会忽略 composer.json 文件(如果存在)。然后,您的应用程序将使用 vendor 文件夹中的依赖项。

在 Elastic Beanstalk 上更新 Composer

本主题介绍如何配置 Elastic Beanstalk 以使 Composer 保持最新状态。如果您在尝试安装带有 Composer 文件的程序包时看到错误,或者无法使用最新的平台版本,则可能必须更新 Composer。在平台更新之间,您可以通过使用 .ebextensions 文件夹中的配置文件来更新环境实例中的 Composer。

您可以使用以下配置自行更新 Composer。

commands: 01updateComposer: command: /usr/bin/composer.phar self-update 2.7.0

以下选项设置设置 COMPOSER_HOME 环境变量,其配置 Composer 缓存的位置。

option_settings: - namespace: aws:elasticbeanstalk:application:environment option_name: COMPOSER_HOME value: /home/webapp/composer-home

您可以将这两者合并到 .ebextensions 文件夹中的同一个配置文件中。

例 .ebextensions/composer.config
commands: 01updateComposer: command: /usr/bin/composer.phar self-update 2.7.0 option_settings: - namespace: aws:elasticbeanstalk:application:environment option_name: COMPOSER_HOME value: /home/webapp/composer-home
注意

由于 2024 年 2 月 22 日的 AL2 023 平台版本和 2024 年 2 月 28 日的平台版本中对 Composer 安装进行了更新,因此, AL2 如果COMPOSER_HOME在执行自更新时设置,Composer 自我更新可能会失败。

以下组合命令将无法执行:export COMPOSER_HOME=/home/webapp/composer-home && /usr/bin/composer.phar self-update 2.7.0

但是,前面的示例仍然有效。在前面的示例中,COMPOSER_HOME 的选项设置不会传递给 01updateComposer 执行,也不会在执行自行更新命令时进行设置。

重要

如果您在 composer.phar self-update 命令中省略了版本号,则在您每次部署到源代码时,以及 Auto Scaling 预配置新实例时,Composer 将更新到可用的最新版本。如果发行了与您应用程序不兼容的 Composer 版本,这可能导致扩展操作和部署失败。

有关 Elastic Beanstalk PHP 平台,包括 Composer 的版本的更多信息,请参阅文档 Amazon Elastic Beanstalk 平台中的 PHP 平台版本

在 Elastic Beanstalk 配置中扩展 php.ini

使用带有 files 块的配置文件可将 .ini 文件添加到您的环境中的实例上的 /etc/php.d/ 中。主配置文件 php.ini 按字母顺序从此文件夹中的文件拉入设置。默认情况下,此文件夹中的文件将启用大量扩展。

例 .ebextensions/mongo.config
files: "/etc/php.d/99mongo.ini": mode: "000755" owner: root group: root content: | extension=mongo.so