如何搬移 cPanel WordPress 網站到 Bitnami Google Cloud Platform
|如果覺得文長的話這裡有精簡版
「如非必要,勿增實體」是這篇文章的重點,也是最終挑選 Bitnami 做為網站主機的原因。
Bitnami 是針對網頁應用在各種不同平台部署的解決方案,專責在網頁應用,針對網站,網頁伺服器最佳化,不用花太多心思調整設定與網頁無關的的應用,以穩定可靠聞名的 Debian Linux 為核心,用佔用資源少效能高的 Nginx 做為網頁伺服器,背後還有 VMware 靠山。
雖然自行安裝 Linux 再啟用 Apache、MySQL 、PHP 也一樣 ,但重點不在要安裝的東西,而是「不需要安裝的東西」。個別安裝除了要做一堆設定外,還會安裝啟用太多不相關的套件或服務,想停用或移除又怕影響相依性,使得資源被無效佔用。
但也要提醒一下,自有主機維護除錯都要靠自己,如果興趣或專業跟這行不相關,網站最好還是交給有技術支援的主機商代管,出問題才有人可以處理。畢竟主機商是靠解決你的問題在賺錢,而你是賠賤(時間)在維護主機,省不了多少錢卻賠上更多時間跟精力,未必划算。
建立 GCP VM 主機(執行個體/Instance)
💡後續操作建議使用 Chrome 瀏覽器,除了比較快,其它瀏覽器可能會有跑版的問題,或是功能位置略有不同,但大至上也沒什麼太大問題。
GCP 的架構階層為:
Google 帳號 / GCP / 專案(Project) / 服務
新增主機的步驟基本上就是一路往架構階層內設定。
進入 Google Cloud Platform (以下簡稱 GCP)
如果平時有在使用 Google 服務(如 Gmail),有很大的可能己經是在登入狀態。
如果不想與私人帳號混淆使用,或單純只想測試,可先登出註一個新的 Google 帳號,再用新帳號登入。
之後照步驟提示啟用 GCP 服務
最後一個步驟 [驗證付帳資訊]會要求輸入信用卡資訊,這部份單純只做真人誠意驗證,除非開啟計費功能,不會收取任何費用。
💡不想用信用卡又想免費使用的話,也許可以用 VISA 簽帳金融卡(印有 VISA 的提款卡)來代替信用卡。
啟用 GCP 後,上方藍色列顯示 My First Project ▾ 的地方代表目前所在專案。My First Project 只是預設的空白專案,可以直接使用,建立新的亦可。
這裡選擇建立新專案
- 專案名稱僅供識別,可隨時更改。
- 專案 ID 必需是平台上獨一無二的 ID,有人使用就不能再命名相同的專案 ID,且只接受小寫英數加連字號(-),決定好就不能變更,視情況更改,沒特別需要更改就直接按建立就好。
啟用 Compute Engine API,建立好就會直接切換到該專案上了。
在搜尋列輸入 bitnami wordpress,點選 [ WordPress Certified by Bitnami and Automattic ]並按啟動
建立 Bitnami VPS 主機
這個步驟簡單的講,就是在組裝一台電腦,配置的高底決定每月收取的費用,也是付費與免費的關鍵。
主機的費用取決於資料中心所在地,同樣規格在不同地區費用就不一樣,比如日本或香港費用都比台灣再略高一些;再來才是硬體規格(平台、記憶體大小、儲存裝置種類及容量),
不同需求會有不同配置考量,內容網站就要考量把主機放在最靠近受眾位置的資料中心,反應快 SEO 才會漂亮。
以我自己舉例,主要流量來源加上自己本身都在台灣,主要受眾是亞洲中文世界,台灣又是東亞的樞紐,就選擇 asia-east1 台灣彰化機房。因為網站流量不高,選最低階的 CPU 及最小的 RAM,儲存裝置則是選用 SSD 再進一步提高反應時間。
如果無論如何就是要免費,可以參考 Google Cloud 免費計畫,只要建立的主機符合表格裡的條件,主機 (執行個體 / VM主機)就可以一直免費使用。
Zone |
| 這幾個資料中心都免費,每個資料中心都再細分abc三個主機,僅供識別。任一主機都免費,含 IP。 |
Machine Type | 系列: E2 機器類型: e2-micro | |
Boot Disk | type: Standard Persistent Disk size in GB: 10 | 30G以下都免費。 |
⚠️輸出流量 1G/月 免費有個但書是不包含中國及澳洲,也就是說,只要有往澳洲或中國的流量會直接計費,且比其他國家貴一些。 |
💡
1. 每月 1G 的流量說實在真的很少,我有二個網站,一個微米站一個奈米站,都以文字為主,圖少且都寄存 wp.com 分流。奈米站約150 pageview/月,流量約 500MB/月 左右;微米站約 100 pageview/月,流量約 1.2GB/月 左右,只要預期會超過以上的訪問量,很容易就收流量費用,但主機與與儲存空間仍是免費,總費用仍是很低。
2. 如果目標訪客在台灣或東亞,以地理位置來說我會建議 us-west1,除了地理位置最近外,同時又是最靠近資訊最發達的美國西岸及東亞。
右側的預估費是沒有折扣的牌價,等試用期結束轉正式帳單,只要沒超過使用量就不會扣款。
決定好配置後,按部署建立主機。
部署環境
完成後右方會顯示如下登入資訊,可以先複製備份起來。
其中 Admin Password,除了是 WordPress 預設登入密碼,也是 phpMyAdmin root 密碼。這裡先不用急著改 wordpress 密碼,後續網站移轉過來就會覆蓋掉,目前還不需要登入。
先開啟 site address 連結測試一下,一切正常就會看到 WordPress 的 Hello World 預設頁面。
打開左側導覽選單 ≡ > 虛擬私有雲網路(VPC Network) > 外部 IP 位址(External IP) > 按保留,取個名字先把 IP 固定下來
GCP 設定的部分先到這邊告一段落。
遷移、調整與設定
就實測,只要從 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
解壓上傳的檔案
💡
- 如果瀏覽器有開啟阻擋彈出視窗,瀏覽器模擬終端機會被擋住打不開。
- 如果主機與使用者之間的地理位置比較遠,終端機指令操作會感覺到些許延遲。(台灣到 us-west1機房約 130ms)
備份、取代 Bitnami 預設資料及修改檔案權限
這部分看似操作指令比較多,但實際主要是針對以下二個資料夾做備份及權限屬性修改。
/opt/bitnami/wordpress : wordpress根目錄(等於原網站的 /public_html)
/bitnami/wordpress : 存放 wp-config.php 及 wp-content/
💡後來去了解一下,wp-config.php 及 wp-content/ 與 wordpress 根目錄分開的用意是為避免直接曝露在網路。
#把 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 檔,參考別行的格式,新增一行DNS修改前的IP,儲存後立即生效。
hosts 檔存放位置:
macOS:/private/etc/hosts
Windows:C:WINDOWSsystem32driversetchosts
更新申請網站 Let’s Encrypt 免費 SSL 憑證並自動更新
在 Bitnami 主機執行sudo /opt/bitnami/bncert-tool
整個操作過程及說明:
sudo /opt/bitnami/bncert-tool
# 有出現這段訊息的話代表有新版,按[Y]更新,沒出現這段訊息代表已是最新版
An updated version is available. Would you like to download it?
You would need to run it manually later. [Y/n]: Y
The tool will exit now. To run the updated version run the
following command:
/opt/bitnami/bncert-tool
# 再執行一次
sudo /opt/bitnami/bncert-tool
-----------------------------------------------------------
Welcome to the Bitnami HTTPS Configuration tool.
-----------------------------------------------------------
Domains
Please provide a valid space-separated list of domains for which
you wish to configure your web server.
# 把使用中的主域名、子網域、未來可能會再新增的
# 子網域及轉址過來的寄存網域(parking domain)都
# 給它填上,www 也把它填上,域名之間用空白隔開。
Domain list []: example.com www.example.com blog.example.com
parkingdomain.com www.parkingdomain.com
-----------------------------------------------------------
Enable/disable redirections
Please select the redirections you wish to enable or disable on
your Bitnami installation.
# 是否啟用強制 https 連線,[Y]就對了
Enable HTTP to HTTPS redirection [Y/n]: Y
# 是否要讓網址自動加上 www.
# 除非原本網址預設就是 www.,個人使用建議選[n]
Enable non-www to www redirection [Y/n]: n
# 網址是否自動去掉 www.
# 如果上面選[n],這裡應該就是選 [Y]
Enable www to non-www redirection [y/N]: Y
-----------------------------------------------------------
Changes to perform
The following changes will be performed to your Bitnami
installation:
# 系統變更設定前再次確認,並設定排程每月自動更新憑證
1. Stop web server
2. Configure web server to use a free Let's Encrypt certificate for the domains:
example.com www.example.com blog.example.com parkingdomain.com www.parkingdomain.com
3. Configure a cron job to automatically renew the certificate each month
4. Configure web server name to: example.com
5. Enable HTTP to HTTPS redirection (example: redirect http://example.com to https://example.com)
6. Enable www to non-www redirection (example: redirect www.example.com to example.com)
7. Start web server once all changes have been performed
# 無誤後按 [Y] 或 [Enter]
Do you agree to these changes? [Y/n]: Y
-----------------------------------------------------------
Create a free HTTPS certificate with Let's Encrypt
Please provide a valid e-mail address for which to associate your Let's Encrypt certificate.
Domain list: example.com www.example.com parkingdomain.com blog.example.com parkingdomain.com www.parkingdomain.com
Server name: example.com
# 如果憑證快過期還沒更新,會收到 email 通知提醒,不會顯
# 示在憑證任何地方,這裡輸入有效的 email。
E-mail address []: david@gmail.com
The Let's Encrypt Subscriber Agreement can be found at:
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf
# 用戶協議按 [Y] 同意才能繼續 Do you agree to the Let's Encrypt Subscriber Agreement? [Y/n]: Y ---------------------------------------------------------------------------- Performing changes to your installation The Bitnami HTTPS Configuration Tool will perform any necessary actions to your Bitnami installation. This may take some time, please be patient. ---------------------------------------------------------------------------- Success The Bitnami HTTPS Configuration Tool succeeded in modifying your installation. The configuration report is shown below. # 更名備份變動之前的檔案 Backup files: * /opt/bitnami/apache/conf/httpd.conf.back.202203200404 * /opt/bitnami/apache/conf/bitnami/bitnami.conf.back.202203200404 * /opt/bitnami/apache/conf/bitnami/bitnami-ssl.conf.back.202203200404 * /opt/bitnami/apache/conf/vhosts/wordpress-https-vhost.conf.back.202203200404 * /opt/bitnami/apache/conf/vhosts/wordpress-vhost.conf.back.202203200404 Find more details in the log file: # 背景處理過程紀錄檔 /tmp/bncert-202203200404.log If you find any issues, please check Bitnami Support forums at: https://community.bitnami.com Press [Enter] to continue:
哇啦,大功告成!!
這時再開啟瀏覽器,手動輸入 http://www.example.com (不加S),如果網址自動去掉 www 並出現鎖頭,也沒跳出警告訊息就成功了。
💡Let’s Encrypt 憑證本身支援萬用字元(wildcard,如: *.example.com)一次囊括所有子網域,但除了 bncert-tool 不支援,要改用 Let’s Encrypt 自己的更新工具 Lego Client + crontab 單獨設定外,還取決於 DNS 供應商支不支援。
參考資料: