建立 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 ]並按啟動
建立 Bitnami VPS 主機
這個步驟簡單的講,就是在組裝一台電腦,配置的高底決定每月收取的費用,也是付費與免費的關鍵。
如果表現優先,挑一個離目標受眾最近的機房。
如果無論如何就是要免費,依照 Google Cloud 免費計畫,挑附合下表的機房與主機型態規格。
Zone |
| 這幾個資料中心都免費,每個資料中心都再細分abc三個主機,僅供識別。任一主機都免費,含 IP。 |
Machine Type | 系列: E2 機器類型: e2-micro | |
Boot Disk | type: Standard Persistent Disk size in GB: 10 | 30G以下都免費。 |
⚠️輸出流量 1G/月 免費,但如果有來自中國或澳洲的訪客就會計流量費用。 |
部署環境
複製備份右方下登入資訊。
其中 Admin Password,除了是 WordPress 預設登入密碼,也是 phpMyAdmin root 密碼。
先開啟 site address 連結,一切正常就會看到 WordPress 的 Hello World 預設頁面。
打開 導覽選單 ≡ > 虛擬私有雲網路(VPC Network) > 外部 IP 位址(External IP) > 按保留,取個名字先把 IP 固定下來
遷移、調整與設定
就實測,只要從 cPanel 下載以下二個資料就能完美搬家。
- public_html (wordpress 網頁根目錄)
- MySQL 資料庫
備份下載 cPanel 端資料
先到 WordPress 控制台更新頁面,把該更新的都更新一遍,確保網站在最新狀態。
更新完成後,開啟 cPanel > 檔案管理員(File Manager) > 滑鼠右鍵點右邊 public_html
目錄 > Compress > 格式選 [GZiped Tar 封存] > Compress Files
下載資料庫
到 cPanel > 備份 > 下載 [MySQL] 資料庫
回到 GCP 控制台登入訊息頁面,點擊下方 SSH ,開啟 GCP 的 SSH 連線,進入 Bitnami 主機
點擊⬆︎上傳檔案 ,選擇剛從 cPanel 下載的 [public_html.tar.gz],把檔案上傳到 Bitnami 主機。
在終端機輸入tar -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-config.php 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 或關閉終端機就可以結束連線,先保持開啟。
💡網站搬移成功後,未來如果還有需要登入 phpMyAdmin,port 80 要改為 443 才能登入。
建立資料庫與帳號
開啟網址 http://localhost:8888/phpmyadmin 進入 phpmyAdmin 登入頁面,帳號填 root,密碼填 wordpress 的 admin password。
匯入原網站的 mysql.sql 資料庫檔
- 使用者名稱輸入 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]
套用後很快就生效。(修改之前先把原本的 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),如果網址出現鎖頭也沒跳出警告訊息就成功了。
參考資料: