由于 PHP 5.5 版不再受社区支持,我们强烈建议新应用使用 PHP 7 运行时

部署 PHP 5 应用

部署应用,以便将应用上传到 App Engine 并在 App Engine 上运行应用。部署应用时,您可以在 App Engine 中创建这些应用的版本及其对应的服务。您可以部署整个应用(包括所有源代码和配置文件),也可以部署和更新单个版本或配置文件

要以编程方式部署应用,请使用 Admin API

如果您使用已弃用appcfg 工具部署应用,请参阅 appcfg 参考文档,了解如何使用该工具。

准备工作

在部署应用之前,请做好以下准备:

安装 gcloud 命令行工具

如需使用 gcloud 工具部署应用,您必须下载、安装并初始化 Cloud SDK

下载 SDK

如果您已安装 gcloud 工具,并希望将其配置为使用Cloud 项目 ID,而不是初始化设置的 ID,请参阅管理 Cloud SDK 配置

使用代理

如果您从使用 HTTP 或 HTTPS 代理的系统运行部署命令,则必须配置该工具,以使其可以通过代理通信。

运行以下命令以配置 gcloud 工具:

gcloud config set proxy/type [PROXY_TYPE]
gcloud config set proxy/address [PROXY_ADDRESS]
gcloud config set proxy/port [PROXY_PORT]

您还可以为代理设置 usernamepassword。如需了解详情,请参阅 gcloud config

部署应用

如需将应用部署到 App Engine,请从配置文件所在的位置使用 gcloud app deploy 命令,例如 app.yaml

选择唯一的版本 ID

对于手动调节的实例,版本的 ID 应该以字母开头,以与数字实例 ID 区分开。这可以确保将请求路由到正确的目标,并避免网址格式(如 123-dot-my-service.[REGION_ID].r.appspot.com)造成的歧义,此类网址格式可通过两种方式解释:

  • 如果版本 123 存在,则请求将路由到my-service 服务的版本 123
  • 如果版本 123 不存在,则请求将路由到运行 my-service 服务的实例 ID 123

对于配置为自动扩缩或基本扩缩的实例,您可以根据需要命名您的版本,因为系统不支持定位此类实例

gcloud app deploy [CONFIGURATION_FILES]

默认情况下,该命令从当前目录部署 app.yaml 配置文件。如果从不包含应用 app.yaml 的目录运行命令,或者想部署多个应用,请将 [CONFIGURATION_FILES] 替换为一个或多个配置文件的路径。使用单个空格来分隔路径名。

可选标志:

  • --version:指定自定义版本 ID。默认情况下,App Engine 会生成一个版本 ID。
  • --no-promote:部署您的应用,而不自动将所有流量路由到该版本。默认情况下,您部署的每个版本都会自动配置为接收 100% 的流量。
  • --project:为您在 gcloud 工具中初始化为默认值的 Cloud 项目 ID 指定一个备用 Cloud 项目。

如需了解有关详情,请参阅 gcloud app deploy 参考文档或从命令行运行 gcloud help

示例:

gcloud app deploy
gcloud app deploy app.yaml dos.yaml index.yaml
gcloud app deploy --version [YOUR_VERSION_ID] --no-promote --project [YOUR_PROJECT_ID]

如果您部署的版本所指定的版本 ID 与 App Engine 上已存在的版本相同,则您部署的文件将覆盖现有版本。如果该版本正在处理流量,则可能会出现问题,因为流向应用的流量可能会中断。如果您使用不同的版本 ID 部署新版本,然后将流量迁移到该版本,则可以避免中断流量。

部署多个服务应用

当您的应用被分解为多项服务时,您可以单独部署和更新目标服务,也可以同时部署和更新所有服务。部署服务更新可能包括更新单个配置文件或更新相应版本中的源代码。

例如,您可以在 App Engine 中部署和创建两个版本,其中每个版本都在各自的服务中运行。第一个版本用作前端服务,另一个版本用作应用的后端。然后,您可以部署单独的配置文件以仅更新服务的设置。您还可以选择将新版本部署到服务,以便同时更新前端和/或后端的源代码。

多项服务的要求

您可以使用相同的部署命令来部署和更新应用的多项服务,但需要满足以下要求:

  • 您必须先将应用的某个版本部署到 default 服务,然后才能创建和部署后续服务。

  • 您必须在相应版本的 app.yaml 配置文件中指定服务的 ID。要指定服务 ID,请在每个配置文件中添加 service: [YOUR_SERVICE_ID] 元素定义。如果没有在配置文件中添加此元素定义,则该版本默认部署到 default 服务。

  • 您必须在部署命令中指定所有相应的 app.yaml 配置文件,才能同时部署多项服务。

部署多项服务

从配置文件所在的应用根目录中,运行部署命令并为每项服务的 app.yaml 文件指定相对路径和文件名。

gcloud app deploy [CONFIGURATION_FILES]

其中 [CONFIGURATION_FILES] 是一个或多个配置文件的路径和名称,由单个空格分隔。

示例
gcloud app deploy main/app.yaml service1/app.yaml service2/app.yaml

每项服务成功部署后,您将通过命令行收到验证。

问题排查

下面是您可能会遇到的常见错误消息:

PERMISSION_DENIED: Operation not allowed
The "appengine.applications.create" permission is required.
如果 Cloud 项目不包含所需的 App Engine 应用,则 gcloud app deploy 命令在尝试运行 gcloud app create 命令时可能会失败。只有拥有 Owner 角色的帐号才具备创建 App Engine 应用所需的权限。
Command not found
如果您在安装 App Engine SDK(已弃用)时没有为 dev_appserver.sh 工具创建符号链接,则可能需要指定完整目录路径(例如 [PATH_TO_CLOUD_SDK]/bin/dev_appserver.py)来运行相应工具。
Import Error
如果您同时安装了 Cloud SDK 以及初始版本 App Engine SDK,则 PATH 的条目可能会相互冲突并造成导入错误。如果您在运行 Cloud SDK 命令时收到错误,请尝试明确使用原始 App Engine SDK。您可以将原始 App Engine SDK 的条目移动到 PATH 中较为靠前的位置,以使相应命令具有优先权。或者,您可以通过指定完整目录路径 [PATH_TO_APP_ENGINE_SDK]/dev_appserver.py 来运行该命令。
[400] The first service (module) you upload to a new application must be the 'default' service (module)
您必须先部署并创建 default 服务,然后才能部署并创建应用的多项服务。如需详细了解如何将版本部署到 default 服务,请参阅部署多个服务应用
Too Many Versions (403)
App Engine 对应用的已部署版本数量设定了限制。针对免费应用和已部署应用的限制有所不同。 您可以使用 Cloud Console 删除旧版本,然后上传最新代码。
其他部署错误
如果部署失败,请确保在项目中启用 Cloud Build API。App Engine 会在您首次部署应用时自动启用此 API,但如果有人停用了 API,则部署将失败。

后续步骤