使用 PHP 平台 - AWS App Runner

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

使用 PHP 平台

P AWS App Runner HP 平台提供托管运行时。您可以使用每个运行时来构建和运行带有基于 PHP 版本的 Web 应用程序的容器。当你使用 PHP 运行时时,App Runner 从托管的 PHP 运行时镜像开始。此镜像基于 Amazon Linux Docker 镜像,包含一个 PHP 版本的运行时包和一些工具。App Runner 使用此托管运行时映像作为基础映像,并添加您的应用程序代码来构建 Docker 映像。然后,它会部署此映像以在容器中运行您的 Web 服务。

在使用 App Runner 控制台或 CreateServiceAPI 操作创建服务时,可以为 App Runner 服务指定运行时。您也可以将运行时指定为源代码的一部分。在包含在代码存储库中的 A pp Runner 配置文件中使用runtime关键字。托管运行时的命名约定是 <language-name><major-version>

有关有效的 PHP 运行时名称和版本,请参见PHP 运行时版本信息

每次部署或服务更新时,App Runner 都会将服务的运行时更新到最新版本。如果您的应用程序需要托管运行时的特定版本,则可以使用 App Runner 配置文件中的runtime-version关键字进行指定。您可以锁定到任何级别的版本,包括主要版本或次要版本。App Runner 仅对服务的运行时进行较低级别的更新。

PHP 运行时的版本语法:major[.minor[.patch]]

例如:8.1.10

以下是版本锁定的示例:

  • 8.1— 锁定主要版本和次要版本。App Runner 仅更新补丁版本。

  • 8.1.10— 锁定到特定的补丁版本。App Runner 不会更新你的运行时版本。

重要

如果您想将 App Runner 服务的代码存储库源目录指定到默认存储库根目录以外的位置,则您的 PHP 托管运行时版本必须是 PHP 8.1.22 或更高版本。之前的 PHP 运行时版本8.1.22只能使用默认的根源目录。

PHP 运行时配置

选择托管运行时时,还必须至少配置生成和运行命令。您可以在创建更新 App Runner 服务时对其进行配置。您可以使用以下方法之一来执行此操作:

  • 使用 App Runner 控制台-在创建过程或配置选项卡的 “配置构建” 部分中指定命令。

  • 使用 App Runner API — 调用CreateServiceUpdateServiceAPI 操作。使用CodeConfigurationValues数据类型的BuildCommandStartCommand成员来指定命令。

  • 使用配置文件-在最多三个构建阶段中指定一个或多个构建命令,并指定一个用于启动应用程序的运行命令。还有其他可选的配置设置。

提供配置文件是可选的。使用控制台或 API 创建 App Runner 服务时,您可以指定 App Runner 是在创建时直接获取配置设置还是从配置文件中获取配置设置。

兼容性

您可以使用以下 Web 服务器之一在 PHP 平台上运行 App Runner 服务:

  • Apache HTTP Server

  • NGINX

Apache HTTP ServerNGINX并且与 PHP-FPM 兼容。您可以使用以下任一方法NGINX来启动Apache HTTP Server和:

有关如何使用 Ap ache HTTP 服务器或 NGINX 在 PHP 平台上配置 App Runn er 服务的示例,请参阅。完整的 PHP 应用程序源码

文件结构

index.php必须安装在 Web 服务器root目录下的public文件夹中。

注意

我们建议将startup.shsupervisord.conf文件存储在 Web 服务器的根目录中。确保该start命令指向存储startup.shsupervisord.conf文件的位置。

如果您正在使用,以下是文件结构的示例supervisord

/ ├─ public/ │ ├─ index.php ├─ apprunner.yaml ├─ supervisord.conf

以下是使用启动脚本时的文件结构示例。

/ ├─ public/ │ ├─ index.php ├─ apprunner.yaml ├─ startup.sh

我们建议您将这些文件结构存储在为 App Runner 服务指定的代码存储库源目录中

/<sourceDirectory>/ ├─ public/ │ ├─ index.php ├─ apprunner.yaml ├─ startup.sh
重要

如果您想将 App Runner 服务的代码存储库源目录指定到默认存储库根目录以外的位置,则您的 PHP 托管运行时版本必须是 PHP 8.1.22 或更高版本。之前的 PHP 运行时版本8.1.22只能使用默认的根源目录。

每次部署或服务更新时,App Runner 都会将服务的运行时更新到最新版本。默认情况下,您的服务将使用最新的运行时,除非您在 App Runner 配置文件中使用runtime-version关键字指定版本锁定。

PHP 运行时示例

以下是用于构建和运行 PHP 服务的 App Runner 配置文件的示例。

以下示例是可以与 PHP 托管运行时一起使用的最小配置文件。有关最小配置文件的更多信息,请参阅配置文件示例

例 apprunner.yaml
version: 1.0 runtime: php81 build: commands: build: - echo example build command for PHP run: command: ./startup.sh

以下示例使用了 PHP 托管运行时的所有配置密钥。

注意

这些示例中使用的运行时版本是 8.1.10。您可以将其替换为要使用的版本。有关支持的最新的 PHP 运行时版本,请参阅PHP 运行时版本信息

例 apprunner.yaml
version: 1.0 runtime: php81 build: commands: pre-build: - scripts/prebuild.sh build: - echo example build command for PHP post-build: - scripts/postbuild.sh env: - name: MY_VAR_EXAMPLE value: "example" run: runtime-version: 8.1.10 command: ./startup.sh network: port: 5000 env: APP_PORT env: - name: MY_VAR_EXAMPLE value: "example"

以下示例是 PHP 应用程序源代码,您可以使用这些源代码通过Apache HTTP Server或将其部署到 PHP 运行时服务NGINX。这些示例假设您使用默认文件结构。

Apache HTTP Server使用运行 PHP 平台 supervisord

例 文件结构
注意
  • supervisord.conf文件可以存储在存储库中的任何地方。确保该start命令指向supervisord.conf文件的存储位置。

  • index.php必须安装在root目录下的public文件夹中。

/ ├─ public/ │ ├─ index.php ├─ apprunner.yaml ├─ supervisord.conf
例 superisord.conf
[supervisord] nodaemon=true [program:httpd] command=httpd -DFOREGROUND autostart=true autorestart=true stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 [program:php-fpm] command=php-fpm -F autostart=true autorestart=true stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0
例 apprunner.yaml
version: 1.0 runtime: php81 build: commands: build: - PYTHON=python2 amazon-linux-extras install epel - yum -y install supervisor run: command: supervisord network: port: 8080 env: APP_PORT
例 index.php
<html> <head> <title>First PHP App</title> </head> <body> <?php print("Hello World!"); print("<br>"); ?> </body> </html>

Apache HTTP Server使用运行 PHP 平台 startup script

例 文件结构
注意
  • startup.sh文件可以存储在存储库中的任何地方。确保该start命令指向startup.sh文件的存储位置。

  • index.php必须安装在root目录下的public文件夹中。

/ ├─ public/ │ ├─ index.php ├─ apprunner.yaml ├─ startup.sh
例 startup.sh
#!/bin/bash set -o monitor trap exit SIGCHLD # Start apache httpd -DFOREGROUND & # Start php-fpm php-fpm -F & wait
注意
  • 在将startup.sh文件提交到 Git 存储库之前,请务必将其保存为可执行文件。chmod +x startup.sh用于为您的startup.sh文件设置执行权限。

  • 如果未将startup.sh文件另存为可执行文件,请在apprunner.yaml文件中以build命令chmod +x startup.sh形式输入。

例 apprunner.yaml
version: 1.0 runtime: php81 build: commands: build: - echo example build command for PHP run: command: ./startup.sh network: port: 8080 env: APP_PORT
例 index.php
<html> <head> <title>First PHP App</title> </head> <body> <?php print("Hello World!"); print("<br>"); ?> </body> </html>

NGINX使用运行 PHP 平台 supervisord

例 文件结构
注意
  • supervisord.conf文件可以存储在存储库中的任何地方。确保该start命令指向supervisord.conf文件的存储位置。

  • index.php必须安装在root目录下的public文件夹中。

/ ├─ public/ │ ├─ index.php ├─ apprunner.yaml ├─ supervisord.conf
例 superisord.conf
[supervisord] nodaemon=true [program:nginx] command=nginx -g "daemon off;" autostart=true autorestart=true stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 [program:php-fpm] command=php-fpm -F autostart=true autorestart=true stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0
例 apprunner.yaml
version: 1.0 runtime: php81 build: commands: build: - PYTHON=python2 amazon-linux-extras install epel - yum -y install supervisor run: command: supervisord network: port: 8080 env: APP_PORT
例 index.php
<html> <head> <title>First PHP App</title> </head> <body> <?php print("Hello World!"); print("<br>"); ?> </body> </html>

NGINX使用运行 PHP 平台 startup script

例 文件结构
注意
  • startup.sh文件可以存储在存储库中的任何地方。确保该start命令指向startup.sh文件的存储位置。

  • index.php必须安装在root目录下的public文件夹中。

/ ├─ public/ │ ├─ index.php ├─ apprunner.yaml ├─ startup.sh
例 startup.sh
#!/bin/bash set -o monitor trap exit SIGCHLD # Start nginx nginx -g 'daemon off;' & # Start php-fpm php-fpm -F & wait
注意
  • 在将startup.sh文件提交到 Git 存储库之前,请务必将其保存为可执行文件。chmod +x startup.sh用于为您的startup.sh文件设置执行权限。

  • 如果未将startup.sh文件另存为可执行文件,请在apprunner.yaml文件中以build命令chmod +x startup.sh形式输入。

例 apprunner.yaml
version: 1.0 runtime: php81 build: commands: build: - echo example build command for PHP run: command: ./startup.sh network: port: 8080 env: APP_PORT
例 index.php
<html> <head> <title>First PHP App</title> </head> <body> <?php print("Hello World!"); print("<br>"); ?> </body> </html>