

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

# 使用 Elastic Beanstalk 部署 PHP 应用程序
部署 PHP

您可以使用 Elastic Beanstalk 命令行界面（EB CLI）或 Elastic Beanstalk 控制台在几分钟内部署 PHP 应用程序。要了解如何操作，请从 QuickStart 教程开始，然后查看高级示例。

用于将 PHP 应用程序部署到 Elastic Beanstalk 的资源
+ [QuickStart 对于 PHP](php-quickstart.md)— 使用 EB CLI 部署 H *ello World* PHP 应用程序的 Step-by-step说明。
+ [使用 Elastic Beanstalk PHP 平台](create_deploy_PHP.container.md)：如何使用专门用于 PHP 的平台功能。
+ [高级 示例](php-samples.md)：常见 PHP 框架和应用程序的教程，以及如何将 Amazon RDS 数据库添加到环境中。

有关在中使用 PHP 进行开发的更多信息 AWS，请参阅以下资源：
+ [GitHub](https://github.com/aws/aws-sdk-php/)— 使用安装适用于 PHP 的 AWS SDK GitHub。
+ [PHP 开发人员中心](https://aws.amazon.com/php/) — 用于开发 PHP 应用程序的工具、文档和示例代码 AWS。
+ [AWS 适用于 PHP 的 SDK FAQs](https://docs.aws.amazon.com/aws-sdk-php/guide/latest/faq.html) — 获取常见问题的答案。

# QuickStart: 将 PHP 应用程序部署到 Elastic Beanstalk
QuickStart 对于 PHP

在以下教程中，您将学习如何使用 EB CLI 创建示例 PHP 应用程序并将其部署到 AWS Elastic Beanstalk 环境中。

**不用于生产用途**  
示例仅用于演示。请勿在生产环境中使用示例应用程序。

**Topics**
+ [

## 你的 AWS 账户
](#php-quickstart-aws-account)
+ [

## 先决条件
](#php-quickstart-prereq)
+ [

## 步骤 1：创建 PHP 应用程序
](#php-quickstart-create-app)
+ [

## 步骤 2：在本地运行应用程序
](#php-quickstart-run-local)
+ [

## 步骤 3：初始化并部署 PHP 应用程序
](#php-quickstart-deploy)
+ [

## 步骤 4：浏览您的云应用程序
](#php-quickstart-run-eb-ap)
+ [

## 步骤 5：更新和重新部署您的应用程序
](#php-quickstart-run-eb-ap)
+ [

## 清理
](#php-quickstart-cleanup)
+ [

## 后续步骤
](#php-quickstart-next-steps)

## 你的 AWS 账户


如果你还不是 AWS 客户，则需要创建一个 AWS 账户才能使用 Elastic Beanstalk。

### 创建一个 AWS 账户


#### 注册获取 AWS 账户


如果您没有 AWS 账户，请完成以下步骤来创建一个。

**报名参加 AWS 账户**

1. 打开[https://portal.aws.amazon.com/billing/注册。](https://portal.aws.amazon.com/billing/signup)

1. 按照屏幕上的说明操作。

   在注册时，将接到电话或收到短信，要求使用电话键盘输入一个验证码。

   当您注册时 AWS 账户，就会创建*AWS 账户根用户*一个。根用户有权访问该账户中的所有 AWS 服务 和资源。作为最佳安全实践，请为用户分配管理访问权限，并且只使用根用户来执行[需要根用户访问权限的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

AWS 注册过程完成后会向您发送一封确认电子邮件。您可以随时前往 [https://aws.amazon.com/](https://aws.amazon.com/)并选择 “**我的账户”，查看您当前的账户活动并管理您的账户**。

#### 创建具有管理访问权限的用户


注册后，请保护您的安全 AWS 账户 AWS 账户根用户 AWS IAM Identity Center，启用并创建管理用户，这样您就不会使用 root 用户执行日常任务。

**保护你的 AWS 账户根用户**

1.  选择 **Root 用户**并输入您的 AWS 账户 电子邮件地址，以账户所有者的身份登录。[AWS 管理控制台](https://console.aws.amazon.com/)在下一页上，输入您的密码。

   要获取使用根用户登录方面的帮助，请参阅《AWS 登录 用户指南》**中的 [Signing in as the root user](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 为您的根用户启用多重身份验证（MFA）。

   有关说明，请参阅 I [A *M* 用户指南中的为 AWS 账户 根用户启用虚拟 MFA 设备（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**创建具有管理访问权限的用户**

1. 启用 IAM Identity Center。

   有关说明，请参阅**《AWS IAM Identity Center 用户指南》中的[启用 AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)。

1. 在 IAM Identity Center 中，为用户授予管理访问权限。

   有关使用 IAM Identity Center 目录 作为身份源的教程，请参阅《[用户*指南》 IAM Identity Center 目录中的使用默认设置配置AWS IAM Identity Center 用户*访问权限](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)。

**以具有管理访问权限的用户身份登录**
+ 要使用您的 IAM Identity Center 用户身份登录，请使用您在创建 IAM Identity Center 用户时发送到您的电子邮件地址的登录 URL。

  有关使用 IAM Identity Center 用户[登录的帮助，请参阅*AWS 登录 用户指南*中的登录 AWS 访问门户](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)。

**将访问权限分配给其他用户**

1. 在 IAM Identity Center 中，创建一个权限集，该权限集遵循应用最低权限的最佳做法。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 将用户分配到一个组，然后为该组分配单点登录访问权限。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Add groups](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)。

## 先决条件

+ Elastic Beanstalk 命令行界面：如需安装说明，请参阅[使用设置脚本安装 EB CLI（推荐）](eb-cli3.md#eb-cli3-install)。
+ PHP：按照 PHP 网站上的[安装与配置](https://www.php.net/manual/en/install.php)说明在本地计算机上安装 PHP。

## 步骤 1：创建 PHP 应用程序


在此快速入门教程中，您将创建一个 *Hello World* PHP 应用程序。

创建项目目录。

```
~$ mkdir eb-php
~$ cd eb-php
```

接下来，在项目目录中创建一个 `index.php` 文件并添加以下代码。

**Example `index.php`**  

```
<?php
  echo "Hello from a PHP application running in Elastic Beanstalk!";
?>
```

## 步骤 2：在本地运行应用程序


使用以下命令以在本地运行您的应用程序。

```
~$ php -S localhost:5000
```

打开浏览器并访问 [http://localhost:5000](http://localhost:5000)。

您应该能在浏览器中看到问候消息，并在终端中看到日志消息。

输入 `Control+c` 来停止本地服务器，这样您就可以部署 Elastic Beanstalk 了。

## 步骤 3：初始化并部署 PHP 应用程序


接下来，您将使用 Elastic Beanstalk 控制台或 EB CLI 将您的应用程序部署到*环境*。在本教程中，您将使用带有交互式选项的 EB CLI 来初始化环境。

**初始化您的环境并创建环境**

1. 运行以下 **init** 命令：

   ```
   ~$ eb init -i
   ```

   init 命令会以交互方式创建应用程序。应用程序名称将默认为本地文件夹，即 `eb-php`。

   对于除了 SSH 访问以外的所有提示，请接受默认设置以使用最新的 PHP 平台版本来创建环境。若要对实例进行故障排除，您可以稍后重新运行 `eb init -i` 命令来设置 SSH 访问权限，也可以使用 Amazon EC2 Instance Connect 或会话管理器进行连接。

1. 创建环境并部署应用程序

   运行以下命令创建名为 `blue-env` 的环境。

   ```
   ~$ eb create blue-env
   ```

   当您首次运行 **eb create** 命令时，Elastic Beanstalk 会自动为您的应用程序生成一个 zip 文件，称为*源捆绑包。*接下来，Elastic Beanstalk 会创建一个包含一个或多个 Amazon EC2 实例的环境，然后将该应用程序部署到该环境中。

   将您的应用程序部署到 Elastic Beanstalk 可能需要五分钟的时间。

## 步骤 4：浏览您的云应用程序


环境创建过程完成后，应用程序应在运行并侦听端口 5000 上的请求。使用以下命令连接您的应用程序：

```
~$ eb open
```

`eb open` 命令会打开一个浏览器标签页，指向为应用程序创建的自定义子域。

## 步骤 5：更新和重新部署您的应用程序


创建应用程序并将其部署到环境中后，您可以随时部署新的应用程序版本或不同的应用程序。部署新的应用程序版本速度会更快，因为不需要预置或重新启动 Amazon EC2 实例。

更新您的 PHP 代码，使其包含来自服务器环境的 REQUEST\$1TIME 值：

```
<?php
  echo "Hello from a PHP application running in Elastic Beanstalk!";
  
  $timestamp = $_SERVER['REQUEST_TIME'];
  echo '<br/>Request time: ' . date('Y/m/d H:i:s', $timestamp);
?>
```

使用以下命令将 PHP 代码重新部署到 Elastic Beanstalk：

```
~$ eb deploy
```

运行 **eb deploy** 时，EB CLI 会捆绑项目目录中的内容并将其部署到环境中。

部署完成后，刷新页面或使用 `eb open` 重新连接到您的应用程序。您应看到更新的内容。如果看不到更新的内容，请再次运行本地服务器来验证所做的更改，从而进行故障排除。

****恭喜您！****  
您已使用 Elastic Beanstalk 创建、部署并更新了 PHP 应用程序！

## 清理


演示代码使用完毕后，您可以终止环境。[Elastic Beanstalk 会删除 AWS 所有相关资源，例如 [Amazon EC2](using-features.managing.ec2.md)[实例、数据库实例、](using-features.managing.db.md)负载均衡器[、安全组](using-features.managing.elb.md)和警报。](using-features.alarms.md#using-features.alarms.title)

移除资源不会删除 Elastic Beanstalk 应用程序，因此您可以随时为您的应用程序创建新环境。

**从控制台终止 Elastic Beanstalk 环境**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 选择 **Actions**（操作），然后选择 **Terminate environment**（终止环境）。

1. 使用屏幕上的对话框确认环境终止。

您也可以使用 EB CLI 通过下列命令来终止环境：

```
~$ eb terminate
```

## 后续步骤


您可以使用 Elastic Beanstalk 控制台探索应用程序环境。有关更多信息，请参阅[探索您的环境](GettingStarted.md#GettingStarted.Explore)。

有关使用 PHP 的高级示例，请参阅 [Elastic Beanstalk 中的 PHP 高级示例](php-samples.md)。

# 使用 Elastic Beanstalk PHP 平台
PHP 平台

AWS Elastic Beanstalk 为不同版本的 PHP 提供并支持各种**平台分支**。这些平台支持可以单独运行或在 Composer 下运行的 PHP Web 应用程序。有关支持的平台分支的完整列表，请参阅 *AWS Elastic Beanstalk 平台*文档中的 [PHP](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.PHP)。

Elastic Beanstalk 提供了[配置选项](command-options.md)，可供您用于自定义在 Elastic Beanstalk 环境中的 Amazon EC2 实例上运行的软件。您可[配置应用程序所需的环境变量](environments-cfg-softwaresettings.md#environments-cfg-softwaresettings-console)，启用到 Amazon S3 的日志轮换，将应用程序源中包含静态文件的文件夹映射至代理服务器所提供的路径，并设置常见 PHP 初始化设置。

Elastic Beanstalk 控制台中提供了配置选项，可用于[修改运行环境的配置](environment-configuration-methods-after.md)。要避免在终止环境时丢失环境配置，可以使用[保存的配置](environment-configuration-savedconfig.md)来保存您的设置，并在以后将这些设置应用到其他环境。

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

如果使用了 Composer，您可以将 [`composer.json` 文件包含](#php-configuration-composer)在源包中以在部署期间安装程序包。

对于未提供为配置选项的高级 PHP 配置和 PHP 设置，您可以[使用配置文件来提供 `INI` 文件](#php-configuration-phpini)，该文件可扩展并覆盖由 Elastic Beanstalk 应用的默认设置或者安装其他扩展。

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

有关扩展 Elastic Beanstalk 基于 Linux 的平台的各种方法的详细信息，请参阅 [扩展 Elastic Beanstalk Linux 平台](platforms-linux-extend.md)。

**Topics**
+ [

## 安装适用于 PHP 的 S AWS DK
](#php-development-environment-sdk)
+ [

## Amazon Linux 2 上的 PHP 8.1 注意事项
](#php-8-1-considerations)
+ [

## 配置 PHP 环境
](#php-console)
+ [

## 配置的命名空间
](#php-namespaces)
+ [安装依赖项](#php-configuration-composer)
+ [更新 Composer](#php-configuration-composerupdate)
+ [扩展 php.ini](#php-configuration-phpini)

## 安装适用于 PHP 的 S AWS DK


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

使用 Composer 安装适用于 PHP 的 SDK

```
$ composer require aws/aws-sdk-php
```

有关更多信息，请参阅 [AWS SDK for PHP](https://aws.amazon.com/sdk-for-php/) 主页。有关说明，请参阅 [Install the AWS SDK for PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/getting-started_installation.html)。

## Amazon Linux 2 上的 PHP 8.1 注意事项


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

### Amazon Linux 2 上的 PHP 8.1 注意事项


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

Elastic Beanstalk 将 EC2 实例上与 *Amazon Linux 2 上的 PHP 8.1* 平台分支相关的 RPM 程序包存储在本地目录中，而不是在 Amazon Linux 存储库中。您可以使用 **rpm -i ** 来安装程序包。从 [PHP 8.1 平台版本 3.5.0](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-10-03-linux.html) 开始，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 程序包列表。

#### 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](https://pear.php.net) 网站。有关 PECL 的更多信息，请参阅 [PECL 扩展](https://pecl.php.net)网站。

以下示例命令将安装 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](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration**（配置）。

1. 在 **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 存储桶的实例配置文件。
+ **Enable log file rotation to Amazon S3**（启用到 Amazon S3 的日志轮换）– 指定是否将应用程序的 Amazon EC2 实例的日志文件复制到与应用程序关联的 Amazon S3 存储桶。

### 静态文件


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

有关使用配置文件或 Elastic Beanstalk 控制台配置静态文件的详细信息，请参阅 [提供静态文件](environment-cfg-staticfiles.md)。

### 环境属性


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

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

```
$endpoint = $_SERVER['API_ENDPOINT'];
```

请参阅[环境变量和其他软件设置](environments-cfg-softwaresettings.md)了解更多信息。

## 配置的命名空间


您可以使用[配置文件](ebextensions.md)设置配置选项并在部署期间执行其他实例配置。配置选项可以[特定于平台](command-options-specific.md)，也可以应用于整个 Elastic Beanstalk 服务中的[所有平台](command-options-general.md)。配置选项被组织到*命名空间*中。

以下命名空间配置您的代理服务和 PHP 特定选项：
+ [`aws:elasticbeanstalk:environment:proxy:staticfiles`](command-options-general.md#command-options-general-environmentproxystaticfiles) – 配置环境代理以提供静态文件。您可以定义虚拟路径到应用程序目录的映射。
+ [`aws:elasticbeanstalk:environment:proxy`](command-options-specific.md#command-options-php) – 指定环境的代理服务器。
+ [`aws:elasticbeanstalk:container:php:phpini`](command-options-specific.md#command-options-php) – 配置 PHP 特定选项。此命名空间包括 `composer_options`，它在 Elastic Beanstalk 控制台上不可用。此选项设置通过 `composer.phar install` 命令使用 Composer 安装依赖项时要使用的自定义选项。有关此命令的更多信息（包括可用选项），请参阅 *getcomposer.org* 网站上的 [install](https://getcomposer.org/doc/03-cli.md#install-i)。

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

**Example .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 或 AWS CLI来配置选项。请参阅[配置选项](command-options.md)了解更多信息。

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

本主题介绍如何配置您的应用程序以安装其所需的其他 PHP 包。您的应用程序可能具有对其他 PHP 包的依赖项。您可以配置应用程序以在环境的 Amazon Elastic Compute Cloud（Amazon EC2）实例上安装这些依赖项。或者，您也可以将应用程序的依赖项包含在源包中并将它们与应用程序一起部署。以下部分讨论这两种方法。

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


借助位于项目源的根目录中的 `composer.json` 文件，可以使用 Composer 在环境的 Amazon EC2 实例上安装应用程序所需的包。

**Example composer.json**  

```
{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}
```

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

### 使依赖项包含在源包中


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

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

**使依赖项包含在您的应用程序源包中**

1. 运行如下命令：

   ```
   % composer install
   ```

1. 使生成的 `vendor` 文件夹包含在您的应用程序源包的根目录中。

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

## 在 Elastic Beanstalk 上更新 Composer
更新 Composer

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

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

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

以下[选项设置](command-options-general.md#command-options-general-elasticbeanstalkapplicationenvironment)设置 `COMPOSER_HOME` 环境变量，其配置 Composer 缓存的位置。

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

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

**Example .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 日 AL2023 平台版本和 2024 年 2 月](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2024-02-22-al2023.html) [28 日平台版本对 Composer 安装进行了更新，](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2024-02-28-al2.html)因此， 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 的版本的更多信息，请参阅文档 *AWS Elastic Beanstalk 平台*中的 [PHP 平台版本](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.PHP)。

## 在 Elastic Beanstalk 配置中扩展 php.ini
扩展 php.ini

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

**Example .ebextensions/mongo.config**  

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

# Elastic Beanstalk 中的 PHP 高级示例
高级 示例

要开始使用 PHP 应用程序 AWS Elastic Beanstalk，您需要上传一个应用程序[源包](applications-sourcebundle.md)，作为要部署到环境中的第一个应用程序版本。

建议您使用[QuickStart 对于 PHP](php-quickstart.md) 来快速上手使用 EB CLI 部署的简单 PHP 应用程序。

**Topics**
+ [添加数据库](create_deploy_PHP.rds.md)
+ [教程 - Laravel](php-laravel-tutorial.md)
+ [教程 - CakePHP](php-cakephp-tutorial.md)
+ [教程 - Symfony](php-symfony-tutorial.md)
+ [教程 - HA 生产](php-ha-tutorial.md)
+ [教程-HA WordPress](php-hawordpress-tutorial.md)
+ [教程 – 高可用性 Drupal](php-hadrupal-tutorial.md)

# 将 Amazon RDS DB 实例添加到 PHP Elastic Beanstalk 环境
添加数据库

本主题提供使用 Elastic Beanstalk 控制台创建 Amazon RDS 的说明。您可以使用 Amazon Relational Database Service（Amazon RDS）数据库实例来存储由应用程序收集和修改的数据。数据库可以耦合到您的环境并由 Elastic Beanstalk 进行管理，也可以被创建为解耦数据库并由另一项服务进行外部管理。在这些说明中，数据库与您的环境耦合并由 Elastic Beanstalk 管理。有关将 Amazon RDS 与 Elastic Beanstalk 集成的更多信息，请参阅 [将数据库添加到 Elastic Beanstalk 环境](using-features.managing.db.md)。

**Topics**
+ [

## 向环境中添加数据库实例
](#php-rds-create)
+ [

## 下载驱动程序
](#php-rds-drivers)
+ [

## 使用 PDO 或 “我的” 连接到数据库 SQLi
](#php-rds-connect)
+ [

## 使用 Symfony 连接到数据库
](#php-rds-symfony)

## 向环境中添加数据库实例


**向环境添加数据库实例**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration (配置)**。

1. 在 **Database**（数据库）配置类别中，选择 **Edit**（编辑）。

1. 选择数据库引擎，然后输入用户名和密码。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

添加一个数据库实例大约需要 10 分钟。环境更新完成后，您的应用程序就可以通过以下环境属性访问数据库实例的主机名和其他连接信息：


| 属性名称 | 描述 | 属性值 | 
| --- | --- | --- | 
|  `RDS_HOSTNAME`  |  数据库实例的主机名。  |  在 Amazon RDS 控制台的 **Connectivity & security**（连接和安全）选项卡上：**Endpoint**（端点）。  | 
|  `RDS_PORT`  |  数据库实例接受连接的端口。默认值因数据库引擎而异。  |  在 Amazon RDS 控制台的 **Connectivity & security**（连接和安全）选项卡上：**Port**（端口）。  | 
|  `RDS_DB_NAME`  |  数据库名称 **ebdb**。  |  在 Amazon RDS 控制台的 **Configuration**（配置）选项卡上：**DB Name**（数据库名称）。  | 
|  `RDS_USERNAME`  |  您为数据库配置的用户名。  |  在 Amazon RDS 控制台的 **Configuration**（配置）选项卡上：**Master username**（主用户名）。  | 
|  `RDS_PASSWORD`  |  您为数据库配置的密码。  |  在 Amazon RDS 控制台中不可供参考。  | 

有关与 Elastic Beanstalk 环境耦合的数据库实例配置的更多信息，请参阅 [将数据库添加到 Elastic Beanstalk 环境](using-features.managing.db.md)。

## 下载驱动程序


要使用 PHP 数据对象 (PDO) 连接到数据库，请安装与您所选数据库引擎匹配的驱动程序。
+ **MySQL** – [http://php.net/manual/en/ref.pdo-mysql.php](http://php.net/manual/en/ref.pdo-mysql.php)
+ **PostgreSQL** – [http://php.net/manual/en/ref.pdo-pgsql.php](http://php.net/manual/en/ref.pdo-pgsql.php)
+ **Oracle** – [http://php.net/manual/en/ref.pdo-oci.php](http://php.net/manual/en/ref.pdo-oci.php)
+ **SQL Server** – [http://php.net/manual/en/ref.pdo-sqlsrv.php](http://php.net/manual/en/ref.pdo-sqlsrv.php)

有关更多信息，请参阅 [http://php.net/manual/en/pdo.installation.php](http://php.net/manual/en/pdo.installation.php)。

## 使用 PDO 或 “我的” 连接到数据库 SQLi


您可以使用 `$_SERVER[`VARIABLE`]` 从环境中读取连接信息。

对于 PDO，请根据主机、端口和名称创建一个数据源名称 (DSN)。使用数据库用户名和密码将 DSN 传递到 [PDO 的构造函数](https://php.net/manual/en/pdo.construct.php)。

**Example 使用 PDO 连接到 RDS 数据库 - MySQL**  

```
<?php
$dbhost = $_SERVER['RDS_HOSTNAME'];
$dbport = $_SERVER['RDS_PORT'];
$dbname = $_SERVER['RDS_DB_NAME'];
$charset = 'utf8' ;

$dsn = "mysql:host={$dbhost};port={$dbport};dbname={$dbname};charset={$charset}";
$username = $_SERVER['RDS_USERNAME'];
$password = $_SERVER['RDS_PASSWORD'];

$pdo = new PDO($dsn, $username, $password);
?>
```

对于其他驱动程序，请将 `mysql` 替换为您的驱动程序的名称 - `pgsql` `oci` 或 `sqlsrv`。

对于 MySQLi，将主机名、用户名、密码、数据库名称和端口传递给`mysqli`构造函数。

**Example 使用 mysqli\$1connect() 连接到 RDS 数据库**  

```
$link = new mysqli($_SERVER['RDS_HOSTNAME'], $_SERVER['RDS_USERNAME'], $_SERVER['RDS_PASSWORD'], $_SERVER['RDS_DB_NAME'], $_SERVER['RDS_PORT']);
```

## 使用 Symfony 连接到数据库


对于 Symfony 版本 3.2 和更高版本，您可以使用 `%env(PROPERTY_NAME)%`，基于由 Elastic Beanstalk 设置的环境属性在配置文件中设置数据库参数。

**Example app/config/parameters.yml**  

```
parameters:
    database_driver:   pdo_mysql
    database_host:     '%env(RDS_HOSTNAME)%'
    database_port:     '%env(RDS_PORT)%'
    database_name:     '%env(RDS_DB_NAME)%'
    database_user:     '%env(RDS_USERNAME)%'
    database_password: '%env(RDS_PASSWORD)%'
```

有关更多信息，请参阅[外部参数 (Symfony 3.4)](http://symfony.com/doc/3.4/configuration/external_parameters.html)。

对于较早版本的 Symfony，环境变量仅在以 `SYMFONY__` 开头时可供访问。这意味着 Elastic Beanstalk 定义的环境属性无法访问，并且您必须定义自己的环境属性以将连接信息传递给 Symfony。

要使用 Symfony 2 连接到数据库，请为每个参数[创建一个环境属性](create_deploy_PHP.container.md#php-console-properties)。然后，使用 `%property.name%` 来访问配置文件中由 Symfony 转换的变量。例如，名为 `SYMFONY__DATABASE__USER` 的环境属性可作为 `database.user` 访问。

```
    database_user:     "%database.user%"
```

有关更多信息，请参阅[外部参数 (Symfony 2.8)](http://symfony.com/doc/2.8/configuration/external_parameters.html)。

# 将 Laravel 应用程序部署到 Elastic Beanstalk
教程 - Laravel

Laravel 是一个适用于 PHP 的开源 model-view-controller（MVC）框架。本教程将引导您完成生成 Laravel 应用程序、将其部署到 AWS Elastic Beanstalk 环境以及将其配置为连接到亚马逊关系数据库服务 (Amazon RDS) 数据库实例的过程。

**Topics**
+ [

## 先决条件
](#php-laravel-tutorial-prereqs)
+ [

## 启动 Elastic Beanstalk 环境
](#php-laravel-tutorial-launch)
+ [

## 安装 Laravel 并生成网站
](#php-laravel-tutorial-generate)
+ [

## 部署您的应用程序
](#php-laravel-tutorial-deploy)
+ [

## 配置 Composer 设置
](#php-laravel-tutorial-configure)
+ [

## 将数据库添加到环境
](#php-laravel-tutorial-database)
+ [

## 清理
](#php-laravel-tutorial-cleanup)
+ [

## 后续步骤
](#php-laravel-tutorial-nextsteps)

## 先决条件


本教程假设您对基本 Elastic Beanstalk 操作和 Elastic Beanstalk 控制台有一定了解。如果尚不了解，请按照[了解如何开始使用 Elastic Beanstalk](GettingStarted.md)中的说明操作以启动您的第一个 Elastic Beanstalk 环境。

为了遵循本指南中的步骤，您需要命令行终端或 Shell，以便运行命令。命令显示在列表中，以提示符（\$1）和当前目录名称（如果有）开头。

```
~/eb-project$ this is a command
this is output
```

在 Linux 和 macOS 中，您可使用您首选的 Shell 和程序包管理器。在 Windows 上，您可以[安装适用于 Linux 的 Windows 子系统](https://docs.microsoft.com/en-us/windows/wsl/install-win10)，以获取与 Windows 集成的 Ubuntu 和 Bash 版本。

Laravel 6 需要 PHP 7.2 或更高版本。它还需要 Laravel 官方文档中的[服务器要求](https://laravel.com/docs/6.x/installation#server-requirements)主题中列出的 PHP 扩展。按照说明安装 PHP 和 Composer。

如需 Laravel 支持和维护信息，请参阅 Laravel 官方文档中的[支持策略](https://laravel.com/docs/master/releases#support-policy)主题。

## 启动 Elastic Beanstalk 环境


使用 Elastic Beanstalk 控制台创建 Elastic Beanstalk 环境。选择 **PHP** 平台并接受默认设置和示例代码。

**启动环境（控制台）**

1. [使用以下预配置链接打开 Elastic Beanstalk 控制台：console.aws.amazon。 com/elasticbeanstalk/home\$1/newApplication？ 应用程序名称=教程&环境类型= LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced)

1. 对于 **Platform**（平台），选择与应用程序使用的语言匹配的平台和平台分支。

1. 对于**应用程序代码**，选择**示例应用程序**。

1. 选择**复查并启动**。

1. 检查可用选项。选择要使用的可用选项，然后在准备就绪后选择**创建应用程序**。

环境创建大约需要 5 分钟，将创建以下资源：
+ **EC2 实例** — 配置为在您选择的平台上运行 Web 应用程序的亚马逊弹性计算云 (Amazon EC2) 虚拟机。

  各平台运行一组特定软件、配置文件和脚本以支持特定的语言版本、框架、Web 容器或其组合。大多数平台使用 Apache 或 NGINX 作为 Web 应用程序前的反向代理，向其转发请求、提供静态资产以及生成访问和错误日志。
+ **实例安全组** — 配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。此资源允许来自负载均衡器的 HTTP 流量到达运行您的 Web 应用程序的 EC2 实例。默认情况下，其他端口不允许流量进入。
+ **负载均衡器** – 配置为向运行您的应用程序的实例分配请求的 Elastic Load Balancing 负载均衡器。负载均衡器还使您无需将实例直接公开在 Internet 上。
+ **负载均衡器安全组**-配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。利用此资源，HTTP 流量可从 Internet 到达负载均衡器。默认情况下，其他端口不允许流量进入。
+ **Auto Scaling 组** – 配置为在实例终止或不可用时替换实例的 Auto Scaling 组。
+ **Amazon S3 存储桶** – 使用 Elastic Beanstalk 时创建的源代码、日志和其他构件的存储位置。
+ **Amazon CloudWatch CloudWatch 警**报 — 两个警报，用于监控您环境中实例的负载，并在负载过高或过低时触发。警报触发后，您的 Auto Scaling 组会扩展或收缩以进行响应。
+ **CloudFormation 堆栈** — Elastic CloudFormation Beanstalk 用于在您的环境中启动资源并传播配置更改。这些资源在您可通过 [CloudFormation 控制台](https://console.aws.amazon.com/cloudformation)查看的模板中定义。
+ **域名**-以表单形式路由到您的 Web 应用程序的域名**subdomain*。 *region*.elasticbeanstalk.com。*
**域安全**  
为增强 Elastic Beanstalk 应用程序的安全性，已将 *elasticbeanstalk.com* 域注册到 [公共后缀列表（PSL）](https://publicsuffix.org/)。  
如果您需要在 Elastic Beanstalk 应用程序的默认域名中设置敏感 Cookie，我们建议您使用带有前缀 `__Host-` 的 Cookie 来提高安全性。这种做法可以保护您的域免遭跨站点请求伪造（CSRF）攻击。要了解更多信息，请参阅 Mozilla 开发者网络中的 [Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) 页面。

所有这些资源都由 Elastic Beanstalk 管理。当您终止环境时，Elastic Beanstalk 会终止其包含的所有资源。

**注意**  
Elastic Beanstalk 创建的 Amazon S3 存储桶将在多个环境之间共享并且在环境终止期间不会被删除。有关更多信息，请参阅 [将 Elastic Beanstalk 和 Amazon S3 结合使用](AWSHowTo.S3.md)。

## 安装 Laravel 并生成网站


Composer 可使用一个命令安装 Laravel 并创建工作项目：

```
~$ composer create-project --prefer-dist laravel/laravel eb-laravel
```

Composer 安装 Laravel 及其依赖项，并生成默认项目。

[如果您在安装 Laravel 时遇到任何问题，请转到官方文档中的安装主题：https://laravel.com/docs/6.x。](https://laravel.com/docs/6.x)

## 部署您的应用程序


创建包含由 Composer 创建的文件的[源包](applications-sourcebundle.md)。以下命令将创建名为 `laravel-default.zip` 的源包。它将排除 `vendor` 文件夹中的文件，因为这些文件会占用大量空间并且对于将您的应用程序部署到 Elastic Beanstalk 不是必需的。

```
~/eb-laravel$ zip ../laravel-default.zip -r * .[^.]* -x "vendor/*"
```

将源包上传到 Elastic Beanstalk 以将 Laravel 部署到您的环境。

**部署源包**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在环境概述页面上，选择 **Upload and deploy**（上传和部署）。

1. 使用屏幕上的对话框上传源包。

1. 选择 **Deploy**（部署）。

1. 部署完成后，选择站点 URL 以在新选项卡中打开您的网站。

**注意**  
为了进一步优化源包，请初始化一个 Git 存储库并使用 [`git archive` 命令](applications-sourcebundle.md#using-features.deployment.source.git)创建源包。默认 Laravel 项目包含一个 `.gitignore` 文件，该文件指示 Git 排除 `vendor` 文件夹以及部署时不需要的其他文件。

## 配置 Composer 设置


部署完成后，单击 URL 以在浏览器中打开 Laravel 应用程序：

![\[Error message indicating no permission to access or on this server.\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/php-laravel-403.png)


这是什么? 默认情况下，Elastic Beanstalk 提供项目在网站根路径下的根目录。但在这种情况下，默认页面 (`index.php`) 位于 `public` 文件夹的下一级。您可通过将 `/public` 添加至 URL 加以验证。例如 `http://laravel.us-east-2.elasticbeanstalk.com/public`。

要在根路径中提供 Laravel 应用程序，请使用 Elastic Beanstalk 控制台为网站配置*文档根目录*。

**配置网站的文档根目录**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration**（配置）。

1. 在 **Updates, monitoring, and logging**（更新、监控和日志记录）配置类别中，选择 **Edit**（编辑）。

1. 对于 **Document root**（文档根目录），输入 **/public**。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

1. 更新完成后，单击 URL 以在浏览器中重新打开站点。

![\[Laravel logo with navigation menu items: Documentation, Laracasts, News, Forge, GitHub.\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/php-laravel-defaultnodb.png)


到目前为止，一切正常。接下来，您将在环境中添加一个数据库，并将 Laravel 配置为连接到该数据库。

## 将数据库添加到环境


在 Elastic Beanstalk 环境中启动 RDS 数据库实例。你可以在 Elastic Beanstalk 上 SQLServer将 MySQL 或 PostgreSQL 数据库与 Laravel 一起使用。在本示例中，我们将使用 MySQL。

**将 RDS 数据库实例添加到 Elastic Beanstalk 环境**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration (配置)**。

1. 在 **Database**（数据库）配置类别中，选择 **Edit**（编辑）。

1. 对于**引擎**，选择 **mysql**。

1. 键入主 **username**（用户名）和 **password**（密码）。Elastic Beanstalk 将使用环境属性为应用程序提供这些值。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

创建数据库实例需要大约 10 分钟。有关数据库与 Elastic Beanstalk 环境耦合的更多信息，请参阅[将数据库添加到 Elastic Beanstalk 环境](using-features.managing.db.md)。

同时，您可更新源代码，以便从环境中读取连接信息。Elastic Beanstalk 使用 `RDS_HOSTNAME` 等环境变量提供连接详细信息，以便您可以从应用程序中访问。

Laravel 的数据库配置存储在项目代码中 `database.php` 文件夹下名为 `config` 的文件内。查找 `mysql` 条目并修改 `host`、`database`、`username` 和 `and password` 变量，以便从 Elastic Beanstalk 中读取对应的值：

**Example \$1/Eb-.php laravel/config/database**  

```
...
    'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
        ],

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('RDS_HOSTNAME', '127.0.0.1'),
            'port' => env('RDS_PORT', '3306'),
            'database' => env('RDS_DB_NAME', 'forge'),
            'username' => env('RDS_USERNAME', 'forge'),
            'password' => env('RDS_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],
...
```

要验证数据库连接是否已正确配置，请向 `index.php` 添加代码以连接到数据库，并向默认响应添加一些代码：

**Example \$1/Eb-.php laravel/public/index**  

```
...
if(DB::connection()->getDatabaseName())
{
   echo "Connected to database ".DB::connection()->getDatabaseName();
}
$response->send();
...
```

在数据库实例完成启动后，将已更新的应用程序打包并将其部署到环境。

**更新 Elastic Beanstalk 环境**

1. 创建源包：

   ```
   ~/eb-laravel$ zip ../laravel-v2-rds.zip -r * .[^.]* -x "vendor/*"
   ```

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 选择 **Upload and Deploy**。

1. 选择 **Browse**（浏览），然后上传 `laravel-v2-rds.zip`。

1. 选择**部署**。

部署应用程序的新版本花费不到 1 分钟的时间。完成部署后，再次刷新网页，以验证数据库连接成功：

![\[Laravel website header with navigation menu items for Documentation, Laracasts, News, Forge, and GitHub.\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/php-laravel-defaultwdb.png)


## 清理


演示代码使用完毕后，您可以终止环境。[Elastic Beanstalk 会删除 AWS 所有相关资源，[例如 EC2 亚马逊](using-features.managing.ec2.md)[实例、数据库实例、](using-features.managing.db.md)负载均衡器[、安全组](using-features.managing.elb.md)和警报。](using-features.alarms.md#using-features.alarms.title)

移除资源不会删除 Elastic Beanstalk 应用程序，因此您可以随时为您的应用程序创建新环境。

**从控制台终止 Elastic Beanstalk 环境**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 选择 **Actions**（操作），然后选择 **Terminate environment**（终止环境）。

1. 使用屏幕上的对话框确认环境终止。

此外，您还可以终止在您的 Elastic Beanstalk 环境外部创建的数据库资源。当您终止 Amazon RDS 数据库实例时，可以拍摄快照并在以后将数据恢复到其他实例。

**终止您的 RDS 数据库实例**

1. 打开 [Amazon RDS 控制台](https://console.aws.amazon.com/rds)。

1. 选择 **Databases**（数据库）。

1. 选择您的数据库实例。

1. 选择**操作**，然后选择**删除**。

1. 选择是否创建快照，然后选择**删除**。

## 后续步骤


有关 Laravel 的更多信息，请访问 Laravel 官方网站 [laravel.com](https://laravel.com/)。

当您继续开发应用程序时，您可能希望通过某种方式来管理环境和部署应用程序，而无需手动创建 .zip 文件并将该文件上传到 Elastic Beanstalk 控制台。[Elastic Beanstalk 命令行](eb-cli3.md)界面 (EB CLI easy-to-use) 提供了从命令行创建、配置应用程序并将其部署到 Elastic Beanstalk 环境的命令。

在本教程中，您使用了 Elastic Beanstalk 控制台来配置 Composer 选项。要使此配置成为应用程序源的一部分，您可以使用类似于下面的配置文件。

**Example .ebextensions/composer.config**  

```
option_settings:
  aws:elasticbeanstalk:container:php:phpini:
    document_root: /public
```

有关更多信息，请参阅 [使用配置文件 (`.ebextensions`) 进行高级环境自定义](ebextensions.md)。

在 Elastic Beanstalk 环境中运行 Amazon RDS 数据库实例不仅适合开发和测试，还将数据库的生命周期与环境相关联。请参阅[将 Amazon RDS DB 实例添加到 PHP Elastic Beanstalk 环境](create_deploy_PHP.rds.md)，浏览有关连接到在环境外运行的数据库的说明。

最后，如果计划在生产环境中使用应用程序，您会希望为环境[配置自定义域名](customdomains.md)，并为安全连接[启用 HTTPS](configuring-https.md)。

# 将 CakePHP 应用程序部署到 Elastic Beanstalk
教程 - CakePHP

CakePHP 是用于 PHP 的开放源 MVC 框架。本教程将指导您完成生成 CakePHP 项目、将该项目部署到 Elastic Beanstalk 环境并配置该项目以连接到 Amazon RDS 数据库实例的过程。

**Topics**
+ [

## 先决条件
](#php-cakephp-tutorial-prereqs)
+ [

## 启动 Elastic Beanstalk 环境
](#php-cakephp-tutorial-launch)
+ [

## 安装 CakePHP 并生成网站
](#php-cakephp-tutorial-generate)
+ [

## 部署您的应用程序
](#php-cakephp-tutorial-deploy)
+ [

## 将数据库添加到环境
](#php-cakephp-tutorial-database)
+ [

## 清理
](#php-cakephp-tutorial-cleanup)
+ [

## 后续步骤
](#php-cakephp-tutorial-nextsteps)

## 先决条件


本教程假设您对基本 Elastic Beanstalk 操作和 Elastic Beanstalk 控制台有一定了解。如果尚不了解，请按照[了解如何开始使用 Elastic Beanstalk](GettingStarted.md)中的说明操作以启动您的第一个 Elastic Beanstalk 环境。

为了遵循本指南中的步骤，您需要命令行终端或 Shell，以便运行命令。命令显示在列表中，以提示符（\$1）和当前目录名称（如果有）开头。

```
~/eb-project$ this is a command
this is output
```

在 Linux 和 macOS 中，您可使用您首选的 Shell 和程序包管理器。在 Windows 上，您可以[安装适用于 Linux 的 Windows 子系统](https://docs.microsoft.com/en-us/windows/wsl/install-win10)，以获取与 Windows 集成的 Ubuntu 和 Bash 版本。

CakePHP 4 需要 PHP 7.4 或更高版本。它还需要 [CakePHP 官方安装](https://book.cakephp.org/4/en/installation.html)文档中列出的 PHP 扩展。PHP 和 Composer 都必须安装。

## 启动 Elastic Beanstalk 环境


使用 Elastic Beanstalk 控制台创建 Elastic Beanstalk 环境。选择 **PHP** 平台并接受默认设置和示例代码。

**启动环境（控制台）**

1. [使用以下预配置链接打开 Elastic Beanstalk 控制台：console.aws.amazon。 com/elasticbeanstalk/home\$1/newApplication？ 应用程序名称=教程&环境类型= LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced)

1. 对于 **Platform**（平台），选择与应用程序使用的语言匹配的平台和平台分支。

1. 对于**应用程序代码**，选择**示例应用程序**。

1. 选择**复查并启动**。

1. 检查可用选项。选择要使用的可用选项，然后在准备就绪后选择**创建应用程序**。

环境创建大约需要 5 分钟，将创建以下资源：
+ **EC2 实例** — 配置为在您选择的平台上运行 Web 应用程序的亚马逊弹性计算云 (Amazon EC2) 虚拟机。

  各平台运行一组特定软件、配置文件和脚本以支持特定的语言版本、框架、Web 容器或其组合。大多数平台使用 Apache 或 NGINX 作为 Web 应用程序前的反向代理，向其转发请求、提供静态资产以及生成访问和错误日志。
+ **实例安全组** — 配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。此资源允许来自负载均衡器的 HTTP 流量到达运行您的 Web 应用程序的 EC2 实例。默认情况下，其他端口不允许流量进入。
+ **负载均衡器** – 配置为向运行您的应用程序的实例分配请求的 Elastic Load Balancing 负载均衡器。负载均衡器还使您无需将实例直接公开在 Internet 上。
+ **负载均衡器安全组**-配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。利用此资源，HTTP 流量可从 Internet 到达负载均衡器。默认情况下，其他端口不允许流量进入。
+ **Auto Scaling 组** – 配置为在实例终止或不可用时替换实例的 Auto Scaling 组。
+ **Amazon S3 存储桶** – 使用 Elastic Beanstalk 时创建的源代码、日志和其他构件的存储位置。
+ **Amazon CloudWatch CloudWatch 警**报 — 两个警报，用于监控您环境中实例的负载，并在负载过高或过低时触发。警报触发后，您的 Auto Scaling 组会扩展或收缩以进行响应。
+ **CloudFormation 堆栈** — Elastic CloudFormation Beanstalk 用于在您的环境中启动资源并传播配置更改。这些资源在您可通过 [CloudFormation 控制台](https://console.aws.amazon.com/cloudformation)查看的模板中定义。
+ **域名**-以表单形式路由到您的 Web 应用程序的域名**subdomain*。 *region*.elasticbeanstalk.com。*
**域安全**  
为增强 Elastic Beanstalk 应用程序的安全性，已将 *elasticbeanstalk.com* 域注册到 [公共后缀列表（PSL）](https://publicsuffix.org/)。  
如果您需要在 Elastic Beanstalk 应用程序的默认域名中设置敏感 Cookie，我们建议您使用带有前缀 `__Host-` 的 Cookie 来提高安全性。这种做法可以保护您的域免遭跨站点请求伪造（CSRF）攻击。要了解更多信息，请参阅 Mozilla 开发者网络中的 [Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) 页面。

所有这些资源都由 Elastic Beanstalk 管理。当您终止环境时，Elastic Beanstalk 会终止其包含的所有资源。

**注意**  
Elastic Beanstalk 创建的 Amazon S3 存储桶将在多个环境之间共享并且在环境终止期间不会被删除。有关更多信息，请参阅 [将 Elastic Beanstalk 和 Amazon S3 结合使用](AWSHowTo.S3.md)。

## 安装 CakePHP 并生成网站


Composer 可使用一个命令安装 CakePHP 并创建工作项目：

```
~$ composer create-project --prefer-dist cakephp/app eb-cake
```

Composer 安装 CakePHP 及其约 20 个依赖项，并生成默认项目。

如果您在安装 CakePHP 时遇到问题，请访问官方文档中的安装主题：[http://book.cakephp.org/4.0/en/installation.html](http://book.cakephp.org/4.0/en/installation.html)

## 部署您的应用程序


创建包含由 Composer 创建的文件的[源包](applications-sourcebundle.md)。以下命令将创建名为 `cake-default.zip` 的源包。它将排除 `vendor` 文件夹中的文件，因为这些文件会占用大量空间并且对于将您的应用程序部署到 Elastic Beanstalk 不是必需的。

```
eb-cake zip ../cake-default.zip -r * .[^.]* -x "vendor/*"
```

将源包上传到 Elastic Beanstalk 以将 CakePHP 部署到您的环境。

**部署源包**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在环境概述页面上，选择 **Upload and deploy**（上传和部署）。

1. 使用屏幕上的对话框上传源包。

1. 选择 **Deploy**（部署）。

1. 部署完成后，选择站点 URL 以在新选项卡中打开您的网站。

**注意**  
为了进一步优化源包，请初始化一个 Git 存储库并使用 [`git archive` 命令](applications-sourcebundle.md#using-features.deployment.source.git)创建源包。默认 Symfony 项目包含一个 `.gitignore` 文件，该文件指示 Git 排除 `vendor` 文件夹以及部署时不需要的其他文件。

该过程完成时，单击 URL，在浏览器中打开 CakePHP 应用程序。

到目前为止，一切正常。接下来，您将在环境中添加一个数据库，并将 CakePHP 配置为连接到该数据库。

## 将数据库添加到环境


在 Elastic Beanstalk 环境中启动 Amazon RDS 数据库实例。你可以在 Elastic Beanstalk 上 SQLServer将 MySQL 或 PostgreSQL 数据库与 CakePHP 一起使用。在本示例中，我们将使用 PostgreSQL。

**将 Amazon RDS 数据库实例添加到 Elastic Beanstalk 环境**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration**（配置）。

1. 在 **Database**（数据库）下，选择 **Edit**（编辑）。

1. 对于**数据库引擎**，请选择 **postgres**。

1. 键入主 **username**（用户名）和 **password**（密码）。Elastic Beanstalk 将使用环境属性为应用程序提供这些值。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

创建数据库实例需要大约 10 分钟。同时，您可更新源代码，以便从环境中读取连接信息。Elastic Beanstalk 使用 `RDS_HOSTNAME` 等环境变量提供连接详细信息，以便您可以从应用程序中访问。

CakePHP 的数据库配置位于项目代码中 `app.php` 文件夹下名为 `config` 的文件内。打开此文件，添加从 `$_SERVER` 读取环境变量的代码，并将其分配到本地变量。在第一行 (`<?php`) 后插入以下示例中突出显示的行：

**Example \$1/Eb-.php cake/config/app**  

```
<?php
if (!defined('RDS_HOSTNAME')) {
  define('RDS_HOSTNAME', $_SERVER['RDS_HOSTNAME']);
  define('RDS_USERNAME', $_SERVER['RDS_USERNAME']);
  define('RDS_PASSWORD', $_SERVER['RDS_PASSWORD']);
  define('RDS_DB_NAME', $_SERVER['RDS_DB_NAME']);
}
return [
...
```

数据库连接可在 `app.php` 中进行配置。使用与数据库引擎（`Mysql`、`Sqlserver` 或 `Postgres`）相匹配的驱动程序名称，查找以下部分并修改默认数据源配置，并设置 `host`、`username`、`password` 和 `database` 变量，以便从 Elastic Beanstalk 读取相应的值：

**Example \$1/Eb-.php cake/config/app**  

```
...
     /**
     * Connection information used by the ORM to connect
     * to your application's datastores.
     * Drivers include Mysql Postgres Sqlite Sqlserver
     * See vendor\cakephp\cakephp\src\Database\Driver for complete list
     */
    'Datasources' => [
        'default' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Postgres',
            'persistent' => false,
            'host' => RDS_HOSTNAME,
            /*
             * CakePHP will use the default DB port based on the driver selected
             * MySQL on MAMP uses port 8889, MAMP users will want to uncomment
             * the following line and set the port accordingly
             */
            //'port' => 'non_standard_port_number',
            'username' => RDS_USERNAME,
            'password' => RDS_PASSWORD,
            'database' => RDS_DB_NAME,
            /*
             * You do not need to set this flag to use full utf-8 encoding (internal default since CakePHP 3.6).
             */
            //'encoding' => 'utf8mb4',
            'timezone' => 'UTC',
            'flags' => [],
            'cacheMetadata' => true,
            'log' => false,
...
```

在数据库实例完成启动时，请绑定已更新的应用程序并将其部署于环境：

**更新 Elastic Beanstalk 环境**

1. 创建源包：

   ```
   ~/eb-cake$ zip ../cake-v2-rds.zip -r * .[^.]* -x "vendor/*"
   ```

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 选择 **Upload and Deploy**。

1. 选择 **Browse**（浏览），然后上传 `cake-v2-rds.zip`。

1. 选择**部署**。

部署应用程序的新版本花费不到 1 分钟的时间。完成部署后，再次刷新网页，以验证数据库连接成功：

![\[Green checkmark icon indicating successful database connection for CakePHP.\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/php-cakephp-defaultwdb.png)


## 清理


演示代码使用完毕后，您可以终止环境。[Elastic Beanstalk 会删除 AWS 所有相关资源，[例如 EC2 亚马逊](using-features.managing.ec2.md)[实例、数据库实例、](using-features.managing.db.md)负载均衡器[、安全组](using-features.managing.elb.md)和警报。](using-features.alarms.md#using-features.alarms.title)

移除资源不会删除 Elastic Beanstalk 应用程序，因此您可以随时为您的应用程序创建新环境。

**从控制台终止 Elastic Beanstalk 环境**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 选择 **Actions**（操作），然后选择 **Terminate environment**（终止环境）。

1. 使用屏幕上的对话框确认环境终止。

此外，您还可以终止在您的 Elastic Beanstalk 环境外部创建的数据库资源。当您终止 Amazon RDS 数据库实例时，可以拍摄快照并在以后将数据恢复到其他实例。

**终止您的 RDS 数据库实例**

1. 打开 [Amazon RDS 控制台](https://console.aws.amazon.com/rds)。

1. 选择 **Databases**（数据库）。

1. 选择您的数据库实例。

1. 选择**操作**，然后选择**删除**。

1. 选择是否创建快照，然后选择**删除**。

## 后续步骤


如需了解有关 CakePHP 的更多信息，请访问 [book.cakephp.org](http://book.cakephp.org/4.0/en/index.html)，阅读书籍。

当您继续开发应用程序时，您可能希望通过某种方式来管理环境和部署应用程序，而无需手动创建 .zip 文件并将该文件上传到 Elastic Beanstalk 控制台。[Elastic Beanstalk 命令行](eb-cli3.md)界面 (EB CLI easy-to-use) 提供了从命令行创建、配置应用程序并将其部署到 Elastic Beanstalk 环境的命令。

在 Elastic Beanstalk 环境中运行 Amazon RDS 数据库实例不仅适合开发和测试，还将数据库的生命周期与环境相关联。请参阅[将 Amazon RDS DB 实例添加到 PHP Elastic Beanstalk 环境](create_deploy_PHP.rds.md)，浏览有关连接到在环境外运行的数据库的说明。

最后，如果计划在生产环境中使用应用程序，您会希望为环境[配置自定义域名](customdomains.md)，并为安全连接[启用 HTTPS](configuring-https.md)。

# 将 Symfony 应用程序部署到 Elastic Beanstalk
教程 - Symfony

[Symfony](http://symfony.com/) 是一个开源框架，用于开发动态 PHP Web 应用程序。本教程将引导您完成生成 Symfony 应用程序并将其部署到环境的 AWS Elastic Beanstalk 过程。

**Topics**
+ [

## 先决条件
](#php-symfony-tutorial-prereqs)
+ [

## 启动 Elastic Beanstalk 环境
](#php-symfony-tutorial-launch)
+ [

## 安装 Symfony 并生成网站
](#php-symfony-tutorial-generate)
+ [

## 部署您的应用程序
](#php-symfony-tutorial-deploy)
+ [

## 配置 Composer 设置
](#php-symfony-tutorial-configure)
+ [

## 清理
](#php-symfony-tutorial-cleanup)
+ [

## 后续步骤
](#php-symfony-tutorial-nextsteps)

## 先决条件


本教程假设您对基本 Elastic Beanstalk 操作和 Elastic Beanstalk 控制台有一定了解。如果尚不了解，请按照[了解如何开始使用 Elastic Beanstalk](GettingStarted.md)中的说明操作以启动您的第一个 Elastic Beanstalk 环境。

为了遵循本指南中的步骤，您需要命令行终端或 Shell，以便运行命令。命令显示在列表中，以提示符（\$1）和当前目录名称（如果有）开头。

```
~/eb-project$ this is a command
this is output
```

在 Linux 和 macOS 中，您可使用您首选的 Shell 和程序包管理器。在 Windows 上，您可以[安装适用于 Linux 的 Windows 子系统](https://docs.microsoft.com/en-us/windows/wsl/install-win10)，以获取与 Windows 集成的 Ubuntu 和 Bash 版本。

Symfony 4.4.9 需要 PHP 7.1.3 或更高版本。它还需要 Symfony 官方安装文档中的[技术要求](https://symfony.com/doc/4.4/setup.html )主题中列出的 PHP 扩展。在本教程中，我们使用 PHP 7.2 和相应的 Elastic Beanstalk [平台版本](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.PHP)。在继续操作之前，您必须先安装 PHP 和 Composer。

如需 Symfony 支持和维护信息，请参阅 Symfony 网站上的 [Symfony 发行](https://symfony.com/releases)主题。有关 Symfony 4.4.9 的 PHP 版本支持相关更新的更多信息，请参阅 Symfony 网站上的 [Symfony 4.4.9 发行说明](https://symfony.com/blog/symfony-4-4-9-released)主题。

## 启动 Elastic Beanstalk 环境


使用 Elastic Beanstalk 控制台创建 Elastic Beanstalk 环境。选择 **PHP** 平台并接受默认设置和示例代码。

**启动环境（控制台）**

1. [使用以下预配置链接打开 Elastic Beanstalk 控制台：console.aws.amazon。 com/elasticbeanstalk/home\$1/newApplication？ 应用程序名称=教程&环境类型= LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced)

1. 对于 **Platform**（平台），选择与应用程序使用的语言匹配的平台和平台分支。

1. 对于**应用程序代码**，选择**示例应用程序**。

1. 选择**复查并启动**。

1. 检查可用选项。选择要使用的可用选项，然后在准备就绪后选择**创建应用程序**。

环境创建大约需要 5 分钟，将创建以下资源：
+ **EC2 实例** — 配置为在您选择的平台上运行 Web 应用程序的亚马逊弹性计算云 (Amazon EC2) 虚拟机。

  各平台运行一组特定软件、配置文件和脚本以支持特定的语言版本、框架、Web 容器或其组合。大多数平台使用 Apache 或 NGINX 作为 Web 应用程序前的反向代理，向其转发请求、提供静态资产以及生成访问和错误日志。
+ **实例安全组** — 配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。此资源允许来自负载均衡器的 HTTP 流量到达运行您的 Web 应用程序的 EC2 实例。默认情况下，其他端口不允许流量进入。
+ **负载均衡器** – 配置为向运行您的应用程序的实例分配请求的 Elastic Load Balancing 负载均衡器。负载均衡器还使您无需将实例直接公开在 Internet 上。
+ **负载均衡器安全组**-配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。利用此资源，HTTP 流量可从 Internet 到达负载均衡器。默认情况下，其他端口不允许流量进入。
+ **Auto Scaling 组** – 配置为在实例终止或不可用时替换实例的 Auto Scaling 组。
+ **Amazon S3 存储桶** – 使用 Elastic Beanstalk 时创建的源代码、日志和其他构件的存储位置。
+ **Amazon CloudWatch CloudWatch 警**报 — 两个警报，用于监控环境中实例的负载，并在负载过高或过低时触发。警报触发后，您的 Auto Scaling 组会扩展或收缩以进行响应。
+ **CloudFormation 堆栈** — Elastic CloudFormation Beanstalk 用于在您的环境中启动资源并传播配置更改。这些资源在您可通过 [CloudFormation 控制台](https://console.aws.amazon.com/cloudformation)查看的模板中定义。
+ **域名**-以表单形式路由到您的 Web 应用程序的域名**subdomain*。 *region*.elasticbeanstalk.com。*
**域安全**  
为增强 Elastic Beanstalk 应用程序的安全性，已将 *elasticbeanstalk.com* 域注册到 [公共后缀列表（PSL）](https://publicsuffix.org/)。  
如果您需要在 Elastic Beanstalk 应用程序的默认域名中设置敏感 Cookie，我们建议您使用带有前缀 `__Host-` 的 Cookie 来提高安全性。这种做法可以保护您的域免遭跨站点请求伪造（CSRF）攻击。要了解更多信息，请参阅 Mozilla 开发者网络中的 [Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) 页面。

所有这些资源都由 Elastic Beanstalk 管理。当您终止环境时，Elastic Beanstalk 会终止其包含的所有资源。

**注意**  
Elastic Beanstalk 创建的 Amazon S3 存储桶将在多个环境之间共享并且在环境终止期间不会被删除。有关更多信息，请参阅 [将 Elastic Beanstalk 和 Amazon S3 结合使用](AWSHowTo.S3.md)。

## 安装 Symfony 并生成网站


Composer 可使用一个命令安装 Symfony 并创建工作项目：

```
~$ composer create-project symfony/website-skeleton eb-symfony
```

Composer 将安装 Symfony 及其依赖项，并生成默认项目。

如果在安装 Symfony 时遇到任何问题，请参阅 Symfony 官方文档中的[安装](https://symfony.com/doc/4.4/setup.html)主题。

## 部署您的应用程序


转到项目目录。

```
~$ cd eb-symfony
```

创建包含由 Composer 创建的文件的[源包](applications-sourcebundle.md)。以下命令将创建名为 `symfony-default.zip` 的源包。它将排除 `vendor` 文件夹中的文件，因为这些文件会占用大量空间并且对于将您的应用程序部署到 Elastic Beanstalk 不是必需的。

```
eb-symfony$ zip ../symfony-default.zip -r * .[^.]* -x "vendor/*"
```

将源包上传到 Elastic Beanstalk 以将 Symfony 部署到您的环境。

**部署源包**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在环境概述页面上，选择 **Upload and deploy**（上传和部署）。

1. 使用屏幕上的对话框上传源包。

1. 选择 **Deploy**（部署）。

1. 部署完成后，选择站点 URL 以在新选项卡中打开您的网站。

**注意**  
为了进一步优化源包，请初始化一个 Git 存储库并使用 [`git archive` 命令](applications-sourcebundle.md#using-features.deployment.source.git)创建源包。默认 Symfony 项目包含一个 `.gitignore` 文件，该文件指示 Git 排除 `vendor` 文件夹以及部署时不需要的其他文件。

## 配置 Composer 设置


部署完成后，单击 URL 以在浏览器中打开 Symfony 应用程序。

这是什么? 默认情况下，Elastic Beanstalk 提供项目在网站根路径下的根目录。但在这种情况下，默认页面 (`app.php`) 位于 `web` 文件夹的下一级。您可通过将 `/public` 添加至 URL 加以验证。例如 `http://symfony.us-east-2.elasticbeanstalk.com/public`。

要在根路径中提供 Symfony 应用程序，请使用 Elastic Beanstalk 控制台为网站配置*文档根目录*。

**配置网站的文档根目录**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration**（配置）。

1. 在 **Updates, monitoring, and logging**（更新、监控和日志记录）配置类别中，选择 **Edit**（编辑）。

1. 对于 **Document root**（文档根目录），输入 **/public**。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

1. 更新完成后，单击 URL 以在浏览器中重新打开站点。

## 清理


演示代码使用完毕后，您可以终止环境。[Elastic Beanstalk 会删除 AWS 所有相关资源，[例如 EC2 亚马逊](using-features.managing.ec2.md)[实例、数据库实例、](using-features.managing.db.md)负载均衡器[、安全组](using-features.managing.elb.md)和警报。](using-features.alarms.md#using-features.alarms.title)

移除资源不会删除 Elastic Beanstalk 应用程序，因此您可以随时为您的应用程序创建新环境。

**从控制台终止 Elastic Beanstalk 环境**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 选择 **Actions**（操作），然后选择 **Terminate environment**（终止环境）。

1. 使用屏幕上的对话框确认环境终止。

## 后续步骤


有关 Symfony 的更多信息，请参阅 symfony.com 上的[什么是 Symfony？](https://symfony.com/what-is-symfony)。

当您继续开发应用程序时，您可能希望通过某种方式来管理环境和部署应用程序，而无需手动创建 .zip 文件并将该文件上传到 Elastic Beanstalk 控制台。[Elastic Beanstalk 命令行](eb-cli3.md)界面 (EB CLI easy-to-use) 提供了从命令行创建、配置应用程序并将其部署到 Elastic Beanstalk 环境的命令。

在本教程中，您使用了 Elastic Beanstalk 控制台来配置 Composer 选项。要使此配置成为应用程序源的一部分，您可以使用类似于下面的配置文件。

**Example .ebextensions/composer.config**  

```
option_settings:
  aws:elasticbeanstalk:container:php:phpini:
    document_root: /public
```

有关更多信息，请参阅 [使用配置文件 (`.ebextensions`) 进行高级环境自定义](ebextensions.md)。

Symfony 使用自己的配置文件来配置数据库连接。有关使用 Symfony 连接到数据库的说明，请参阅[使用 Symfony 连接到数据库](create_deploy_PHP.rds.md#php-rds-symfony)。

最后，如果计划在生产环境中使用应用程序，您会希望为环境[配置自定义域名](customdomains.md)，并为安全连接[启用 HTTPS](configuring-https.md)。

# 将带有外部 Amazon RDS 数据库的高可用性 PHP 应用程序部署到 Elastic Beanstalk
教程 - HA 生产

本教程将引导您完成在[外部启动 RDS 数据库实例](AWSHowTo.RDS.md) AWS Elastic Beanstalk，以及配置运行 PHP 应用程序的高可用性环境以连接到该实例的过程。运行 Elastic Beanstalk 外部的数据库实例会将数据库与环境的生命周期分离。这让您可以从多个环境连接到同一个数据库，将一个数据库交换为另一个数据库，或执行蓝/绿部署，而不影响您的数据库。

本教程使用了一个[示例 PHP 应用程序](https://github.com/awslabs/eb-demo-php-simple-app)，该应用程序利用 MySQL 数据库来存储用户提供的文本数据。示例应用程序使用[配置文件](ebextensions.md)配置 [PHP 设置](create_deploy_PHP.container.md#php-namespaces)并为要使用的应用程序在数据库中创建表。本教程还展示了如何使用 [Composer 文件](create_deploy_PHP.container.md#php-configuration-composer)在部署期间安装程序包。

**Topics**
+ [

## 先决条件
](#php-hawrds-tutorial-prereqs)
+ [

## 在 Amazon RDS 中启动数据库实例
](#php-hawrds-tutorial-database)
+ [

## 创建 Elastic Beanstalk 环境
](#php-hawrds-tutorial-create)
+ [

## 配置安全组、环境属性和扩展
](#php-hawrds-tutorial-configure)
+ [

## 部署示例应用程序。
](#php-hawrds-tutorial-deploy)
+ [

## 清理
](#php-hawrds-tutorial-cleanup)
+ [

## 后续步骤
](#php-hawrds-tutorial-nextsteps)

## 先决条件


在开始之前，请从以下地址下载示例应用程序源包 GitHub：[eb-demo-php-simple-app-](https://github.com/aws-samples/eb-demo-php-simple-app/releases/download/v1.3/eb-demo-php-simple-app-v1.3.zip) 1.3.zip

本教程中针对 Amazon Relational Database Service (Amazon RDS) 任务的过程假定您正在默认的 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/) (Amazon VPC) 中启动资源。所有新账户在每个区域中均包含一个默认 VPC。如果您没有默认 VPC，则这些过程将会发生变化。[将 Elastic Beanstalk 和 Amazon RDS 结合使用](AWSHowTo.RDS.md)有关 EC2经典和自定义 VPC 平台的说明，请参阅。

## 在 Amazon RDS 中启动数据库实例


要将外部数据库与在 Elastic Beanstalk 中运行的应用程序结合使用，请首先使用 Amazon RDS 启动数据库实例。当您使用 Amazon RDS 启动实例时，它完全独立于 Elastic Beanstalk 和您的 Elastic Beanstalk 环境，并且不会由 Elastic Beanstalk 终止或监控。

使用 Amazon RDS 控制台可启动多可用区 **MySQL** 数据库实例。选择多可用区部署可确保您的数据库将进行故障转移并在源数据库实例中断服务时继续可用。

**在默认 VPC 中启动 RDS 数据库实例**

1. 打开 [RDS 控制台](https://console.aws.amazon.com/rds/home)。

1. 在导航窗格中，选择 **Databases**（数据库）。

1. 选择**创建数据库**。

1. 选择 **Standard Create**（标准创建）。
**重要**  
请勿选择 **Easy Create**（轻松创建）。如果您选择它，您将无法配置启动此 RDS 数据库所需的设置。

1. 在 **Additional configuration**（附加配置）下，对于 **Initial database name**（初始数据库名称），键入 **ebdb**。

1. 请查看默认设置并根据您的具体要求调整这些设置。请注意以下选项：
   + **DB instance class**（数据库实例类）– 选择对于您的工作负载具有适当的内存量和 CPU 能力的实例大小。
   + **多可用区部署** — 为了获得高可用性，请将其设置为在**不同的可用区中创建 Aurora Replica/Reader 节点**。
   + **Master username**（主用户名）和 **Master password**（主密码）– 数据库用户名和密码。请记下这些设置，因为您以后将使用这些值。

1. 验证其余选项的默认设置，然后选择 **Create database**（创建数据库）。

接下来，修改附加到数据库实例的安全组以允许相应的端口上的入站流量。这与您稍后要附加到 Elastic Beanstalk 环境的安全组相同，因此您添加的规则将向同一安全组中的其他资源授予入口流量权限。

**修改附加到 RDS 实例的安全组上的入站规则**

1. 打开 [Amazon RDS 控制台](https://console.aws.amazon.com/rds/home)。

1. 选择 **Databases**（数据库）。

1. 选择您的数据库实例的名称以查看其详细信息。

1. 在**连接**部分中，记下在该页上显示的**子网**、**安全组**和**端点**。这样您稍后可以使用这些信息。

1. 在 **Security**（安全性）下面，您可以查看与数据库实例关联的安全组。打开链接，在 Amazon EC2 控制台中查看安全组。

1. 在安全组详细信息中，选择 **Inbound**（入站）选项卡。

1. 选择 **Edit**（编辑）。

1. 选择 **Add Rule**（添加规则）。

1. 对于 **Type**（类型），请选择应用程序使用的数据库引擎。

1. 对于 **Source**（源），键入 **sg-** 以查看可用安全组的列表。请选择 Elastic Beanstalk 环境中使用的与 Auto Scaling 组关联的安全组。这样，环境中的 Amazon EC2 实例就可以访问数据库。  
![\[用于在 Amazon EC2 控制台中编辑安全组入站规则的屏幕图像。\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/ec2-securitygroup-rds.png)

1. 选择**保存**。

创建一个数据库实例大约需要 10 分钟。与此同时，创建您的 Elastic Beanstalk 环境。

## 创建 Elastic Beanstalk 环境


使用 Elastic Beanstalk 控制台创建 Elastic Beanstalk 环境。选择 **PHP** 平台并接受默认设置和示例代码。启动环境后，您可以将环境配置为连接到数据库，然后部署从中下载的示例应用程序 GitHub。

**启动环境（控制台）**

1. [使用以下预配置链接打开 Elastic Beanstalk 控制台：console.aws.amazon。 com/elasticbeanstalk/home\$1/newApplication？ 应用程序名称=教程&环境类型= LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced)

1. 对于 **Platform**（平台），选择与应用程序使用的语言匹配的平台和平台分支。

1. 对于**应用程序代码**，选择**示例应用程序**。

1. 选择**复查并启动**。

1. 检查可用选项。选择要使用的可用选项，然后在准备就绪后选择**创建应用程序**。

环境创建大约需要 5 分钟，将创建以下资源：
+ **EC2 实例** — 配置为在您选择的平台上运行 Web 应用程序的亚马逊弹性计算云 (Amazon EC2) 虚拟机。

  各平台运行一组特定软件、配置文件和脚本以支持特定的语言版本、框架、Web 容器或其组合。大多数平台使用 Apache 或 NGINX 作为 Web 应用程序前的反向代理，向其转发请求、提供静态资产以及生成访问和错误日志。
+ **实例安全组** — 配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。此资源允许来自负载均衡器的 HTTP 流量到达运行您的 Web 应用程序的 EC2 实例。默认情况下，其他端口不允许流量进入。
+ **负载均衡器** – 配置为向运行您的应用程序的实例分配请求的 Elastic Load Balancing 负载均衡器。负载均衡器还使您无需将实例直接公开在 Internet 上。
+ **负载均衡器安全组**-配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。利用此资源，HTTP 流量可从 Internet 到达负载均衡器。默认情况下，其他端口不允许流量进入。
+ **Auto Scaling 组** – 配置为在实例终止或不可用时替换实例的 Auto Scaling 组。
+ **Amazon S3 存储桶** – 使用 Elastic Beanstalk 时创建的源代码、日志和其他构件的存储位置。
+ **Amazon CloudWatch CloudWatch 警**报 — 两个警报，用于监控环境中实例的负载，并在负载过高或过低时触发。警报触发后，您的 Auto Scaling 组会扩展或收缩以进行响应。
+ **CloudFormation 堆栈** — Elastic CloudFormation Beanstalk 用于在您的环境中启动资源并传播配置更改。这些资源在您可通过 [CloudFormation 控制台](https://console.aws.amazon.com/cloudformation)查看的模板中定义。
+ **域名**-以表单形式路由到您的 Web 应用程序的域名**subdomain*。 *region*.elasticbeanstalk.com。*
**域安全**  
为增强 Elastic Beanstalk 应用程序的安全性，已将 *elasticbeanstalk.com* 域注册到 [公共后缀列表（PSL）](https://publicsuffix.org/)。  
如果您需要在 Elastic Beanstalk 应用程序的默认域名中设置敏感 Cookie，我们建议您使用带有前缀 `__Host-` 的 Cookie 来提高安全性。这种做法可以保护您的域免遭跨站点请求伪造（CSRF）攻击。要了解更多信息，请参阅 Mozilla 开发者网络中的 [Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) 页面。

所有这些资源都由 Elastic Beanstalk 管理。当您终止环境时，Elastic Beanstalk 会终止其包含的所有资源。您启动的 RDS 数据库实例位于您的环境之外，因此您需负责管理其生命周期。

**注意**  
Elastic Beanstalk 创建的 Amazon S3 存储桶将在多个环境之间共享并且在环境终止期间不会被删除。有关更多信息，请参阅 [将 Elastic Beanstalk 和 Amazon S3 结合使用](AWSHowTo.S3.md)。

## 配置安全组、环境属性和扩展


将数据库实例的安全组添加到正在运行的环境。此过程将使 Elastic Beanstalk 使用附加的其他安全组重新配置环境中的所有实例。

**向环境添加安全组**
+ 请执行以下操作之一：
  + 使用 Elastic Beanstalk 控制台添加安全组

    1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

    1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

    1. 在导航窗格中，选择 **Configuration**（配置）。

    1. 在 **Instances**（实例）配置类别中，选择 **Edit**（编辑）。

    1. 在**EC2 安全组**下，除了 Elastic Beanstalk 创建的实例安全组外，还要选择要附加到实例的安全组。

    1. 要保存更改，请选择页面底部的 **Apply**（应用）。

    1. 阅读警告，然后选择 **Confirm**（确认）。
  + 要使用[配置文件](ebextensions.md)添加安全组，请使用 [https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config) 示例文件。

接下来，使用环境属性将连接信息传递给环境。示例应用程序使用了默认的一组属性，这些属性与您在环境中预置数据库时 Elastic Beanstalk 配置的属性匹配。

**为 Amazon RDS 数据库实例配置环境属性**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration**（配置）。

1. 在 **Updates, monitoring, and logging**（更新、监控和日志记录）配置类别中，选择 **Edit**（编辑）。

1. 在**环境属性**部分中，定义应用程序读取的用于构建连接字符串的变量。为了实现与具有集成 RDS 数据库实例的环境的兼容，请使用以下名称和值。您可以在 [RDS 控制台](https://console.aws.amazon.com/rds/home)中找到除密码以外的所有值。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/php-ha-tutorial.html)  
![\[添加了 RDS 属性的环境属性配置部分\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/environment-cfg-envprops-rds.png)

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

最后，使用较高的最低实例计数配置您环境的 Auto Scaling 组。请始终至少运行两个实例，以防止您环境中的 Web 服务器发生单点故障，并支持您在不中断站点服务的情况下部署更改。

**配置您的环境的 Auto Scaling 组以获得高可用性**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration (配置)**。

1. 在 **Capacity (容量)** 配置类别中，选择 **Edit (编辑)**。

1. 在 **Auto Scaling group**（Auto Scaling 组）部分中，将 **Min instances**（最小实例数）设置为 **2**。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

## 部署示例应用程序。


现在，您的环境已准备好运行示例应用程序并连接到 Amazon RDS。将示例应用程序部署到您的环境。

**注意**  
如果你还没有 GitHub，可以从以下网址下载源包：[eb-demo-php-simple-app-](https://github.com/aws-samples/eb-demo-php-simple-app/releases/download/v1.3/eb-demo-php-simple-app-v1.3.zip) 1.3.zip

**部署源包**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在环境概述页面上，选择 **Upload and deploy**（上传和部署）。

1. 使用屏幕上的对话框上传源包。

1. 选择 **Deploy**（部署）。

1. 部署完成后，选择站点 URL 以在新选项卡中打开您的网站。

此站点将收集用户评论并使用 MySQL 数据库来存储数据。要添加评论，请选择 **Share Your Thought**（分享您的想法），输入评论，然后选择 **Submit Your Thought（提交您的想法）**。Web 应用程序会将评论写入数据库，以便环境中的任何实例均可读取它，并且在实例中断服务时不会丢失。

![\[User interface for sharing thoughts, with a posted comment about Elastic Beanstalk on AWS.\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/php-ha-tutorial-app.png)


## 清理


演示代码使用完毕后，您可以终止环境。[Elastic Beanstalk 会删除 AWS 所有相关资源，[例如 EC2 亚马逊](using-features.managing.ec2.md)[实例、数据库实例、](using-features.managing.db.md)负载均衡器[、安全组](using-features.managing.elb.md)和警报。](using-features.alarms.md#using-features.alarms.title)

移除资源不会删除 Elastic Beanstalk 应用程序，因此您可以随时为您的应用程序创建新环境。

**从控制台终止 Elastic Beanstalk 环境**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 选择 **Actions**（操作），然后选择 **Terminate environment**（终止环境）。

1. 使用屏幕上的对话框确认环境终止。

此外，您还可以终止在您的 Elastic Beanstalk 环境外部创建的数据库资源。当您终止 Amazon RDS 数据库实例时，可以拍摄快照并在以后将数据恢复到其他实例。

**终止您的 RDS 数据库实例**

1. 打开 [Amazon RDS 控制台](https://console.aws.amazon.com/rds)。

1. 选择 **Databases**（数据库）。

1. 选择您的数据库实例。

1. 选择**操作**，然后选择**删除**。

1. 选择是否创建快照，然后选择**删除**。

## 后续步骤


当您继续开发应用程序时，您可能希望通过某种方式来管理环境和部署应用程序，而无需手动创建 .zip 文件并将该文件上传到 Elastic Beanstalk 控制台。[Elastic Beanstalk 命令行](eb-cli3.md)界面 (EB CLI easy-to-use) 提供了从命令行创建、配置应用程序并将其部署到 Elastic Beanstalk 环境的命令。

示例应用程序使用配置文件配置 PHP 设置并在数据库中创建表 (如果表尚未存在)。您还可以使用配置文件在环境创建期间配置实例的安全组设置，以避免耗时的配置更新。请参阅[使用配置文件 (`.ebextensions`) 进行高级环境自定义](ebextensions.md)了解更多信息。

对于开发和测试，您可能希望使用 Elastic Beanstalk 的用于将托管数据库实例直接添加到环境的功能。有关在环境内设置数据库的说明，请参阅[将数据库添加到 Elastic Beanstalk 环境](using-features.managing.db.md)。

如果您需要高性能数据库，请考虑使用 [Amazon Aurora](https://aws.amazon.com/rds/aurora/)。Amazon Aurora 是与 MySQL 兼容的数据库引擎，能够以低成本提供商用数据库功能。要将您的应用程序连接到另一个数据库，请重复执行[安全组配置](#php-hawrds-tutorial-database)步骤并[更新与 RDS 相关的环境属性](#php-hawrds-tutorial-configure)。

最后，如果计划在生产环境中使用应用程序，您会希望为环境[配置自定义域名](customdomains.md)，并为安全连接[启用 HTTPS](configuring-https.md)。

# 将带有外部 Amazon RDS 数据库的高可用性 WordPress 网站部署到 Elastic Beanstalk
教程-HA WordPress

本教程介绍如何[启动外部的 Amazon RDS 数据库实例](AWSHowTo.RDS.md) AWS Elastic Beanstalk，以及如何配置运行 WordPress 网站的高可用性环境以连接到该实例。该网站使用 Amazon Elastic File System (Amazon EFS) 作为已上传文件的共享存储空间。

运行 Elastic Beanstalk 外部的数据库实例会将数据库与环境的生命周期分离。这让您可以从多个环境连接到同一个数据库，将一个数据库交换为另一个数据库，或执行[蓝/绿部署](using-features.CNAMESwap.md)，而不影响您的数据库。

**注意**  
有关 PHP WordPress 版本与版本兼容性的最新信息，请参阅 WordPress 网站上的 [PHP 兼容性和 WordPress 版本](https://make.wordpress.org/core/handbook/references/php-compatibility-and-wordpress-versions/)。在为 WordPress 实现升级到新版本的 PHP 之前，您应该参考这些信息。

**Topics**
+ [

## 先决条件
](#php-wordpress-tutorial-prereqs)
+ [

## 在 Amazon RDS 中启动数据库实例
](#php-hawordpress-tutorial-database)
+ [

## 下载 WordPress
](#php-hawordpress-tutorial-download)
+ [

## 启动 Elastic Beanstalk 环境
](#php-hawordpress-tutorial-launch)
+ [

## 配置安全组和环境属性
](#php-wordpress-tutorial-configure)
+ [

## 配置并部署您的应用程序
](#php-wordpress-tutorial-deploy)
+ [

## 安装 WordPress
](#php-hawordpress-tutorial-install)
+ [

## 更新密钥和加密盐
](#php-hawordpress-tutorial-updatesalts)
+ [

## 删除访问限制
](#php-hawordpress-tutorial-updateenv)
+ [

## 配置 Auto Scaling 组
](#php-hawordpress-tutorial-autoscaling)
+ [

## 升级 WordPress
](#php-hawordpress-tutorial-upgrade)
+ [

## 清理
](#php-hawordpress-tutorial-cleanup)
+ [

## 后续步骤
](#php-hawordpress-tutorial-nextsteps)

## 先决条件


本教程假设您对基本 Elastic Beanstalk 操作和 Elastic Beanstalk 控制台有一定了解。如果尚不了解，请按照[了解如何开始使用 Elastic Beanstalk](GettingStarted.md)中的说明操作以启动您的第一个 Elastic Beanstalk 环境。

为了遵循本指南中的步骤，您需要命令行终端或 Shell，以便运行命令。命令显示在列表中，以提示符（\$1）和当前目录名称（如果有）开头。

```
~/eb-project$ this is a command
this is output
```

在 Linux 和 macOS 中，您可使用您首选的 Shell 和程序包管理器。在 Windows 上，您可以[安装适用于 Linux 的 Windows 子系统](https://docs.microsoft.com/en-us/windows/wsl/install-win10)，以获取与 Windows 集成的 Ubuntu 和 Bash 版本。

**默认 VPC**  
本教程中的 Amazon Relational Database Service (Amazon RDS) 过程假定您在默认 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/) (Amazon VPC) 中启动资源。所有新账户在每个 AWS 区域都包含一个默认 VPC。如果您没有默认 VPC，则这些过程将会发生变化。[将 Elastic Beanstalk 和 Amazon RDS 结合使用](AWSHowTo.RDS.md)有关 EC2经典和自定义 VPC 平台的说明，请参阅。

**AWS 区域**  
该示例应用程序使用 Amazon EFS，它仅适用于支持 Amazon EFS 的 AWS 区域。要了解支持的 AWS 区域，请参阅中的 [Amazon Elastic File System 终端节点和配额*AWS 一般参考*](https://docs.aws.amazon.com/general/latest/gr/elasticfilesystem.html)。

## 在 Amazon RDS 中启动数据库实例


当您使用 Amazon RDS 启动实例时，它完全独立于 Elastic Beanstalk 和您的 Elastic Beanstalk 环境，并且不会由 Elastic Beanstalk 终止或监控。

在以下步骤中，您将使用 Amazon RDS 控制台：
+ 使用 **MySQL** 引擎启动数据库。
+ 启用**多可用区部署**。这会在不同的可用区 (AZ) 中创建备用副本，以提供数据冗余、消除 I/O 冻结并最大限度地减少系统备份期间的延迟峰值。

**在默认 VPC 中启动 RDS 数据库实例**

1. 打开 [RDS 控制台](https://console.aws.amazon.com/rds/home)。

1. 在导航窗格中，选择 **Databases**（数据库）。

1. 选择**创建数据库**。

1. 选择 **Standard Create**（标准创建）。
**重要**  
请勿选择 **Easy Create**（轻松创建）。如果您选择它，您将无法配置启动此 RDS 数据库所需的设置。

1. 在 **Additional configuration**（附加配置）下，对于 **Initial database name**（初始数据库名称），键入 **ebdb**。

1. 请查看默认设置并根据您的具体要求调整这些设置。请注意以下选项：
   + **DB instance class**（数据库实例类）– 选择对于您的工作负载具有适当的内存量和 CPU 能力的实例大小。
   + **多可用区部署** — 为了获得高可用性，请将其设置为在**不同的可用区中创建 Aurora Replica/Reader 节点**。
   + **Master username**（主用户名）和 **Master password**（主密码）– 数据库用户名和密码。请记下这些设置，因为您以后将使用这些值。

1. 验证其余选项的默认设置，然后选择 **Create database**（创建数据库）。

创建数据库实例后，修改附加到该实例的安全组，以便允许相应端口上的入站流量。

**注意**  
这与您稍后要附加到 Elastic Beanstalk 环境的安全组相同，因此您添加的规则现在将向同一安全组中的其他资源授予入口流量权限。

**修改附加到 RDS 实例的安全组上的入站规则**

1. 打开 [Amazon RDS 控制台](https://console.aws.amazon.com/rds/home)。

1. 选择 **Databases**（数据库）。

1. 选择您的数据库实例的名称以查看其详细信息。

1. 在**连接**部分中，记下在该页上显示的**子网**、**安全组**和**端点**。这样您稍后可以使用这些信息。

1. 在 **Security**（安全性）下面，您可以查看与数据库实例关联的安全组。打开链接，在 Amazon EC2 控制台中查看安全组。

1. 在安全组详细信息中，选择 **Inbound**（入站）选项卡。

1. 选择 **Edit**（编辑）。

1. 选择 **Add Rule**（添加规则）。

1. 对于 **Type**（类型），请选择应用程序使用的数据库引擎。

1. 对于 **Source**（源），键入 **sg-** 以查看可用安全组的列表。请选择 Elastic Beanstalk 环境中使用的与 Auto Scaling 组关联的安全组。这样，环境中的 Amazon EC2 实例就可以访问数据库。  
![\[用于在 Amazon EC2 控制台中编辑安全组入站规则的屏幕图像。\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/ec2-securitygroup-rds.png)

1. 选择**保存**。

创建一个数据库实例大约需要 10 分钟。同时，下载 WordPress 并创建你的 Elastic Beanstalk 环境。

## 下载 WordPress


要准备 WordPress 使用进行部署 AWS Elastic Beanstalk，必须将 WordPress 文件复制到您的计算机并提供正确的配置信息。

**创建 WordPress 项目**

1.  WordPress 从 [wordpress.org](https://wordpress.org/download/) 下载。

   ```
   ~$curl https://wordpress.org/wordpress-6.2.tar.gz -o wordpress.tar.gz
   ```

1. 从示例存储库中下载配置文件。

   ```
   ~$ wget https://github.com/aws-samples/eb-php-wordpress/releases/download/v1.1/eb-php-wordpress-v1.zip
   ```

1. 提取 WordPress 并更改文件夹的名称。

   ```
    ~$ tar -xvf wordpress.tar.gz
    ~$ mv wordpress wordpress-beanstalk
    ~$ cd wordpress-beanstalk
   ```

1. 在 WordPress 安装过程中解压缩配置文件。

   ```
    ~/wordpress-beanstalk$ unzip ../eb-php-wordpress-v1.zip
     creating: .ebextensions/
    inflating: .ebextensions/dev.config
    inflating: .ebextensions/efs-create.config
    inflating: .ebextensions/efs-mount.config
    inflating: .ebextensions/loadbalancer-sg.config
    inflating: .ebextensions/wordpress.config
    inflating: LICENSE
    inflating: README.md
    inflating: wp-config.php
   ```

## 启动 Elastic Beanstalk 环境


使用 Elastic Beanstalk 控制台创建 Elastic Beanstalk 环境。启动环境后，您可以将其配置为连接到数据库，然后将 WordPress 代码部署到环境中。

在以下步骤中，您将使用 Elastic Beanstalk 控制台：
+ 使用托管的 **PHP** 平台创建 Elastic Beanstalk 应用程序。
+ 接受默认设置和示例代码。

**启动环境（控制台）**

1. [使用以下预配置链接打开 Elastic Beanstalk 控制台：console.aws.amazon。 com/elasticbeanstalk/home\$1/newApplication？ 应用程序名称=教程&环境类型= LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced)

1. 对于 **Platform**（平台），选择与应用程序使用的语言匹配的平台和平台分支。

1. 对于**应用程序代码**，选择**示例应用程序**。

1. 选择**复查并启动**。

1. 检查可用选项。选择要使用的可用选项，然后在准备就绪后选择**创建应用程序**。

创建环境大约需要 5 分钟，将创建以下资源。

### Elastic Beanstalk 创建的资源

+ **EC2 实例** — 配置为在您选择的平台上运行 Web 应用程序的亚马逊弹性计算云 (Amazon EC2) 虚拟机。

  各平台运行一组特定软件、配置文件和脚本以支持特定的语言版本、框架、Web 容器或其组合。大多数平台使用 Apache 或 NGINX 作为 Web 应用程序前的反向代理，向其转发请求、提供静态资产以及生成访问和错误日志。
+ **实例安全组** — 配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。此资源允许来自负载均衡器的 HTTP 流量到达运行您的 Web 应用程序的 EC2 实例。默认情况下，其他端口不允许流量进入。
+ **负载均衡器** – 配置为向运行您的应用程序的实例分配请求的 Elastic Load Balancing 负载均衡器。负载均衡器还使您无需将实例直接公开在 Internet 上。
+ **负载均衡器安全组**-配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。利用此资源，HTTP 流量可从 Internet 到达负载均衡器。默认情况下，其他端口不允许流量进入。
+ **Auto Scaling 组** – 配置为在实例终止或不可用时替换实例的 Auto Scaling 组。
+ **Amazon S3 存储桶** – 使用 Elastic Beanstalk 时创建的源代码、日志和其他构件的存储位置。
+ **Amazon CloudWatch CloudWatch 警**报 — 两个警报，用于监控您环境中实例的负载，并在负载过高或过低时触发。警报触发后，您的 Auto Scaling 组会扩展或收缩以进行响应。
+ **CloudFormation 堆栈** — Elastic CloudFormation Beanstalk 用于在您的环境中启动资源并传播配置更改。这些资源在您可通过 [CloudFormation 控制台](https://console.aws.amazon.com/cloudformation)查看的模板中定义。
+ **域名**-以表单形式路由到您的 Web 应用程序的域名**subdomain*。 *region*.elasticbeanstalk.com。*
**域安全**  
为增强 Elastic Beanstalk 应用程序的安全性，已将 *elasticbeanstalk.com* 域注册到 [公共后缀列表（PSL）](https://publicsuffix.org/)。  
如果您需要在 Elastic Beanstalk 应用程序的默认域名中设置敏感 Cookie，我们建议您使用带有前缀 `__Host-` 的 Cookie 来提高安全性。这种做法可以保护您的域免遭跨站点请求伪造（CSRF）攻击。要了解更多信息，请参阅 Mozilla 开发者网络中的 [Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) 页面。

所有这些资源都由 Elastic Beanstalk 管理。当您终止环境时，Elastic Beanstalk 会终止其包含的所有资源。

由于您启动的 Amazon RDS 实例位于您的环境之外，因此您需负责管理其生命周期。

**注意**  
Elastic Beanstalk 创建的 Amazon S3 存储桶将在多个环境之间共享并且在环境终止期间不会被删除。有关更多信息，请参阅 [将 Elastic Beanstalk 和 Amazon S3 结合使用](AWSHowTo.S3.md)。

## 配置安全组和环境属性


将数据库实例的安全组添加到正在运行的环境。此过程将使 Elastic Beanstalk 使用附加的其他安全组重新配置环境中的所有实例。

**向环境添加安全组**
+ 请执行以下操作之一：
  + 使用 Elastic Beanstalk 控制台添加安全组

    1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

    1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

    1. 在导航窗格中，选择 **Configuration**（配置）。

    1. 在 **Instances**（实例）配置类别中，选择 **Edit**（编辑）。

    1. 在**EC2 安全组**下，除了 Elastic Beanstalk 创建的实例安全组外，还要选择要附加到实例的安全组。

    1. 要保存更改，请选择页面底部的 **Apply**（应用）。

    1. 阅读警告，然后选择 **Confirm**（确认）。
  + 要使用[配置文件](ebextensions.md)添加安全组，请使用 [https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config) 示例文件。

接下来，使用环境属性将连接信息传递给环境。

该 WordPress 应用程序使用一组默认的属性，这些属性与 Elastic Beanstalk 在环境中配置数据库时配置的属性相匹配。

**为 Amazon RDS 数据库实例配置环境属性**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration**（配置）。

1. 在 **Updates, monitoring, and logging**（更新、监控和日志记录）配置类别中，选择 **Edit**（编辑）。

1. 在**环境属性**部分中，定义应用程序读取的用于构建连接字符串的变量。为了实现与具有集成 RDS 数据库实例的环境的兼容，请使用以下名称和值。您可以在 [RDS 控制台](https://console.aws.amazon.com/rds/home)中找到除密码以外的所有值。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/php-hawordpress-tutorial.html)  
![\[添加了 RDS 属性的环境属性配置部分\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/environment-cfg-envprops-rds.png)

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

## 配置并部署您的应用程序


验证您的 `wordpress-beanstalk` 文件夹结构是否正确，如下所示。

```
wordpress-beanstalk$ tree -aL 1
.
├── .ebextensions
├── index.php
├── LICENSE
├── license.txt
├── readme.html
├── README.md
├── wp-activate.php
├── wp-admin
├── wp-blog-header.php
├── wp-comments-post.php
├── wp-config.php
├── wp-config-sample.php
├── wp-content
├── wp-cron.php
├── wp-includes
├── wp-links-opml.php
├── wp-load.php
├── wp-login.php
├── wp-mail.php
├── wp-settings.php
├── wp-signup.php
├── wp-trackback.php
└── xmlrpc.php
```

项目存储库中的自定义 `wp-config.php` 文件使用您在上一步中定义的环境变量来配置数据库连接。`.ebextensions` 文件夹包含用于在您的 Elastic Beanstalk 环境中创建其他资源的配置文件。

该配置文件要求您进行修改以使用账户。将文件中的占位符值替换为相应的值， IDs 然后创建源包。

**更新配置文件并创建源包**

1. 按如下方式修改配置文件。
   + `.ebextensions/dev.config`— 限制对环境的访问以在 WordPress 安装过程中对其进行保护。将文件顶部附近的占位符 IP 地址替换为用于访问环境网站的计算机的公有 IP 地址，从而完成 WordPress 安装。
**注意**  
根据您的网络，您可能需要使用 IP 地址块。
   + `.ebextensions/efs-create.config`— 在您的 VPC 的每个可用性 Zone/subnet 中创建 EFS 文件系统和挂载点。在 [Amazon VPC 控制台 IDs 中识别您的默认 VPC](https://console.aws.amazon.com/vpc/home#subnets:filter=default) 和子网。

1. 创建将文件包含在项目文件夹中的[源代码包](applications-sourcebundle.md)。以下命令将创建名为 `wordpress-beanstalk.zip` 的源包。

   ```
   ~/eb-wordpress$ zip ../wordpress-beanstalk.zip -r * .[^.]*
   ```

将源包上传到 Elastic Beanstalk WordPress 以部署到您的环境中。

**部署源包**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在环境概述页面上，选择 **Upload and deploy**（上传和部署）。

1. 使用屏幕上的对话框上传源包。

1. 选择 **Deploy**（部署）。

1. 部署完成后，选择站点 URL 以在新选项卡中打开您的网站。

## 安装 WordPress


**要完成 WordPress 安装**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 选择 URL 以便在浏览器中打开您的站点。您将被重定向到 WordPress 安装向导，因为您尚未配置该站点。

1. 执行标准安装。`wp-config.php` 文件在源代码中已存在，并配置为从环境中读取数据库连接信息。系统不会提示您配置连接。

安装大约需要一分钟能完成。

## 更新密钥和加密盐


 WordPress 配置文件`wp-config.php`还会从环境属性中读取键和盐的值。当前，这些属性全都被 `test` 文件夹中的 `wordpress.config` 文件设置为 `.ebextensions`。

哈希加密盐可以是符合[环境属性要求](environments-cfg-softwaresettings.md#environments-cfg-softwaresettings-console)的任意值，但不应将其存储在源代码控制中。使用 Elastic Beanstalk 控制台可直接针对环境设置这些属性。

**更新环境属性**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration**（配置）。

1. 在 **Software**（软件）下，选择 **Edit**（编辑）。

1. 对于 `Environment properties`，修改以下属性：
   + `AUTH_KEY` - 为 `AUTH_KEY` 选择的值。
   + `SECURE_AUTH_KEY` - 为 `SECURE_AUTH_KEY` 选择的值。
   + `LOGGED_IN_KEY` - 为 `LOGGED_IN_KEY` 选择的值。
   + `NONCE_KEY` - 为 `NONCE_KEY` 选择的值。
   + `AUTH_SALT` - 为 `AUTH_SALT` 选择的值。
   + `SECURE_AUTH_SALT` - 为 `SECURE_AUTH_SALT` 选择的值。
   + `LOGGED_IN_SALT` - 为 `LOGGED_IN_SALT` 选择的值。
   + `NONCE_SALT` - 为 `NONCE_SALT` 选择的值。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

**注意**  
直接对环境设置属性会覆盖 `wordpress.config` 的值。

## 删除访问限制


示例项目包括配置文件 `loadbalancer-sg.config`。它会使用您在 `dev.config` 中配置的 IP 地址创建安全组，并将其分配给环境的负载均衡器。它将端口 80 上的 HTTP 访问限制为来自您的网络的连接。否则，在您安装 WordPress 和配置管理员帐户之前，外部人员可能会连接到您的站点。

现在您已经安装完毕 WordPress，请删除配置文件以向全世界开放该站点。

**删除限制并更新环境**

1. 从项目目录中删除 `.ebextensions/loadbalancer-sg.config` 文件。

   ```
   ~/wordpress-beanstalk$ rm .ebextensions/loadbalancer-sg.config
   ```

1. 创建源包。

   ```
   ~/eb-wordpress$ zip ../wordpress-beanstalk-v2.zip -r * .[^.]*
   ```

将源包上传到 Elastic Beanstalk WordPress 以部署到您的环境中。

**部署源包**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在环境概述页面上，选择 **Upload and deploy**（上传和部署）。

1. 使用屏幕上的对话框上传源包。

1. 选择 **Deploy**（部署）。

1. 部署完成后，选择站点 URL 以在新选项卡中打开您的网站。

## 配置 Auto Scaling 组


最后，使用较高的最低实例计数配置您环境的 Auto Scaling 组。请始终运行至少两个实例，以防止您的环境中的 Web 服务器发生单点故障。这样，您还可以在不中断站点服务的情况下部署更改。

**配置您的环境的 Auto Scaling 组以获得高可用性**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration (配置)**。

1. 在 **Capacity (容量)** 配置类别中，选择 **Edit (编辑)**。

1. 在 **Auto Scaling group**（Auto Scaling 组）部分中，将 **Min instances**（最小实例数）设置为 **2**。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

为了支持多个实例中的内容上传，示例项目使用 Amazon EFS 来创建共享文件系统。在站点上创建一个帖子，然后上传内容以将其存储在共享文件系统上。查看帖子并多次刷新页面，以命中两个实例并验证共享文件系统是否正常工作。

## 升级 WordPress


要升级到的新版本 WordPress，请备份您的站点并将其部署到新环境。

**重要**  
请勿使用其中的更新功能， WordPress 也不要更新源文件以使用新版本。这两个操作都可能导致你的帖子 URLs 返回 404 错误，即使它们仍在数据库和文件系统中。

**要升级 WordPress**

1. 在 WordPress 管理员控制台中，使用导出工具将您的帖子导出到 XML 文件。

1. 使用与安装先前版本相同的步骤在 Elastic Beanstalk 上部署和安装新版本。 WordPress 要避免停机，您可以使用新版本创建环境。

1. 在新版本中，在管理员控制台中安装导入 WordPress 器工具，然后使用它来导入包含您的帖子的 XML 文件。如果文章由使用旧版本的管理员用户创建，请将文章分配到新站点上的管理员用户而不是尝试导入管理员用户。

1. 如果您将新版本部署到单独的环境，请执行 [CNAME 交换 ](using-features.CNAMESwap.md) 以将用户从旧站点重定向到新站点。

## 清理


演示代码使用完毕后，您可以终止环境。[Elastic Beanstalk 会删除 AWS 所有相关资源，[例如 EC2 亚马逊](using-features.managing.ec2.md)[实例、数据库实例、](using-features.managing.db.md)负载均衡器[、安全组](using-features.managing.elb.md)和警报。](using-features.alarms.md#using-features.alarms.title)

移除资源不会删除 Elastic Beanstalk 应用程序，因此您可以随时为您的应用程序创建新环境。

**从控制台终止 Elastic Beanstalk 环境**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 选择 **Actions**（操作），然后选择 **Terminate environment**（终止环境）。

1. 使用屏幕上的对话框确认环境终止。

此外，您还可以终止在您的 Elastic Beanstalk 环境外部创建的数据库资源。当您终止 Amazon RDS 数据库实例时，可以拍摄快照并在以后将数据恢复到其他实例。

**终止您的 RDS 数据库实例**

1. 打开 [Amazon RDS 控制台](https://console.aws.amazon.com/rds)。

1. 选择 **Databases**（数据库）。

1. 选择您的数据库实例。

1. 选择**操作**，然后选择**删除**。

1. 选择是否创建快照，然后选择**删除**。

## 后续步骤


当您继续开发应用程序时，您可能希望通过某种方式来管理环境和部署应用程序，而无需手动创建 .zip 文件并将该文件上传到 Elastic Beanstalk 控制台。[Elastic Beanstalk 命令行](eb-cli3.md)界面 (EB CLI easy-to-use) 提供了从命令行创建、配置应用程序并将其部署到 Elastic Beanstalk 环境的命令。

示例应用程序使用配置文件配置 PHP 设置，并在数据库中创建一个表 (如果尚未存在)。您还可以使用配置文件在环境创建期间配置实例的安全组设置，以避免耗时的配置更新。请参阅[使用配置文件 (`.ebextensions`) 进行高级环境自定义](ebextensions.md)了解更多信息。

对于开发和测试，您可能希望使用 Elastic Beanstalk 的用于将托管数据库实例直接添加到环境的功能。有关在环境内设置数据库的说明，请参阅[将数据库添加到 Elastic Beanstalk 环境](using-features.managing.db.md)。

如果您需要高性能数据库，请考虑使用 [Amazon Aurora](https://aws.amazon.com/rds/aurora/)。Amazon Aurora 是与 MySQL 兼容的数据库引擎，能够以低成本提供商用数据库功能。要将您的应用程序连接到另一个数据库，请重复执行[安全组配置](php-ha-tutorial.md#php-hawrds-tutorial-database)步骤并[更新与 RDS 相关的环境属性](php-ha-tutorial.md#php-hawrds-tutorial-configure)。

最后，如果计划在生产环境中使用应用程序，您会希望为环境[配置自定义域名](customdomains.md)，并为安全连接[启用 HTTPS](configuring-https.md)。

# 将带有外部 Amazon RDS 数据库的高可用性 Drupal 网站部署到 Elastic Beanstalk
教程 – 高可用性 Drupal

本教程将引导您完成在[外部启动 RDS 数据库实例](AWSHowTo.RDS.md)的过程 AWS Elastic Beanstalk。然后，它介绍了配置运行 Drupal 网站的高可用性环境以连接到该数据库实例。该网站使用 Amazon Elastic File System (Amazon EFS) 作为已上传文件的共享存储空间。在 Elastic Beanstalk 之外运行数据库实例会将数据库与环境生命周期分离，并允许您从多个环境连接到同一个数据库，将一个数据库换成另一个数据库，或者在不影响数据库的情况下 blue/green 执行部署。

**Topics**
+ [

## 先决条件
](#php-hadrupal-tutorial-prereqs)
+ [

## 在 Amazon RDS 中启动数据库实例
](#php-hadrupal-tutorial-database)
+ [

## 启动 Elastic Beanstalk 环境
](#php-hadrupal-tutorial-launch)
+ [

## 配置安全设置和环境属性
](#php-hadrupal-tutorial-configure)
+ [

## 配置并部署您的应用程序
](#php-hadrupal-tutorial-deploy)
+ [

## 安装 Drupal
](#php-hadrupal-tutorial-install)
+ [

## 更新 Drupal 配置并删除访问限制
](#php-hadrupal-tutorial-updateenv)
+ [

## 配置 Auto Scaling 组
](#php-hadrupal-tutorial-autoscaling)
+ [

## 清理
](#php-hadrupal-tutorial-cleanup)
+ [

## 后续步骤
](#php-hadrupal-tutorial-nextsteps)

## 先决条件


本教程假设您对基本 Elastic Beanstalk 操作和 Elastic Beanstalk 控制台有一定了解。如果尚不了解，请按照[了解如何开始使用 Elastic Beanstalk](GettingStarted.md)中的说明操作以启动您的第一个 Elastic Beanstalk 环境。

为了遵循本指南中的步骤，您需要命令行终端或 Shell，以便运行命令。命令显示在列表中，以提示符（\$1）和当前目录名称（如果有）开头。

```
~/eb-project$ this is a command
this is output
```

在 Linux 和 macOS 中，您可使用您首选的 Shell 和程序包管理器。在 Windows 上，您可以[安装适用于 Linux 的 Windows 子系统](https://docs.microsoft.com/en-us/windows/wsl/install-win10)，以获取与 Windows 集成的 Ubuntu 和 Bash 版本。

本教程中针对 Amazon Relational Database Service (Amazon RDS) 任务的过程假定您正在默认的 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/) (Amazon VPC) 中启动资源。所有新账户在每个区域中均包含一个默认 VPC。如果您没有默认 VPC，则这些过程将会发生变化。[将 Elastic Beanstalk 和 Amazon RDS 结合使用](AWSHowTo.RDS.md)有关 EC2经典和自定义 VPC 平台的说明，请参阅。

此示例应用程序使用 Amazon EFS。它仅适用于支持 Amazon EFS 的 AWS 区域。要了解有关支持 AWS 区域的信息，请参阅中的 [Amazon Elastic File System 终端节点和配额*AWS 一般参考*](https://docs.aws.amazon.com/general/latest/gr/elasticfilesystem.html)。

如果您的 Elastic Beanstalk 环境的平台使用 PHP 7.4 或更早版本，我们建议您在本教程中使用 Drupal 8.9.13 版本。对于安装有 PHP 8.0 或更高版本的平台，我们建议您使用 Drupal 9.1.5。

有关 Drupal 版本及其支持的 PHP 版本的更多信息，请参阅 Drupal 网站上的 [PHP 要求](https://www.drupal.org/docs/system-requirements/php-requirements#php_required)。Drupal 推荐的核心版本已在 [https://www.drupal 网站上列出。 org/project/drupal](https://www.drupal.org/project/drupal)。

## 在 Amazon RDS 中启动数据库实例


要将外部数据库与在 Elastic Beanstalk 中运行的应用程序结合使用，请首先使用 Amazon RDS 启动数据库实例。当您使用 Amazon RDS 启动实例时，它完全独立于 Elastic Beanstalk 和您的 Elastic Beanstalk 环境，并且不会由 Elastic Beanstalk 终止或监控。

使用 Amazon RDS 控制台可启动多可用区 **MySQL** 数据库实例。选择多可用区部署可确保您的数据库将进行故障转移并在源数据库实例中断服务时继续可用。

**在默认 VPC 中启动 RDS 数据库实例**

1. 打开 [RDS 控制台](https://console.aws.amazon.com/rds/home)。

1. 在导航窗格中，选择 **Databases**（数据库）。

1. 选择**创建数据库**。

1. 选择 **Standard Create**（标准创建）。
**重要**  
请勿选择 **Easy Create**（轻松创建）。如果您选择它，您将无法配置启动此 RDS 数据库所需的设置。

1. 在 **Additional configuration**（附加配置）下，对于 **Initial database name**（初始数据库名称），键入 **ebdb**。

1. 请查看默认设置并根据您的具体要求调整这些设置。请注意以下选项：
   + **DB instance class**（数据库实例类）– 选择对于您的工作负载具有适当的内存量和 CPU 能力的实例大小。
   + **多可用区部署** — 为了获得高可用性，请将其设置为在**不同的可用区中创建 Aurora Replica/Reader 节点**。
   + **Master username**（主用户名）和 **Master password**（主密码）– 数据库用户名和密码。请记下这些设置，因为您以后将使用这些值。

1. 验证其余选项的默认设置，然后选择 **Create database**（创建数据库）。

接下来，修改附加到数据库实例的安全组以允许相应的端口上的入站流量。这与您稍后要附加到 Elastic Beanstalk 环境的安全组相同，因此您添加的规则将向同一安全组中的其他资源授予入口流量权限。

**修改附加到 RDS 实例的安全组上的入站规则**

1. 打开 [Amazon RDS 控制台](https://console.aws.amazon.com/rds/home)。

1. 选择 **Databases**（数据库）。

1. 选择您的数据库实例的名称以查看其详细信息。

1. 在**连接**部分中，记下在该页上显示的**子网**、**安全组**和**端点**。这样您稍后可以使用这些信息。

1. 在 **Security**（安全性）下面，您可以查看与数据库实例关联的安全组。打开链接，在 Amazon EC2 控制台中查看安全组。

1. 在安全组详细信息中，选择 **Inbound**（入站）选项卡。

1. 选择 **Edit**（编辑）。

1. 选择 **Add Rule**（添加规则）。

1. 对于 **Type**（类型），请选择应用程序使用的数据库引擎。

1. 对于 **Source**（源），键入 **sg-** 以查看可用安全组的列表。请选择 Elastic Beanstalk 环境中使用的与 Auto Scaling 组关联的安全组。这样，环境中的 Amazon EC2 实例就可以访问数据库。  
![\[用于在 Amazon EC2 控制台中编辑安全组入站规则的屏幕图像。\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/ec2-securitygroup-rds.png)

1. 选择**保存**。

创建一个数据库实例大约需要 10 分钟。同时，启动您的 Elastic Beanstalk 环境。

## 启动 Elastic Beanstalk 环境


使用 Elastic Beanstalk 控制台创建 Elastic Beanstalk 环境。选择 **PHP** 平台并接受默认设置和示例代码。在启动环境后，可以配置环境以连接到数据库，然后将 Drupal 代码部署到环境。

**启动环境（控制台）**

1. [使用以下预配置链接打开 Elastic Beanstalk 控制台：console.aws.amazon。 com/elasticbeanstalk/home\$1/newApplication？ 应用程序名称=教程&环境类型= LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced)

1. 对于 **Platform**（平台），选择与应用程序使用的语言匹配的平台和平台分支。

1. 对于**应用程序代码**，选择**示例应用程序**。

1. 选择**复查并启动**。

1. 检查可用选项。选择要使用的可用选项，然后在准备就绪后选择**创建应用程序**。

环境创建大约需要 5 分钟，将创建以下资源：
+ **EC2 实例** — 配置为在您选择的平台上运行 Web 应用程序的亚马逊弹性计算云 (Amazon EC2) 虚拟机。

  各平台运行一组特定软件、配置文件和脚本以支持特定的语言版本、框架、Web 容器或其组合。大多数平台使用 Apache 或 NGINX 作为 Web 应用程序前的反向代理，向其转发请求、提供静态资产以及生成访问和错误日志。
+ **实例安全组** — 配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。此资源允许来自负载均衡器的 HTTP 流量到达运行您的 Web 应用程序的 EC2 实例。默认情况下，其他端口不允许流量进入。
+ **负载均衡器** – 配置为向运行您的应用程序的实例分配请求的 Elastic Load Balancing 负载均衡器。负载均衡器还使您无需将实例直接公开在 Internet 上。
+ **负载均衡器安全组**-配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。利用此资源，HTTP 流量可从 Internet 到达负载均衡器。默认情况下，其他端口不允许流量进入。
+ **Auto Scaling 组** – 配置为在实例终止或不可用时替换实例的 Auto Scaling 组。
+ **Amazon S3 存储桶** – 使用 Elastic Beanstalk 时创建的源代码、日志和其他构件的存储位置。
+ **Amazon CloudWatch CloudWatch 警**报 — 两个警报，用于监控环境中实例的负载，并在负载过高或过低时触发。警报触发后，您的 Auto Scaling 组会扩展或收缩以进行响应。
+ **CloudFormation 堆栈** — Elastic CloudFormation Beanstalk 用于在您的环境中启动资源并传播配置更改。这些资源在您可通过 [CloudFormation 控制台](https://console.aws.amazon.com/cloudformation)查看的模板中定义。
+ **域名**-以表单形式路由到您的 Web 应用程序的域名**subdomain*。 *region*.elasticbeanstalk.com。*
**域安全**  
为增强 Elastic Beanstalk 应用程序的安全性，已将 *elasticbeanstalk.com* 域注册到 [公共后缀列表（PSL）](https://publicsuffix.org/)。  
如果您需要在 Elastic Beanstalk 应用程序的默认域名中设置敏感 Cookie，我们建议您使用带有前缀 `__Host-` 的 Cookie 来提高安全性。这种做法可以保护您的域免遭跨站点请求伪造（CSRF）攻击。要了解更多信息，请参阅 Mozilla 开发者网络中的 [Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) 页面。

所有这些资源都由 Elastic Beanstalk 管理。当您终止环境时，Elastic Beanstalk 会终止其包含的所有资源。您启动的 RDS 数据库实例位于您的环境之外，因此您需负责管理其生命周期。

**注意**  
Elastic Beanstalk 创建的 Amazon S3 存储桶将在多个环境之间共享并且在环境终止期间不会被删除。有关更多信息，请参阅 [将 Elastic Beanstalk 和 Amazon S3 结合使用](AWSHowTo.S3.md)。

## 配置安全设置和环境属性


将数据库实例的安全组添加到正在运行的环境。此过程将使 Elastic Beanstalk 使用附加的其他安全组重新配置环境中的所有实例。

**向环境添加安全组**
+ 请执行以下操作之一：
  + 使用 Elastic Beanstalk 控制台添加安全组

    1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

    1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

    1. 在导航窗格中，选择 **Configuration**（配置）。

    1. 在 **Instances**（实例）配置类别中，选择 **Edit**（编辑）。

    1. 在**EC2 安全组**下，除了 Elastic Beanstalk 创建的实例安全组外，还要选择要附加到实例的安全组。

    1. 要保存更改，请选择页面底部的 **Apply**（应用）。

    1. 阅读警告，然后选择 **Confirm**（确认）。
  + 要使用[配置文件](ebextensions.md)添加安全组，请使用 [https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config) 示例文件。

接下来，使用环境属性将连接信息传递给环境。示例应用程序使用了默认的一组属性，这些属性与您在环境中预置数据库时 Elastic Beanstalk 配置的属性匹配。

**为 Amazon RDS 数据库实例配置环境属性**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration**（配置）。

1. 在 **Updates, monitoring, and logging**（更新、监控和日志记录）配置类别中，选择 **Edit**（编辑）。

1. 在**环境属性**部分中，定义应用程序读取的用于构建连接字符串的变量。为了实现与具有集成 RDS 数据库实例的环境的兼容，请使用以下名称和值。您可以在 [RDS 控制台](https://console.aws.amazon.com/rds/home)中找到除密码以外的所有值。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/php-hadrupal-tutorial.html)  
![\[添加了 RDS 属性的环境属性配置部分\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/environment-cfg-envprops-rds.png)

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

安装 Drupal 后，您需要使用 SSH 连接到实例，以检索某些配置详细信息。将 SSH 密钥分配给环境的实例。

**配置 SSH**

1. 如果您之前没有创建过密钥对，请打开亚马逊 EC2控制台的[密钥对页面](https://console.aws.amazon.com/ec2/v2/home#KeyPairs)，然后按照说明创建密钥对。

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration**（配置）。

1. 在 **Security**（安全性）下，选择 **Edit**（编辑）。

1. 对于**EC2 密钥对**，请选择您的密钥对。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

## 配置并部署您的应用程序


[要为 Elastic Beanstalk 创建 Drupal 项目，请下载 Drupal 源代码并将其与 aws-samples/ 存储库中的文件合并。eb-php-drupal](https://github.com/aws-samples/eb-php-drupal) GitHub

**创建 Drupal 项目**

1. 运行以下命令从 *www.drupal.org/download* 下载 Drupal。要了解有关下载的更多信息，请参阅 [Drupal 网站](https://www.drupal.org/download)。

   如果您的 Elastic Beanstalk 环境的平台使用 PHP 7.4 或更早版本，我们建议您在本教程中下载 Drupal 8.9.13 版本。您可以运行以下命令下载该版本。

   ```
   ~$ curl https://ftp.drupal.org/files/projects/drupal-8.9.13.tar.gz -o drupal.tar.gz
   ```

   如果您的平台使用 PHP 8.0 或更高版本，我们建议您下载 Drupal 9.1.5。您可以使用此命令下载它。

   ```
   ~$ curl https://ftp.drupal.org/files/projects/drupal-9.1.5.tar.gz -o drupal.tar.gz
   ```

   有关 Drupal 版本及其支持的 PHP 版本的更多信息，请参阅 Drupal 官方文档中的 [PHP 要求](https://www.drupal.org/docs/system-requirements/php-requirements#php_required)。Drupal 推荐的核心版本已在 [Drupal 网站](https://www.drupal.org/project/drupal)上列出。

1. 使用以下命令从示例存储库中下载配置文件：

   ```
   ~$ wget https://github.com/aws-samples/eb-php-drupal/releases/download/v1.1/eb-php-drupal-v1.zip
   ```

1. 提取 Drupal 并更改文件夹的名称。

   如果您已下载 Drupal 8.9.13：

   ```
    ~$ tar -xvf drupal.tar.gz
    ~$ mv drupal-8.9.13 drupal-beanstalk
    ~$ cd drupal-beanstalk
   ```

   如果您已下载 Drupal 9.1.5：

   ```
    ~$ tar -xvf drupal.tar.gz
    ~$ mv drupal-9.1.5 drupal-beanstalk
    ~$ cd drupal-beanstalk
   ```

1. 从 Drupal 安装中提取配置文件。

   ```
    ~/drupal-beanstalk$ unzip ../eb-php-drupal-v1.zip
     creating: .ebextensions/
     inflating: .ebextensions/dev.config
     inflating: .ebextensions/drupal.config
     inflating: .ebextensions/efs-create.config
     inflating: .ebextensions/efs-filesystem.template
     inflating: .ebextensions/efs-mount.config
     inflating: .ebextensions/loadbalancer-sg.config
     inflating: LICENSE
     inflating: README.md
     inflating: beanstalk-settings.php
   ```

验证您的 `drupal-beanstalk` 文件夹结构是否正确，如下所示。

```
drupal-beanstalk$ tree -aL 1
.
├── autoload.php
├── beanstalk-settings.php
├── composer.json
├── composer.lock
├── core
├── .csslintrc
├── .ebextensions
├── .ebextensions
├── .editorconfig
├── .eslintignore
├── .eslintrc.json
├── example.gitignore
├── .gitattributes
├── .htaccess
├── .ht.router.php
├── index.php
├── LICENSE
├── LICENSE.txt
├── modules
├── profiles
├── README.md
├── README.txt
├── robots.txt
├── sites
├── themes
├── update.php
├── vendor
└── web.config
```

项目存储库中的 `beanstalk-settings.php` 文件使用您在上一步中定义的环境变量来配置数据库连接。`.ebextensions` 文件夹包含用于在您的 Elastic Beanstalk 环境中创建其他资源的配置文件。

该配置文件要求您进行修改以使用账户。将文件中的占位符值替换为相应的值， IDs 然后创建源包。

**更新配置文件并创建源代码包。**

1. 按如下方式修改配置文件。
   + `.ebextensions/dev.config` - 将对您的环境的访问限制为您的 IP 地址，以便在 Drupal 安装过程中保护环境。将靠近文件顶部的占位符 IP 地址替换为您的公有 IP 地址。
   + `.ebextensions/efs-create.config` - 在您的 VPC 中的每个可用区/子网中创建 EFS 文件系统和装载点。在 [Amazon VPC 控制台 IDs 中识别您的默认 VPC](https://console.aws.amazon.com/vpc/home#subnets:filter=default) 和子网。

1. 创建将文件包含在项目文件夹中的[源代码包](applications-sourcebundle.md)。以下命令将创建名为 `drupal-beanstalk.zip` 的源包。它将排除 `vendor` 文件夹中的文件，因为这些文件会占用大量空间并且对于将您的应用程序部署到 Elastic Beanstalk 不是必需的。

   ```
   ~/eb-drupal$ zip ../drupal-beanstalk.zip -r * .[^.]* -x "vendor/*"
   ```

将源包上传到 Elastic Beanstalk 以将 Drupal 部署到您的环境。

**部署源包**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在环境概述页面上，选择 **Upload and deploy**（上传和部署）。

1. 使用屏幕上的对话框上传源包。

1. 选择 **Deploy**（部署）。

1. 部署完成后，选择站点 URL 以在新选项卡中打开您的网站。

## 安装 Drupal


**完成 Drupal 安装**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 选择 URL 以便在浏览器中打开您的站点。您将会重定向到 Drupal 安装向导，因为该站点还未配置。

1. 执行具有以下数据库设置的标准安装：
   + **数据库名称** - Amazon RDS 控制台中显示的**数据库名称**。
   + **数据库用户名和密码** - 您在创建数据库时输入的**主用户名**和**主密码**值。
   + **高级选项 > 主机** - 在 Amazon RDS 控制台中显示的数据库实例的**终端节点**。

安装大约需要一分钟能完成。

## 更新 Drupal 配置并删除访问限制


Drupal 安装过程将在实例上的 `settings.php` 文件夹中创建一个名为 `sites/default` 的文件。您的源代码中需要此文件来避免在后续部署中重置您的站点，但该文件当前包含了您不希望提交到源的密钥。连接到应用程序实例以从设置文件中检索信息。

**使用 SSH 连接到应用程序实例**

1. 打开 Amazon EC2 控制台的[实例页面](https://console.aws.amazon.com/ec2/v2/home#Instances:sort=tag:Name)。

1. 选择应用程序实例。它是以您的 Elastic Beanstalk 环境命名的实例。

1. 选择**连接**。

1. 按照以下说明将实例与 SSH 连接。该命令看上去类似以下内容。

   ```
   $ ssh -i ~/.ssh/mykey ec2-user@ec2-00-55-33-222.us-west-2.compute.amazonaws.com
   ```

从最后一行设置文件中获取同步目录 ID。

```
[ec2-user ~]$ tail -n 1 /var/app/current/sites/default/settings.php
$config_directories['sync'] = 'sites/default/files/config_4ccfX2sPQm79p1mk5IbUq9S_FokcENO4mxyC-L18-4g_xKj_7j9ydn31kDOYOgnzMu071Tvc4Q/sync';
```

该文件还包含站点的当前哈希键，但您可以忽略当前值并使用您自己的值。

将同步目录路径和哈希键分配到环境属性。项目存储库中的自定义设置文件将读取这些属性以便在部署期间配置站点，并读取您之前设置的数据库连接属性。

**Drupal 配置属性**
+ `SYNC_DIR` - 同步目录的路径。
+ `HASH_SALT` - 符合[环境属性要求](environments-cfg-softwaresettings.md#environments-cfg-softwaresettings-console)的任何字符串值。

**在 Elastic Beanstalk 控制台中配置环境变量**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration**（配置）。

1. 在 **Updates, monitoring, and logging**（更新、监控和日志记录）配置类别中，选择 **Edit**（编辑）。

1. 向下滚动到**运行时环境变量**。

1. 选择**添加环境变量**。

1. 对于**来源**，选择**纯文本**。
**注意**  
下拉列表中的 **Secrets Manager** 和 **SSM Parameter Store** 值用于将环境变量配置为用于存储敏感数据（例如凭证和 API 密钥）的密钥。有关更多信息，请参阅 [将 Elastic B AWS Secrets Manager ean AWS Systems Manager stalk 与参数存储和参数存储一起使用](AWSHowTo.secrets.md)。

1. 输入**环境变量名称**和**环境变量值**对。

1. 如需添加更多变量，请重复**步骤 6** 至**步骤 8**。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

最后，示例项目包含一个创建安全组并将其分配给环境负载均衡器的配置文件 (`loadbalancer-sg.config`)，使用您在 `dev.config` 中配置的 IP 地址将端口 80 上的 HTTP 访问限制为来自您的网络的连接。否则，在您安装 Drupal 并配置您的管理员账户之前，外部方可能连接到您的站点。

**更新 Drupal 的配置并删除访问限制**

1. 从项目目录中删除 `.ebextensions/loadbalancer-sg.config` 文件。

   ```
   ~/drupal-beanstalk$ rm .ebextensions/loadbalancer-sg.config
   ```

1. 将自定义 `settings.php` 文件复制到站点文件夹中。

   ```
   ~/drupal-beanstalk$ cp beanstalk-settings.php sites/default/settings.php
   ```

1. 创建源包。

   ```
   ~/eb-drupal$ zip ../drupal-beanstalk-v2.zip -r * .[^.]* -x "vendor/*"
   ```

将源包上传到 Elastic Beanstalk 以将 Drupal 部署到您的环境。

**部署源包**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在环境概述页面上，选择 **Upload and deploy**（上传和部署）。

1. 使用屏幕上的对话框上传源包。

1. 选择 **Deploy**（部署）。

1. 部署完成后，选择站点 URL 以在新选项卡中打开您的网站。

## 配置 Auto Scaling 组


最后，使用较高的最低实例计数配置您环境的 Auto Scaling 组。请始终至少运行两个实例，以防止您环境中的 Web 服务器发生单点故障，并支持您在不中断站点服务的情况下部署更改。

**配置您的环境的 Auto Scaling 组以获得高可用性**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration (配置)**。

1. 在 **Capacity (容量)** 配置类别中，选择 **Edit (编辑)**。

1. 在 **Auto Scaling group**（Auto Scaling 组）部分中，将 **Min instances**（最小实例数）设置为 **2**。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

为了支持多个实例中的内容上传，示例项目使用 Amazon Elastic File System 来创建共享文件系统。在站点上创建一个帖子，然后上传内容以将其存储在共享文件系统上。查看帖子并多次刷新页面，以命中两个实例并验证共享文件系统是否正常工作。

## 清理


演示代码使用完毕后，您可以终止环境。[Elastic Beanstalk 会删除 AWS 所有相关资源，[例如 EC2 亚马逊](using-features.managing.ec2.md)[实例、数据库实例、](using-features.managing.db.md)负载均衡器[、安全组](using-features.managing.elb.md)和警报。](using-features.alarms.md#using-features.alarms.title)

移除资源不会删除 Elastic Beanstalk 应用程序，因此您可以随时为您的应用程序创建新环境。

**从控制台终止 Elastic Beanstalk 环境**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 选择 **Actions**（操作），然后选择 **Terminate environment**（终止环境）。

1. 使用屏幕上的对话框确认环境终止。

此外，您还可以终止在您的 Elastic Beanstalk 环境外部创建的数据库资源。当您终止 Amazon RDS 数据库实例时，可以拍摄快照并在以后将数据恢复到其他实例。

**终止您的 RDS 数据库实例**

1. 打开 [Amazon RDS 控制台](https://console.aws.amazon.com/rds)。

1. 选择 **Databases**（数据库）。

1. 选择您的数据库实例。

1. 选择**操作**，然后选择**删除**。

1. 选择是否创建快照，然后选择**删除**。

## 后续步骤


当您继续开发应用程序时，您可能希望通过某种方式来管理环境和部署应用程序，而无需手动创建 .zip 文件并将该文件上传到 Elastic Beanstalk 控制台。[Elastic Beanstalk 命令行](eb-cli3.md)界面 (EB CLI easy-to-use) 提供了从命令行创建、配置应用程序并将其部署到 Elastic Beanstalk 环境的命令。

示例应用程序使用配置文件配置 PHP 设置并在数据库中创建表 (如果表尚未存在)。您还可以使用配置文件在环境创建期间配置实例的安全组设置，以避免耗时的配置更新。请参阅[使用配置文件 (`.ebextensions`) 进行高级环境自定义](ebextensions.md)了解更多信息。

对于开发和测试，您可能希望使用 Elastic Beanstalk 的用于将托管数据库实例直接添加到环境的功能。有关在环境内设置数据库的说明，请参阅[将数据库添加到 Elastic Beanstalk 环境](using-features.managing.db.md)。

如果您需要高性能数据库，请考虑使用 [Amazon Aurora](https://aws.amazon.com/rds/aurora/)。Amazon Aurora 是与 MySQL 兼容的数据库引擎，能够以低成本提供商用数据库功能。要将您的应用程序连接到另一个数据库，请重复执行[安全组配置](php-ha-tutorial.md#php-hawrds-tutorial-database)步骤并[更新与 RDS 相关的环境属性](php-ha-tutorial.md#php-hawrds-tutorial-configure)。

最后，如果计划在生产环境中使用应用程序，您会希望为环境[配置自定义域名](customdomains.md)，并为安全连接[启用 HTTPS](configuring-https.md)。