使用 Google App Engine 標準環境託管 WordPress 教學

使用 Google Cloud Platform 代管 WordPress 方法很多,網路上也有很多教學,本篇著重以下3個特點:

    1. 部屬在 Google App Engine 第一代標準環境。
    2. 所有過程都在 Cloud Shell 中完成,代表您只要有瀏覽器就可以從無到有完成一個Wordpress 網站,不需要在電腦安裝任何額外軟體。
    3. 在 Cloud Shell 運行開發環境的步驟。

 

部屬在 Google App Engine 標準環境的好處

GAE 是 Google 元老級的 Platform-as-a-Service 雲端服務,現在常說的 Serverless。使用者不需維護主機,自動擴展應付大流量,每日有28實例小時的免費額度,如果流量不大幾乎不需要費用,也支援自訂網域和免費代管的 SSL 憑證提供 https 服務。

範例網址:https://wp-gae.uccloud.com.tw/

所應用到的 Google Cloud Platform 服務

  1. Google App Engine 第一代標準環境,運行 PHP 7.2
  2. 第二代 Cloud SQL,運行 MySQL 5.7
  3. Google Cloud Storage,存放靜態媒體檔案

因為 GAE 跟 Cloud SQL 第二代尚無法選擇台灣區域,所以本文選擇區域為東京(asia-northeast1)。另外,GCP 專案中的 GAE 服務一旦建立就無法更改區域。

事前準備

您必須要具備以下基本知識才能完成以下教學

  1. 了解如何建立與管理GCP專案:
    https://cloud.google.com/resource-manager/docs/creating-managing-projects
  2. 了解 Cloud Shell 基本操作:
    https://cloud.google.com/shell/docs/starting-cloud-shell
  3. 了解基本的 linux 指令。

開始前,建立一個全新的專案並啟動 Cloud Shell

startcloudshell1

startcloudshell2

建立資料庫

在 Cloud SQL 建立一個 MySQL 實例,命名為 wordpress ,在 Cloud Shell 下輸入:

$ gcloud sql instances create wordpress \
     --activation-policy=ALWAYS \
     --region=asia-northeast1 \
     --tier=db-n1-standard-1

測試用途可以改用 db-f1-micro 或 db-g1-small 取代 db-n1-standard-1 以減少支出,正式環境則不建議。接著建立資料庫,命名為 wpdb

$ gcloud sql databases create wpdb --instance wordpress

設定 root 密碼:

$ gcloud sql users set-password root \
     --host=% \
     --instance wordpress \
     --password=p@ssw0rd # 請修改為自己的密碼

建立 GAE 服務

為專案啟用 GAE 服務,只能執行一次,區域必須慎選,無法再修改。建議要與資料庫同一個區域以降低延遲。

$ gcloud app create --region=asia-northeast1

設定 Google Cloud Storage

我們會使用 Google Cloud Storage 作為媒體存放區,預設的 bucket 名稱為 YOUR_PROJECT_ID.appspot.com,本範例的專案 ID 為 wp-on-gae1(請修改為您的專案ID),輸入以下指令將預設的存取權設定為公開:

$ gsutil defacl ch -u AllUsers:R gs://wp-on-gae1.appspot.com

安裝 WordPress

下載程式並切換到安裝目錄

$ git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git
$ cd php-docs-samples/appengine/php72/wordpress
$ sudo apt-get install php-zip
$ composer install
$ php wordpress.php create

最後一個指令下達後,會進入互動模式,按照提示輸入資料

  1. 輸入您的 Wordprees 專案目錄名稱:my-wordpress-project
  2. 確認路徑,如果目錄存在會複寫所有內容:Y
  3. 輸入 Cloud SQL instance 的區域:10
  4. 輸入專案 ID:wp-on-gae1 (請修改為您的專案ID)
  5. 輸入資料庫實例:wordpress
  6. 輸入資料庫名稱:wpdb
  7. 輸入資料庫使用者名稱:root
  8. 輸入資料庫密碼:p@ssw0rd (請修改為您設定的密碼)

部屬程式到 GAE

切換到您的 WordPress 專案根目錄:

$ cd my-wordpress-project

執行以下指令將程式部屬到 GAE:

$ gcloud app deploy app.yaml cron.yaml

您的網站已經上線了!網址為 https://PROJECT_ID.appspot.com/,進入並繼續完成設定。

WordPress › Installation.png

然後進入到後台的外掛設定畫面中,啟動 Google Cloud Storage plugin

Plugins

點選 Settings,輸入 GCS bucket 名稱,預設為 PROJECT_ID.appspot.com 並儲存設定

GCS Plugin Configurations

大功告成了,您可以發佈一則貼文測試。

在 Cloud Shell 中建立開發環境

Google App Engine 標準環境是一個「沙盒」,無法直接安裝外掛程式或主題,必須在本地端修改好後重新佈署,因此我們需要在 Cloud Shell 下建立起一個本地端開發環境,確定修改完成再部屬到 GAE。同時 Cloud Shell 也提供線上編輯器可以方便的修改程式

code editor
開啟程式編輯器

從 wp-config.php 的程式片段可以看出,透過 onGae 變數判斷執行環境是 GAE 還是本地端開發環境

// ** MySQL settings - You can get this info from your web host ** //
if ($onGae) {
    /** The name of the Cloud SQL database for WordPress */
    define('DB_NAME', 'wpdb');
    /** Production login info */
    define('DB_HOST', ':/cloudsql/wp-on-gae1:asia-northeast1:wordpress');
    define('DB_USER', 'root');
    define('DB_PASSWORD', '12345678');
} else {
    /** The name of the local database for WordPress */
    define('DB_NAME', 'wpdb');
    /** Local environment MySQL login info */
    define('DB_HOST', '127.0.0.1');
    define('DB_USER', 'root');
    define('DB_PASSWORD', '12345678');
}

我們並不打算在本地端建立一個測試資料庫,而是透過 Cloud SQL proxy 這個程式間接地連線到 Cloud SQL 資料庫與正式環境的資料是一樣的。

開啟一個新的 Cloud Shell 連線階段分頁

add_session
開啟一個新的連線階段分頁

然後切換到HOME目錄,下載 cloud_sql_proxy 程式

$ cd ~
$ wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
$ chmod +x cloud_sql_proxy

之後啟動指如下(請修改 wp-on-gae1 為您的專案ID):

$ cloud_sql_proxy -instances=wp-on-gae1:asia-northeast1:wordpress=tcp:3306

出現 Ready for new connections 提示則代表已準備就緒。

切換回原本的連線階段分頁,在 WordPress 專案底下輸入以下指令啟動開發環境伺服器:

$ dev_appserver.py . --php_executable_path /usr/bin/php-cgi

接著點擊 [Preview on port 8080] 選單 或 點擊 [Starting module “default” running at] 後面的 http://0.0.0.0:8080 網址,會開啟新分頁顯示開發中的 WordPress 網站。

preview on port 8080
檢視開發伺服器的 WordPress 網站

安裝完外掛或主題後,在發佈到GAE即可。