Featured image of post 在 Ubuntu 上完整移除 WordPress (LAMP) 並保留 Traefik 的教學

在 Ubuntu 上完整移除 WordPress (LAMP) 並保留 Traefik 的教學

本文介紹如何在 Ubuntu 上完整移除 WordPress 及 LAMP 環境(Apache、MySQL、PHP),同時保留以 Docker 運行的 Traefik 反向代理,適合想從傳統安裝方式轉換至容器化架構的使用者。

1. 環境說明

本教學適用於以下環境:

  • WordPress 以 LAMP 方式直接安裝在 Ubuntu 主機上 (Apache + MySQL + PHP)
  • Traefik 以 Docker Compose 容器化方式運行,作為反向代理
  • 目標:完整移除 WordPress 及 LAMP,保留 Traefik 繼續服務其他服務

一開始玩Ubuntu的時候沒想太多,原本只是打算換個作業系統來玩看看而已,所以裝個桌面版本,結果越玩越有興趣,開始瞎忙服務如NextCloud及WordPress等,架設網頁伺服器、資料庫啥的,到後期才發現還有Docker這個好東西,所以打算利用放假期間來好好整理一下伺服器。

考量一番之後決定把WordPress關掉改用hugo來利用CloudFlare page架設,畢竟我想要的也就只是簡單部落格功能,其他的都不需要。但請神容易送神難,網路上很多教學都教你怎麼安裝,鮮少人會教怎麼移除。


2. 確認 MySQL 資料庫狀況

先查看主機上有哪些資料庫,確認哪些可以刪除:

sudo mysql -e "SHOW DATABASES;"

系統預設庫(不可刪除):information_schemamysqlperformance_schemasys

若看到 wordpress 或其他舊服務的資料庫,需先確認這些服務是否真的已經不再使用。

注意:若你有其他服務(例如舊版裸機安裝的 Nextcloud)已改用 Docker 內建資料庫,其在主機 MySQL 上的殘留資料庫可以一併刪除。確認方式為查看該服務的 Docker 容器使用哪種資料庫:

docker ps | grep <服務名稱>

若看到 postgresqlmariadb 等獨立容器,代表主機上的 MySQL 資料庫是舊殘留,可安全刪除。


3. 移除 MySQL

確認無其他服務使用主機 MySQL 後,執行移除:

sudo systemctl stop mysql
sudo apt purge "mysql-*" -y
sudo apt autoremove -y
sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql
sudo deluser mysql 2>/dev/null
sudo delgroup mysql 2>/dev/null

確認已完全移除:

systemctl status mysql
# 應顯示:Unit mysql.service could not be found.

注意:在 zsh 環境下,mysql-server-core-* 這類萬用字元需加引號,或直接使用 "mysql-*" 一次處理所有套件。


4. 移除 WordPress 檔案

確認 WordPress 所在目錄:

ls /var/www/

刪除對應目錄(路徑依實際情況替換):

sudo rm -rf /var/www/wordpress
sudo rm -rf /var/www/html

5. 移除 Apache

先確認 Apache 目前啟用了哪些虛擬主機,避免誤刪仍在使用的設定:

ls /etc/apache2/sites-enabled/
cat /etc/apache2/sites-enabled/*.conf

確認所有設定都是舊的殘留後,執行移除:

sudo systemctl stop apache2
sudo apt purge apache2 apache2-bin apache2-data apache2-utils libapache2-mod-rpaf python3-certbot-apache -y
sudo apt autoremove -y
sudo rm -rf /etc/apache2
sudo rm -rf /var/lib/apache2

若移除時出現「目錄不是空的,不會刪除」的警告,屬正常保護行為,手動執行 rm -rf 清除殘留目錄即可。


6. 移除 PHP

列出目前已安裝的 PHP 套件(確認範圍):

dpkg -l | grep -E "^ii.*(apache|php)" | awk '{print $2}'

批次移除所有 PHP 套件:

sudo apt purge "php*" -y
sudo apt autoremove -y
sudo rm -rf /etc/php

7. 移除 Let’s Encrypt 憑證(Certbot 管理的部分)

若你的 Traefik 是自己管理 ACME 憑證(通常存在 Docker volume 或掛載檔案中),則主機上的 /etc/letsencrypt 是舊版 Certbot 的殘留,可以安全刪除:

先確認 Traefik 的憑證存放位置:

docker inspect traefik 2>/dev/null | grep -i "letsencrypt\|acme\|Binds" | head -20

若看到類似 "acme.storage=/acme.json" 並且掛載路徑指向主機上的某個 json 檔,代表 Traefik 完全獨立管理憑證,執行:

sudo apt purge certbot -y
sudo rm -rf /etc/letsencrypt

8. 清理 Traefik 的 WordPress 路由設定

找到 Traefik 動態設定目錄:

find /path/to/traefik -name "*.yml" -o -name "*.yaml" 2>/dev/null

查看 WordPress 設定檔內容確認只有 WordPress 相關設定:

cat /path/to/traefik/configurations/wordpress.yml

確認後直接刪除:

rm /path/to/traefik/configurations/wordpress.yml

Traefik 會自動偵測檔案變更,不需重啟。確認 log 無異常:

docker logs traefik --tail 20

9. 清理防火牆規則

查看目前 UFW 規則:

sudo ufw status numbered

找到 WordPress 使用的 Apache port(例如 480)對應的規則編號,刪除:

sudo ufw delete <規則編號>

注意:若同時有 IPv4 和 IPv6 兩條規則,都要刪除。刪除時先刪編號大的,避免編號重排造成誤刪。

若有不再使用的其他 port(例如 FTP 的 20/21),也建議一併刪除以減少攻擊面。


10. 清理 Cloudflare DNS 記錄

在 Cloudflare 儀表板中,找到 WordPress 網域對應的 A 記錄(例如 xixinote.example.com),直接刪除。


11. 取消 Jetpack Monitor 通知

若 WordPress 有安裝 Jetpack 並啟用網站監控,下線後會持續收到停機警報信。

處理方式:

  1. 前往 wordpress.com 登入帳號
  2. 進入 Jetpack → Monitor
  3. 找到對應網站,關閉 Monitor 功能或將網站從 Jetpack 移除

12. 清理完成確認

執行以下指令確認各項目已移除:

# Apache 已移除
systemctl status apache2

# PHP 已移除
php --version

# MySQL 已移除
systemctl status mysql

# WordPress 目錄已清空
ls /var/www/

以上指令皆應回傳「找不到」或空白結果,代表 WordPress 及 LAMP 完整清除完成。


13. 最終狀態總覽

項目處理結果
WordPress 資料庫已移除
舊服務殘留資料庫已移除
WordPress 檔案已移除
MySQL已移除
Apache已移除
PHP (全版本)已移除
Certbot + /etc/letsencrypt已移除
Traefik WordPress 路由設定已移除
UFW WordPress 相關規則已移除
Cloudflare DNS 記錄已移除
Jetpack Monitor 通知已關閉
Traefik 本體保留,正常運作
其他 Docker 服務保留,不受影響