区域 ID
REGION_ID
是 Google 根据您在创建应用时选择的区域分配的缩写代码。此代码不对应于国家/地区或省,尽管某些区域 ID 可能类似于常用国家/地区代码和省代码。对于 2020 年 2 月以后创建的应用,REGION_ID.r
包含在 App Engine 网址中。对于在此日期之前创建的现有应用,网址中的区域 ID 是可选的。
详细了解区域 ID。
了解如何使用 PHP 7.4 或 8.1 版在 App Engine 中构建应用。该示例应用允许用户将他们喜爱图书的书名、作者、说明、出版日期和图片发布到网页上。 该应用将文本数据存储在 Cloud SQL 数据库中,将图片存储在 Cloud Storage 存储桶中。
指南结构
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- 安装 PHP 依赖项管理工具 Composer。在 Linux 和 Mac OS X 系统上,您必须全局安装 Composer。
下载示例应用
在 GitHub 上浏览代码
下载或克隆应用。
git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git
或者下载该示例的 zip 文件并解压缩。
导航到
getting-started
目录。cd php-docs-samples/appengine/standard/getting-started
使用 composer.json 指定依赖项
该应用使用前端控制器来对请求进行路由处理。本指南中的示例代码使用 Slim 框架,但您可以任选一个 Web 框架。
打开
composer.json
文件,查看所有直接依赖项:如需安装依赖项并生成
composer.lock
文件,请运行以下命令:composer install
composer.lock
文件可帮助您的应用检索在多个构建和环境中使用的相同版本的软件包。
初始化应用并定义前端控制器
index.php
文件会初始化应用,并将所有请求转发至 ./src/controllers.php
文件中定义的控制器。
与 Google Cloud 服务集成
App Engine 需要应用与外部系统集成才能存储数据。 示例应用将文本数据与图片分别存储在 Cloud SQL 和 Cloud Storage 中。
请参阅选择存储选项页面了解所有 Google Cloud 存储选项。
使用 Cloud SQL
在示例应用中,用户将图书发布到网页。应用使用 Cloud SQL 数据库来存储图书的书名、作者、出版日期和说明。
您需要先创建一个 Cloud SQL 实例,然后才能将内容添加到应用的数据库。
创建 Cloud SQL 实例
使用 gcloud CLI 创建 Cloud SQL 实例:
gcloud sql instances create INSTANCE_NAME --tier=MACHINE_TYPE --region=REGION
例如,如果要将实例命名为 bookshelf
并在美国中央区域使用机器类型 db-n1-standard-2
:
gcloud sql instances create bookshelf --tier=db-n1-standard-2 --region=us-central1
设置 MySQL 根用户
您可以使用 gcloud CLI 设置 Cloud SQL 实例的根用户密码:
gcloud sql users set-password USER --host=HOST --instance=INSTANCE_NAME --password=PASSWORD
例如,如果您想将 Cloud SQL 实例 bookshelf
的根用户密码设置为 passw0rd!
:
gcloud sql users set-password root --host=% --instance=bookshelf --password=passw0rd!
在 Cloud SQL 实例上设置数据库
要存储图书的作者、书名、出版日期和说明,请创建一个 MySQL 数据库:
gcloud sql databases create DATABASE_NAME --instance=INSTANCE_NAME
例如,如果要在 Cloud SQL 实例 bookshelf
上创建名为 book-data
的数据库:
gcloud sql databases create book-data --instance=bookshelf
连接到 Cloud SQL 数据库
示例应用使用 PHP 的 PDO 与 MySQL 数据库交互。
对于本教程,在下方的配置应用部分中,这些参数指定为环境变量。
查询单行
当用户点击图书时,应用会查询数据库并返回包含图书书名、作者、出版日期和说明的单行内容。
使用 Cloud Storage
示例应用使用 Cloud Storage 来存储用户上传的图片(二进制文件)。
创建 Cloud Storage 存储桶
Cloud Storage 使用存储桶来组织数据并控制其访问权限。
使用 gcloud CLI 创建 Cloud Storage 存储桶:
gcloud storage buckets create gs://BUCKET_NAME/ --location=BUCKET_REGION
例如,如果您想在 us-central1
区域中创建名为 picture-storage
的存储桶:
gcloud storage buckets create gs://picture-storage/ --location=us-central1
如果创建成功,您会看到以下输出:
Creating gs://BUCKET_NAME/
如果创建不成功,您可能会看到以下输出:
ServiceException: 409 Bucket BUCKET_NAME already exists
请使用其他存储桶名称重试。
将项目连接到 Cloud Storage 存储桶
要使用 Cloud Storage,您需要指定 Cloud Storage 库。
存储图片
创建了 Cloud Storage 存储桶并设置好连接后,现在您就可以存储图片了。上传的图片可采用预定义的访问控制列表 (ACL),以控制对图片的访问权限。
在此示例应用中,上传的图片将采用预定义的 ACL public-read
。您可以通过 Cloud Storage 对象的 mediaLink
属性获取其公共网址。您可以在 HTML 图片标记中使用此网址。
如需关于私有 Cloud Storage 对象读取方式的说明,请参阅“下载对象”页面。
删除映像
当用户从应用中删除图书时,以下代码会从 Cloud Storage 存储桶中删除该图片。
配置应用
您可以使用 app.yaml 文件配置在 App Engine 上运行的应用,该文件用于指定应用的运行时、环境变量和其他设置。
对于配置要求最低的应用,app.yaml
文件可能只有一行:
PHP 8.1
runtime: php81
PHP 7.4
runtime: php74
您可以将其他配置选项和特定于应用的环境变量添加到 app.yaml
配置文件中。
添加环境变量
在 app.yaml
文件中将环境配置提供给应用。本指南中使用的 bookshelf 示例需要将配置作为环境变量提供,以便应用了解如何连接到正确的 Cloud SQL 实例和 Cloud Storage 存储桶。
要部署您的应用,您需要修改 app.yaml
配置文件:
将
GOOGLE_STORAGE_BUCKET
变量设置为您的 Cloud Storage 存储桶的名称。将
CLOUDSQL_CONNECTION_NAME
变量设置为 app-name:region:instance-name 您可以使用以下gcloud
命令检索必要的详细信息:gcloud sql instances describe INSTANCE
对于 Cloud SQL 第二代实例,
CLOUDSQL_CONNECTION_NAME
将采用以下格式:your_project_name:your_region:your_instance
如果您已创建的数据库的名称不是
bookshelf
,则取消备注并设置CLOUD_SQL_DATABASE_NAME
变量。在此示例中,创建了名称为book-data
的数据库。查看您的
app.yaml
文件,该文件应如下所示:
PHP 8.1
runtime: php81
env_variables:
GOOGLE_STORAGE_BUCKET: picture-storage
CLOUDSQL_CONNECTION_NAME: sample-application:us-central1:bookshelf
CLOUDSQL_USER: root
CLOUDSQL_PASSWORD: passw0rd!
CLOUDSQL_DATABASE_NAME: book-data
PHP 7.4
runtime: php74
env_variables:
GOOGLE_STORAGE_BUCKET: picture-storage
CLOUDSQL_CONNECTION_NAME: sample-application:us-central1:bookshelf
CLOUDSQL_USER: root
CLOUDSQL_PASSWORD: passw0rd!
CLOUDSQL_DATABASE_NAME: book-data
部署应用
要部署应用,请导航到
getting-started
目录并运行以下命令:gcloud app deploy
出现位置提示时,请选择应用用户附近的位置。 App Engine 是区域级的,这意味着运行您应用的基础架构位于特定的地理区域。例如,本教程使用
us-central1
区域来部署其存储资源。在同一区域中部署应用可缩短延迟时间并提升性能。通常最好选择用户附近的位置,但在有些情况下,建议在资源所在位置附近部署您的应用。了解可用的 App Engine 位置和资源位置。
要查看应用,请运行以下命令:
gcloud app browse
清理
删除您的 Google Cloud 项目,停止对该项目中使用的资源进行结算。
要删除项目,请运行以下命令:
gcloud projects delete PROJECT_ID
要验证该项目已删除,请列出您的项目:
gcloud projects list
后续步骤
- 了解如何验证身份用户。
- 在读取和写入应用日志中,详细了解如何写入应用日志和解读系统日志。
- 了解在您收到请求后,如何使用 Cloud Tasks 在后台异步进行处理。
- 了解请求处理和请求路由。
- 如需深入了解 App Engine 的工作原理,请参阅 PHP 运行时环境。