Docker、nginx、PHP與MySQL的角色:旅宿主人的WordPress伺服器入門

住客的存取經nginx、PHP與WordPress、MySQL成為網頁,Docker整理各服務,由人員管理的插畫 WordPress 入門

使用VPS營運WordPress時,會遇到Docker、nginx、PHP與MySQL等名稱。有時它們都被稱為「伺服器」,但角色不同。

旅宿主人不需要記住指令。然而,若知道各組件的工作,故障時較容易說明「整個網站停止」「只能看到圖片」或「出現資料庫連線錯誤」。

先看整體流程。

住客瀏覽器 → nginx → 以PHP執行WordPress → 從MySQL取得文章與設定 → 將HTML回傳瀏覽器

使用Docker的配置,會分開執行各組件,再統一管理。

以旅館比喻

技術 旅館比喻 主要角色
Docker 分開各負責人的作業區與營運台帳 在隔離環境,以可重現方式執行軟體
nginx 入口與櫃檯 受理URL、分派、圖片傳送與HTTPS
PHP 組合介紹資訊的人員 執行WordPress程式,製作頁面
WordPress 旅宿介紹作業 使用文章、佈景主題與外掛決定內容
MySQL 住宿台帳與資料庫 保存與搜尋文章、設定、使用者等

比喻只是理解的入口。實際配置也可能使用Apache、MariaDB、CDN或快取等其他組件。

頁面顯示前的流程

住客開啟客房頁面時,一般流程如下。

  1. 瀏覽器存取網域URL
  2. DNS指出連線目標伺服器
  3. nginx受理HTTPS連線
  4. 直接回傳圖片等,或將WordPress處理交給PHP
  5. PHP執行WordPress
  6. WordPress向MySQL查詢文章與設定
  7. PHP組合HTML
  8. nginx將結果回傳瀏覽器
  9. 瀏覽器顯示頁面

一個畫面背後有多個組件運作,因此即使「WordPress已是最新版本」,OS、PHP或資料庫有問題,仍可能無法顯示。

Docker的角色

Docker官方資料將容器描述為在主機上隔離執行的處理程序。有些配置會將WordPress、nginx、PHP與資料庫分為不同容器。

Docker能帶來什麼

  • 將軟體與必要檔案視為一個整體處理
  • 較容易減少開發、測試與正式環境的配置差異
  • 較容易逐一啟動、停止與更新組件
  • 較容易將配置記錄於檔案並重現

Docker不會自動代辦的事項

  • OS與Docker本身更新
  • 選擇與更新安全映像檔
  • 保護密碼與秘密資訊
  • 資料庫備份
  • 磁碟容量與紀錄管理
  • 故障監控
  • WordPress更新後的預訂確認

即使容器可刪除後重新建立,若弄錯資料保存位置,仍可能遺失文章或圖片。有Docker不代表不需要備份。

nginx的角色

nginx官方初學者資料說明靜態檔案傳送、代理,以及透過FastCGI將請求分派給PHP等。

WordPress配置中的主要工作如下。

  • 接收HTTP與HTTPS存取
  • 依網域選擇目標網站
  • 回傳圖片、CSS與JavaScript等
  • 將需PHP處理的存取交給PHP-FPM
  • 設定大小與時間等限制
  • 使用TLS憑證加密通訊
  • 記錄存取與錯誤紀錄

nginx出問題時的例子

  • 無法連接整個網站
  • 502、504等錯誤
  • 出現HTTPS警告或顯示其他網站
  • 無法上傳大型圖片
  • 只有特定URL出現404
  • 重新導向不斷循環

修改設定前,先檢查語法並備份;反映後確認所有網域。

PHP的角色

PHP官方手冊說明,PHP是在伺服器端執行、將生成的HTML傳給瀏覽器的語言。WordPress核心與許多佈景主題、外掛都以PHP執行。

PHP工作例子如下。

  • 依URL進行WordPress處理
  • 從MySQL取得文章與設定
  • 使用佈景主題生成HTML
  • 處理表單輸入
  • 執行外掛功能
  • 呼叫電子郵件寄送處理

PHP出問題時的例子

  • 顯示「嚴重錯誤」
  • 出現白畫面
  • 出現502錯誤
  • 只有管理畫面無法運作
  • 只有特定外掛功能失敗
  • 記憶體不足或處理逾時

更新PHP後,舊佈景主題與外掛可能不支援。不要同時疊加WordPress更新與PHP修改,先在測試環境確認。

WordPress的角色

WordPress是以PHP執行的Web應用程式。

  • 管理文章與固定頁面
  • 以佈景主題決定外觀
  • 透過外掛新增SEO、表單、預訂等
  • 管理管理員與編輯者權限
  • 將內容保存到MySQL

即使只考慮WordPress備份,也需同時有檔案與資料庫。詳細內容請閱讀WordPress更新前的備份與還原。

MySQL的角色

MySQL官方資料將MySQL描述為支援多位使用者的SQL資料庫伺服器。

WordPress主要保存以下內容。

  • 文章、固定頁面、草稿與修訂紀錄
  • 使用者與權限
  • 網站URL與各種設定
  • 留言
  • 選單與小工具
  • 外掛建立的資料表與設定

圖片本身通常以檔案保存,圖片標題與URL等也會保存到資料庫。因此,檔案與資料庫的時間點不一致,就可能發生資料不一致。

MySQL出問題時的例子

  • 「建立資料庫連線時發生錯誤」
  • 無法保存文章與設定
  • 頁面顯示極慢
  • 磁碟不足,無法寫入
  • 只有資料庫反覆重新啟動

不要將MySQL直接公開到網際網路,應配置為只有WordPress等必要連線來源可使用。

容器與資料保存位置

Docker配置的重要事項之一,是區分容器與持久資料。

  • 容器:可重新建立的執行環境
  • 映像檔:建立容器的設計來源
  • 儲存卷與掛載:需保留的文章圖片、DB等資料
  • Compose等配置檔:各組件如何連接

若設計為資料只放在容器內,重新建立時可能遺失。請讓管理員能說明目前WordPress圖片、MySQL資料、設定與憑證保存在哪裡。

更新需區分層級

一次更新全部,便無法找出原因。

  1. 記錄目前配置與版本
  2. 備份檔案、DB與配置檔
  3. 在測試環境更新一個層級
  4. 確認紀錄與啟動狀態
  5. 確認WordPress顯示與管理畫面
  6. 確認預訂、表單與電子郵件
  7. 在正式環境只更新一個層級
  8. 進行同樣確認

不要在同一天集中進行OS、Docker、nginx、PHP、MySQL與WordPress的重大更新。

故障時的查看順序

旅宿主人應記錄症狀,而非指令。

症狀 可檢查的候選層級
無法連接整個網域 DNS、VPS、網路、nginx
只能看到圖片,沒有正文 PHP、WordPress、MySQL
502錯誤 nginx至PHP等的連線
DB連線錯誤 MySQL、登入憑證、容量、網路
只有管理畫面出現嚴重錯誤 PHP、佈景主題、外掛
只有詢問無法送達 WordPress、PHP、郵件路徑
只有預訂連結無法開啟 WordPress內容、外部預訂服務

請記錄URL、發生時間、畫面、剛才的變更,以及是否所有人都遇到。截圖不要包含秘密資訊或顧客資料。

最基本的監控

  • VPS已啟動
  • 可透過HTTPS連接nginx
  • PHP有回應
  • 可建立必要的MySQL連線
  • 磁碟容量有餘裕
  • TLS憑證在有效期內
  • 備份成功
  • 首頁與預訂導線正常
  • 詢問郵件送達

即使容器顯示「執行中」,應用程式也未必正常。也請從外部確認實際頁面。

向管理員提出的問題

  • 是否使用Docker,配置檔在哪裡
  • nginx、PHP與MySQL目前版本為何,由誰負責更新
  • WordPress圖片與DB在哪裡持久保存
  • 秘密資訊在哪裡安全管理
  • 由誰確認紀錄與磁碟容量
  • 備份是否包含配置檔、圖片與DB
  • 其中一個容器停止時,是否會通知
  • 合約結束時,如何交付配置與資料

答案不需包含秘密值,只記錄所在位置、方式與負責人。

請AI解釋配置的提示詞

請向IT初學者解釋旅宿的WordPress伺服器配置。
先不要連線、更新、重新啟動或修改設定。

請根據可唯讀取得的配置資料,整理以下事項。
- 住客的存取如何成為顯示頁面
- Docker、nginx、PHP、WordPress與MySQL的角色
- 各組件持久資料與設定保存位置的類型
- 各組件停止時可見的症狀
- 更新、監控與備份負責人
- 不明事項與向管理公司提出的問題

不要顯示密碼、私密金鑰、環境變數的值或顧客資訊。
不要將推測寫成事實,請標記「尚未確認」。

總結

  • nginx是Web入口,負責分派
  • PHP執行WordPress,製作HTML
  • MySQL保存文章、設定等
  • Docker讓組件較易隔離與重現,但不代辦維護
  • 在同一時間點備份WordPress圖片與DB
  • 不只監控容器啟動,也監控公開頁面與預訂導線
  • 逐層更新,由人員確認營業功能

各項管理由誰負責,可閱讀VPS營運WordPress的責任範圍。

參考資料

※實際配置也可能使用Apache、MariaDB、CDN、快取或代管DB等。請確認管理員的配置資料。

已複製標題與網址