本篇文章更新時間: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 電腦為主。
內容目錄
環境準備
安裝 DDEV
Mac 直接推薦使用 brew
來安裝:
brew install ddev/ddev/ddev
更新的方法:
brew upgrade ddev
再來,因為 DDEV 有搭配 mkcert
這個憑證管理工具來開站,所以也是要安裝一下:
brew install mkcert
安裝好後進行一次初始化:
mkcert -install
完成這步驟的設定後基本上就算是裝完了!
建立 WordPress DDEV 環境專案的流程
主要大方向只有四個步驟:
- 建立一個資料夾,或是到既有的專案目錄下。
- 進入該專案目錄下後,執行
ddev config
指令來初始化這個環境的專案。 - 依照提示輸入完一些資料後,執行
ddev start
指令來啟動這個環境。 - 執行
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 環境
這邊有以下幾個流程:
- 備份線上專案的資料庫 SQL 檔案
- 備份線上專案的
wp-content
目錄 - 本機建立一個新的 WordPress 網站專案(同上一章節)
- 將線上端備份的
wp-content
目錄覆蓋新專案中的wp-content
(這邊都是假設網站有循正規開發流程,不去動到 WordPress Core 架構) - 使用
ddev import-db
指令把線上端備份的 SQL 資料庫檔案匯入 - 使用
ddev wp search-replace 線上端網址 本機專案網址
指令來取代字串,符合本機開發環境需求。(此步驟不一定需要) - 如果媒體庫的
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 這套工具的方便性,真是覺得算目前開發環境的最佳解了!