Cloudflare Pages大量刪除已部署資料的方法

透過Cloudflare Pages部署網站時,有時候會遇到需要大量刪除已部署資料的情況。如果你的Cloudflare Pages專案中有超大量的已部署資料需要刪除,那麼透過WebUI介面刪除資料是無效的(Cloudflare不會讓你刪除),這篇文章就是在討論如何通過官方指定的Node.js手段來刪除已部署資料。

Cloudflare Pages刪除大量的已部署資料

這個已知問題在Cloudflare官方文件中有提到,他們稱為Delete a project with a high number of deployments,在這個連結中我們看到npm install就知道需要透過Node.js來操作了。

Step 1. 透過wsl安裝ubuntu環境

wsl --install -d ubuntu-24.04

安裝後帳號密碼隨便輸入,反正運作完就要砍了。

Step 2. 安裝後切換到最高權限,以免後面在那邊整路一直切sudo。

sudo -i

Step 3. 升級套件管理包,並安裝Node.js環境。

# Update package lists
apt-get update && apt-get install -y curl
# Install NVM (Node Version Manager)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# Load NVM
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# Install Node.js (latest LTS version)
nvm install --lts

安裝後輸入檢視Node.js版本號,如果有顯示代表成功了。

node -v

Step 4. 到官方文件下載delete-all-deployments.zipDelete a project with a high number of deployments,下載後把ZIP解壓縮,並讓wsl ubuntu可以存取到這個資料夾。

Step 5. 進入解壓縮後的資料夾,輸入下列指令安裝相關套件。

npm install

Step 6. 接著我們需要取得Cloudflare的API Token,請到Cloudflare profile頁面下的API Token建立一個API Token,進入建立Token頁面建議直接點選編輯 Cloudflare Workers這個範本去建立會比較快,因為這個Token需要有Pages的刪除權限。一旦建立這個Token後請把它複製起來,這將會是CF_API_TOKEN參數的值。

Step 7. 接著我們需要取得Cloudflare的Account ID,請點選Cloudflare左上角的Logo進入到你這個帳號的首頁,接著點帳號名字旁邊的三個點選取複製帳號ID,這將會是CF_ACCOUNT_ID參數的值。

Step 8. 接著我們需要取得Cloudflare Pages專案的名稱,請進入到Cloudflare的workers-and-pages頁面,點選你想要移除部署的專案名稱,這將會是CF_PAGES_PROJECT_NAME參數的值。

Step 9. 最後在這個解壓縮的資料夾中,輸入下列指令來刪除大量的已部署資料:

CF_API_TOKEN=XXX CF_ACCOUNT_ID=XXX CF_PAGES_PROJECT_NAME=YourPagesProjectName CF_DELETE_ALIASED_DEPLOYMENTS=true npm start

移除補充:如果已經完成一切的工作,那麼可以順便把WSL新增的機器刪除掉,另外也可以順便把剛才申請的API Key刪除掉,維持環境整潔。

wsl --unregister ubuntu-24.04

後記

Cloudflare官方建議的這個方法其實也就是透過JS的方式去撈網頁每頁面的資料,然後再逐筆下刪除指令,當你Cloudflare Pages部署的數量超多的時候,其實這個程式還是常常會跳出錯誤,這非常的惱人。建議操作上如果可以的話,把這個指令外部再包一個.sh的迴圈,讓它重複迴圈個100次之類的,讓失敗的時候可以自動重試,這樣會比較不會卡住。祝各位刪除順利!

CloudflarePages BulkDeploymentDeletion NodeJs DeletionScript KnownIssues NpmInstall WslUbuntu NvmSetup ApiToken AccountId PagesProjectName CfEnvironmentVariables DeleteAliasedDeployments WorkersAndPages WebUiLimitation