[WordPress] 本機開發環境神器 – DDEV!

本篇文章更新時間:2024/06/26
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣新台幣 贊助支持。


DDEV 真的要說是神器,不誇張。

Docker-based local PHP+Node.js web development environments

看說明就是一套使用 Docker 容器技術,且以 PHP + Node.js 為主要開發環境為導向設計的工具。

但! 這套工具把 WordPress 環境準備的很完整,除了把「wp」指令內建外,建立一個網站的 SSL 憑證也整合好工具(mkcert)來完成。

以下筆記的環境以 Mac 電腦為主。

環境準備

  1. Docker 的執行環境。(此步驟大推直接安裝 OrbStack 這套工具,安裝好啟動就可以把環境準備好了,而且速度超快!)
  2. WP-CLI

安裝 DDEV

Mac 直接推薦使用 brew 來安裝:

brew install ddev/ddev/ddev

更新的方法:

brew upgrade ddev

再來,因為 DDEV 有搭配 mkcert 這個憑證管理工具來開站,所以也是要安裝一下:

brew install mkcert

安裝好後進行一次初始化:

mkcert -install

完成這步驟的設定後基本上就算是裝完了!

建立 WordPress DDEV 環境專案的流程

主要大方向只有四個步驟:

  1. 建立一個資料夾,或是到既有的專案目錄下。
  2. 進入該專案目錄下後,執行 ddev config 指令來初始化這個環境的專案。
  3. 依照提示輸入完一些資料後,執行 ddev start 指令來啟動這個環境。
  4. 執行 ddev launch 開啟網站來開始動工。

這邊步驟二會要輸入專案名稱,也最後會等於網站的網域名稱,要注意輸入的名字要符合網域名稱命名規範(不能有除了「.」或「-」以外的特殊符號,當然中文也避免)

其次會要你選擇輸入是哪一種專案類型,這部分有夠貼心,會幫你偵測目錄與檔案結構來判斷,基本上都會幫你預先填好。支援的 PHP 框架也不少,可以參考這份 CMS Quickstarts 文件

這邊要注意的是啟動這個環境的目錄要是一個 WordPress 根目錄。

這個根目錄可以是原本就有的(從某個線上站的備份)也可以是新建立(wp core download)的,但因為要符合環境需求,這邊 wp-config.php 會被接管走,如果是現有的環境,要注意原本該檔案中的設定需要啟動後再來覆寫。

然後 ddev config 設定過後,WordPress 跟目錄下會出現一個 .ddev 的隱藏資料夾。先前提示的設定如果有想調整的都可以在這邊覆寫。

主要描述檔案在: .ddev/config.yaml,如果有調整一些參數,像是 PHP 版本、Nginx 組態、資料庫組態等,只需要 ddev restart 即可。

PHP 版本從 5.6 到 8.2 都可以選,真的是很方便!更多詳細的參數可選範圍,可以參考文件 Config Options

環境參數的繼承覆寫機制

這套環境的可控程度之高,真的令人讚嘆!

除了 config.yaml 中可以描述觸發執行指令的勾點與對應事件外,還可以在 DDEV 專案中的 .ddev 資料夾下找到對應 Nginx 設定組態目錄 nginx_full,然後還可以建立 mysql 資料夾來覆寫 my.cnf

能夠動到 Nginx 以及 MySQL 資料庫這邊的設定其實就已經滿足大部分條件,這邊就不多寫如果需要補充 PHP extension 的更細節了。更多資訊都可以在 Extending and Customizing Environments 文件 裡找到。

快速開一個 WordPress 專案的網站

這邊我寫了一個簡易的 Shell Script:

#!/usr/bin/env bash
read -p "Project Name: " pname
read -p "PHP Version: " php
read -p "WP Version: " wpv
read -p "Import DB: " sqlpath
read -p "Replace URL: " url
current_path=$(pwd)
if [[ -z "$pname" ]]; then
    echo "請輸入不重複專案名稱"
    exit
elif [[ ! -e "$current_path/$pname" ]]; then
    mkdir $current_path/$pname
else
    echo "專案目錄已經存在,請檢查是否已經建立過"
    exit
fi
cd $current_path/$pname
#https://ddev.readthedocs.io/en/latest/users/configuration/config/
ddev config --php-version "$php" --project-type wordpress --project-name "$pname"
ddev start
if [ -n "$wpv" ]; then
ddev wp core download --version="$wpv" --locale=zh_TW --force
fi
ddev wp core install --url=https://"$pname".ddev.site --title="$pname" --admin_user=admin --admin_password=123456 [email protected] --locale=zh_TW
if [ -n "$sqlpath" ]; then
ddev import-db "$pname" < "$sqlpath"
fi
if [ -n "$url" ]; then
ddev wp search-replace "$url" https://"$pname".ddev.site
fi

把這 Script,存擋成 xxx.sh (xxx 自行帶入名稱),然後賦予執行的權限 chmod +x xxx.sh 後,只要執行這支程式,就可以快速開一個網站起來用。

線上專案導入本機 DDEV 環境

這邊有以下幾個流程:

  1. 備份線上專案的資料庫 SQL 檔案
  2. 備份線上專案的 wp-content 目錄
  3. 本機建立一個新的 WordPress 網站專案(同上一章節)
  4. 將線上端備份的 wp-content 目錄覆蓋新專案中的 wp-content(這邊都是假設網站有循正規開發流程,不去動到 WordPress Core 架構)
  5. 使用 ddev import-db 指令把線上端備份的 SQL 資料庫檔案匯入
  6. 使用 ddev wp search-replace 線上端網址 本機專案網址 指令來取代字串,符合本機開發環境需求。(此步驟不一定需要)
  7. 如果媒體庫的 uploads 資料夾沒備份,可以透過修改 .ddev/nginx_full/nginx-site.conf 檔案來補上下面設定(記得要刪除#ddev-generated此行來避免被預設覆蓋),完成後 ddev restart 重新啟動。
    location ~ /wp-content/uploads/.* {
            if (!-f $request_filename) {
                rewrite ^/wp-content/uploads/(.*)$ https://線上端網址/wp-content/uploads/$1 redirect;
            }
    }

打包 wp-content 與匯出 SQL 資料庫檔案部分,我都已經在 一介資男(Mxp.TW) 開發工具箱 外掛中實作了,甚至是更早出現的資料庫關鍵字取代工具,也是能用在新舊網址的替換上。

操作上還建議搭配 phpMyAdmin 的工具,可以使用指令: ddev get ddev/ddev-phpmyadmin 來加上這個功能。 [ref]

後記

本篇還只是就基本會用到的情境來筆記,其他貼心的功能,像是列出來目前開了哪些專案的 ddev list 與刪除專案 ddev delete 專案名 時預設會幫你把資料庫做備份到 .ddev/db_snapshots,再來還有整合 ngork 的 ddev share 分享這個開發成果用的功能...等等

使用 OrbStack 的速度,再加上 DDEV 這套工具的方便性,真是覺得算目前開發環境的最佳解了!


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____36%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon