區域 ID
REGION_ID
是 Google 根據您在建立應用程式時選取的地區所指派的簡寫代碼。雖然某些區域 ID 可能看起來與常用的國家/地區代碼相似,但此代碼並非對應國家/地區或省份。如果是 2020 年 2 月後建立的應用程式,App Engine 網址會包含 REGION_ID.r
。如果是在此日期之前建立的現有應用程式,網址中則可選擇加入地區 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.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
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.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- 安裝 Composer,這是 PHP 依附元件管理工具。您必須在 Linux 和 Mac OS X 系統上全域安裝 Composer。
- 由於新專案中 Cloud Build 使用服務帳戶的預設行為有所變更,以及預設安全的機構政策變更,因此您可能需要為部署服務帳戶授予其他角色。如要進一步瞭解如何授予特定角色,請參閱疑難排解指南。
瀏覽 GitHub 上的程式碼。
下載或複製應用程式。
git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git
或者下載 ZIP 格式的範例,然後解壓縮該檔案。
前往
getting-started
目錄。cd php-docs-samples/appengine/standard/getting-started
開啟
composer.json
檔案並查看所有直接相依項目:如要安裝依附元件並產生
composer.lock
檔案,請執行下列指令:composer install
composer.lock
檔案可協助應用程式擷取您在多個建構作業和環境中使用的套件版本。如果成功,您會看到下列輸出內容:
Creating gs://BUCKET_NAME/
如果不成功,您可能會看到下列輸出內容:
ServiceException: 409 Bucket BUCKET_NAME already exists
請使用其他值區名稱再試一次。
將
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
檔案,內容應如下所示:如要部署應用程式,請前往
getting-started
目錄並執行下列指令:gcloud app deploy
畫面上出現位置提示時,請選擇距離應用程式使用者較近的位置。App Engine 具有「地區性」,這表示執行您應用程式的基礎架構位於特定地區。例如,本教學課程使用
us-central1
地區部署其儲存空間資源。將應用程式部署在相同地區中可降低延遲及提升效能。一般而言,我們會建議您選擇靠近使用者的位置,但有時將應用程式部署在靠近其資源的位置也是合適的做法。請參閱可用的 App Engine 位置和資源位置。
查看應用程式:
gcloud app browse
- 瞭解如何驗證使用者。
- 如要進一步瞭解如何寫入應用程式記錄和解讀系統記錄,請參閱「讀取及寫入應用程式記錄」一文。
- 瞭解如何使用 Cloud Tasks 在要求後以非同步方式在背景執行工作。
- 請參閱處理要求和轉送要求的相關說明。
- 如要進一步瞭解 App Engine 的運作方式,請參閱 PHP 執行階段環境。
下載範例應用程式
透過 composer.json 指定依附元件
應用程式會使用前端控制器轉送要求。本指南中的程式碼範例使用 Slim Framework,但您可以自由使用您選擇的網路架構。
初始化應用程式並定義前端控制器
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 bucket:
gcloud storage buckets create gs://BUCKET_NAME/ --location=BUCKET_REGION
舉例來說,如果您想在 us-central1
地區建立名為 picture-storage
的值區,請執行下列指令:
gcloud storage buckets create gs://picture-storage/ --location=us-central1
將專案連線至 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
設定檔:
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
部署應用程式
正在清除所用資源
刪除 Google Cloud 專案,系統就會停止對專案使用的資源收取費用。
如要刪除您的專案,請使用下列指令:
gcloud projects delete PROJECT_ID
如要確認專案已刪除,請列出您的專案:
gcloud projects list