建立 GCP VM 主機(執行個體/Instance)

進入 GCP 首頁,點 [免費試用] 登入 Google 帳號,照步驟提示啟用 GCP 服務

最後一個步驟 [驗證付帳資訊]會要求輸入信用卡資訊,這部份僅做驗證,除非開啟計費,否則不會收取費用。

啟用 GCP 後,上方藍色列顯示 My First Project ▾ 的地方代表目前所在專案。My First Project 只是預設的空白專案,可以直接使用,建立新的亦可。

這裡選擇建立新專案

  • 專案名稱僅供識別,可隨時更改。
  • 專案 ID 必需是平台上獨一無二的 ID,有人使用就不能再命名相同的專案 ID,且只接受小寫英數加連字號(-),決定好就不能變更,視情況更改,沒特別需要更改就直接按建立就好。

啟用 Compute Engine API,建立好就會直接切換到該專案上了。

在搜尋列輸入 bitnami wordpress,點選 [ WordPress Certified by Bitnami and Automattic ]並按啟動

啟用相依的 API

建立 Bitnami VPS 主機

這個步驟簡單的講,就是在組裝一台電腦,配置的高底決定每月收取的費用,也是付費與免費的關鍵。

如果表現優先,挑一個離目標受眾最近的機房。

如果無論如何就是要免費,依照 Google Cloud 免費計畫,挑附合下表的機房與主機型態規格。

Zone
  • us-west1 (奧勒岡州)
  • us-central1 (愛荷華州)
  • us-east1 (南卡羅來納州)
這幾個資料中心都免費,每個資料中心都再細分abc三個主機,僅供識別。任一主機都免費,含 IP。
Machine Type系列: E2
機器類型: e2-micro
 
Boot Disktype: Standard Persistent Disk
size in GB: 10
30G以下都免費。

⚠️輸出流量 1G/月 免費,但如果有來自中國或澳洲的訪客就會計流量費用。

部署環境

複製備份右方下登入資訊。

此頁隨時可以到 導覽選單 > Deployment Manager > [名稱] 回來查看

其中 Admin Password,除了是 WordPress 預設登入密碼,也是 phpMyAdmin root 密碼。

先開啟 site address 連結,一切正常就會看到 WordPress 的 Hello World 預設頁面。

打開 導覽選單 > 虛擬私有雲網路(VPC Network) > 外部 IP 位址(External IP) > 按保留,取個名字先把 IP 固定下來

IP 類型就會從 [臨時] 變成 [靜態](Static IP)。

遷移、調整與設定

就實測,只要從 cPanel 下載以下二個資料就能完美搬家。

  •  public_html  (wordpress 網頁根目錄)
  • MySQL 資料庫

備份下載 cPanel 端資料

先到 WordPress 控制台更新頁面,把該更新的都更新一遍,確保網站在最新狀態。

更新完成後,開啟 cPanel > 檔案管理員(File Manager) > 滑鼠右鍵點右邊 public_html目錄 > Compress > 格式選 [GZiped Tar 封存] > Compress Files

開啟 cPanel > 檔案管理員(File Manager) > 滑鼠右鍵點右邊 public_html > Compress
格式選 [GZiped Tar 封存] > Compress Files

 

打包壓縮好後,檔案會放在同一個目錄,滑鼠右鍵點選 public_html.tar.gzDownload

下載資料庫

到 cPanel > 備份 > 下載 [MySQL] 資料庫

直接右鍵點選下載連姞檔案

回到 GCP 控制台登入訊息頁面,點擊下方 SSH ,開啟 GCP 的 SSH 連線,進入 Bitnami 主機

瀏覽器模擬終端機(SSH-IN-BROWSER)登入

點擊⬆︎上傳檔案 ,選擇剛從 cPanel 下載的 [public_html.tar.gz],把檔案上傳到 Bitnami 主機。

在終端機輸入tar -C -zxvf ~/public_html.tar.gz解壓上傳的檔案

⚠️如果瀏覽器有開啟阻擋彈出視窗,瀏覽器模擬終端機會被擋住打不開。


備份、取代 Bitnami 預設資料及修改檔案權限

這部分看似操作指令比較多,但實際主要是針對以下二個資料夾做備份及權限屬性修改。
/opt/bitnami/wordpress : wordpress根目錄(等於原網站的 /public_html)
/bitnami/wordpress : 存放 wp-config.php 及 wp-content/


#把 Bitnami 預設的 wordpress 目錄用改名的方式備份
sudo mv /opt/bitnami/wordpress /opt/bitnami/wordpress.bak
sudo mv /bitnami/wordpress/wp-config.php /bitnami/wordpress/wp-config.php.bak
sudo mv /bitnami/wordpress/wp-content/ /bitnami/wordpress/wp-content.bak/
#
#原主機 wordpress 目錄(public_html)移到 Bitnami 對應的目錄結構
sudo cp -pnr ~/public_html /opt/bitnami/wordpress
sudo mv /opt/bitnami/wordpress/wp-content /bitnami/wordpress/wp-content
sudo mv /opt/bitnami/wordpress/wp-config.php /bitnami/wordpress/wp-config.php
#
#修正權限屬性
cd /opt/bitnami
sudo find wordpress/ -type d -exec chmod 775 {} ; #底下所有目錄權限都改 775
sudo find wordpress/ -type f -exec chmod 664 {} ; #底下所有檔案權限都改 664
sudo chown -R bitnami:daemon wordpress/ #底下所有帳號群組都改 bitnami:daemon
#
sudo cp -pnr /opt/bitnami/wordpress.bak/wp-config.php /opt/bitnami/wordpress/wp-config.php
sudo cp -pnr /opt/bitnami/wordpress.bak/wp-content /opt/bitnami/wordpress/wp-content
#
cd /bitnami/wordpress
sudo chmod 640 wp-config.php
sudo find wp-content/ -type d -exec chmod 775 {} ;
sudo find wp-content/ -type f -exec chmod 664 {} ;
sudo chown -R bitnami:daemon wp-content/

匯入 MySQL 資料庫

在匯入之前,先取得 DB NAME、DB USER、DB PASSWORD 三個資訊,並把紅字的部分記下來。

sudo grep -E 'DB_NAME|DB_USER|DB_PASSWORD' /bitnami/wordpress/wp-config.php
define('DB_NAME', 'cpaneldbname_wp1');
define('DB_USER', 'dbusername_wp1');
define('DB_PASSWORD', 'M&pma;)6Xr9xOH48[]2');

💡亦或直接查看編輯 wp-config.php 檔,看裡面有沒有 cPanel 殘留路徑

/home/帳號/public_html/,有的話把它改成 /opt/bitnami/wordpress/

用 SSH 建立 localhost tunnel 登入 phpMyAdmin

由於 phpMyAdmin 只能透過本機存取,必需利用 SSH 先建立模擬本機連線的 localhost tunnel,才能進入 phpMyAdmin 管理頁面。

# 建立 SSH 連線用的公鑰及私鑰
ssh-keygen -t rsa -f ~/.ssh/mysite -C gcpuser -b 2048
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): #直接 enter 不設密碼
Enter same passphrase again: #再按一次 enter 確認
Your identification has been saved in /Users/david/.ssh/mysite.
Your public key has been saved in /Users/david/.ssh/mysite.pub.
The key fingerprint is:
SHA256:AzZujBfi0QWERZipPOGeazTxJKYSTv6thUjjhieW9ug gcpusername
The key's randomart image is:
+---[RSA 2048]----+
|.=#=o            |
|=&.*             |
|*o@ o +          |
|.D.B P p         |
|o+O + C T        |
|o=o  =   .       |
| . ..            |
|.                |
| F               |
+----[SHA256]-----+
  • 綠色字為公鑰(public key)及私鑰(private key)的主檔名,可任意命名,建議可以用主機名或網站名方便識別。
  • 紅色字為登入帳號,忘記 SSH 帳號可回頭用 SSH-IN-BROWSER 登入查看
  • 框起來的地方是密鑰存放位置。

回到 GCP console,打開導覽選單 > Compute Engine > VM 執行個體 (VM Instance) > 左側下方[中繼資料/Metadata] > 安全殻層金鑰 (ssh keys) > [編輯] > 新增項目

貼上剛建立的公鑰檔mysite.pub 的密文並儲存起來。

這時開啟本機的終端機,輸入以下指令,並把紅字的地方改為登入資訊的 site address IP

ssh -N -L 8888:127.0.0.1:80 -i ~/.ssh/mysite gcpuser@site address IP

執行後就會與遠端的 GCP Bitnami 主機建立 localhost tunnel,終端機沒反應就代表連線中,按 Ctrl+C 或關閉終端機就可以結束連線,先保持開啟。

建立資料庫與帳號

開啟網址 http://localhost:8888/phpmyadmin 進入 phpmyAdmin 登入頁面,帳號填 root,密碼填 wordpress 的 admin password。

匯入原網站的 mysql.sql 資料庫檔

資料庫新增資料庫,資料庫名稱輸入從 DB_NAME 撈出的名稱
選 [匯入] 上傳剛下載的 MySQL 資料庫檔案,選好後按執行
點選上方 使用者帳號 > 新增使用者帳號
  • 使用者名稱輸入 DB_USER 紅字的部分
  • 使用者密碼輸入 DB_PASSWORD 紅字的部分

把以下幾個權限打勾,再到最右下按 執行

ALTER
CREATE
CREATE TEMPORARY TABLES
DELETE
EVENT
INDEX
LOCK TABLES
SELECT
TRIGGER
ALTER ROUTINE
CREATE ROUTINE
CREATE VIEW
DROP
EXECUTE
INSERT
REFERENCES
SHOW VIEW
UPDATE

變更 DNS

回到 cPanel > 網域 > Zone Editor > [管理/Management]

編輯主網域類型A(type A / A record)那一行,把 IP 改為 GCP 主機的 IP

套用後很快就生效。(修改之前先把原本的 IP 記下來,以防有需要連回舊主機)

💡如果有需,可以用修改本機的 hosts 檔的方式臨時連回舊主機

hosts 檔存放位置:

macOS:/private/etc/hosts
Windows:C:WINDOWSsystem32driversetchosts

更新申請網站 Let’s Encrypt 免費 SSL 憑證並自動更新

在 Bitnami 主機執行sudo /opt/bitnami/bncert-tool

以下是會詢問的幾個選項:

Domain list []: 填上會用到的網域及子網域,空白分開,如:example.com www.example.com mail.example.com
Enable HTTP to HTTPS redirection [Y/n]: Y
Enable non-www to www redirection [Y/n]: 是否把非www網址導向到 www 網址
Enable www to non-www redirection [y/N]: 是否把www網址導向到非 www 網址
E-mail address []: 填上網站 owner 的email

以上完成後會自動加入更新排程,每個月會自動更新憑證。

這時再開啟瀏覽器輸入網站 http://網址(不加S),如果網址出現鎖頭也沒跳出警告訊息就成功了。

參考資料:

  1. Learn about the Bitnami HTTPS Configuration Tool
  2. Generate and Install a Let’s Encrypt SSL Certificate for a Bitnami Application
  3. Connect to phpMyAdmin
  4. 管理 Windows 的 OpenSSH 金鑰 | Microsoft Docs