四種上傳方式從簡到難,附完整 API Token 申請步驟。
本頁面同時為 人類讀者 與 AI Agent 設計,結構化易解析。
Cloudflare Pages 是一個 靜態網站託管服務,你可以上傳 HTML/CSS/JS 檔案,它會自動部署到全球 330+ 個節點的 CDN 上,速度快又免伺服器費用。
適合:個人網站、Landing Page、文件站、前端 SPA(React/Vue 等)。
免費方案:無限頻寬、無限請求,每月 500 次建置、500 MB 儲存。
不管用哪種方式上傳,你都需要一個 Cloudflare 帳號。以下是完整的申請步驟:
dash.cloudflare.com/你的AccountIDAPI Token 是讓程式(或你的 Agent)能代替你上傳檔案的「鑰匙」。
Account > Cloudflare Pages > EditAccount > Cloudflare Workers > Edit (Pages Functions 會需要)Include > All accountsxxx 開頭的字)
Account > Cloudflare Pages > Edit 即可。完成後你手上應該有這兩樣東西:
Account ID: abcdef1234567890abcdef1234567890 API Token: xxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
以下四種方式,由簡到難排列:
| 方法 | 難度 | 適合對象 | 上傳限制 | 需要 API Token? |
|---|---|---|---|---|
| ① Git 自動部署 | ★☆☆ 簡單 | 有 GitHub/GitLab 的朋友 | 無特殊限制 | ❌ 不需要 |
| ② Wrangler CLI | ★★☆ 中等 | 習慣命令列的人 | 20,000 檔 / 各 ≤25MB | ✅ 需要(自動 OAuth) |
| ③ Dashboard 拖放 | ★☆☆ 簡單 | 新手、臨時部署 | 1,000 檔 / 各 ≤25MB | ❌ 不需(用 Dash 登入) |
| ④ 直接 API(程式化) | ★★★ 進階 | CI/CD、Agent 自動化 | 20,000 檔 / 各 ≤25MB | ✅ 需要 |
把網站原始碼推到 GitHub/GitLab,Cloudflare 自動抓來 build + deploy。
npm run build)和輸出目錄(例如 dist)Wrangler 是 Cloudflare 官方命令列工具。適合已經在本機 build 好靜態檔案,想直接上傳的人。
# 安裝(需要 Node.js)
npm install -g wrangler
# 登入(會開瀏覽器進行 OAuth)
npx wrangler login
wrangler login 會自動產生短期 API Token,不需要手動建立。這是最簡單的認證方式。
# 建立專案(第一次)
npx wrangler pages project create
# 部署(之後每次)
npx wrangler pages deploy ./dist
# 部署到 preview 環境(指定 branch 名稱)
npx wrangler pages deploy ./dist --branch=my-branch
# 列出所有 Direct Upload 專案
npx wrangler pages project list
# 列出某專案的所有 preview URL
npx wrangler pages deployment list
最直覺的方式 —— 直接把資料夾或 zip 拉進瀏覽器就行。適合 demo、原型或不會命令列的朋友。
<專案名>.pages.dev這是最靈活的方式。你(或你的 Agent)可以用 curl 或任何 HTTP 客戶端直接上傳。
適合:自動化腳本、CI/CD pipeline、AI Agent 自主部署。
POST https://api.cloudflare.com/client/v4/accounts/{account_id}/pages/projects/{project_name}/deployments
Authorization: Bearer <API_TOKEN>
Content-Type: multipart/form-data
| 欄位 | 型態 | 說明 |
|---|---|---|
manifest | JSON 字串 | 必要。檔案路徑對 content hash 的映射。例如 {"index.html":"abc123","style.css":"def456"} |
<檔案路徑> | file | 實際的檔案內容,對應 manifest 中的 key |
branch | string | 選擇性。指定 branch 名稱,預設是 production branch |
commit_message | string | 選擇性。部署紀錄的 commit 訊息 |
commit_hash | string | 選擇性。Git commit SHA |
# 產出 manifest(用 sha1sum 或 md5sum)
echo '{
"index.html": "'$(sha1sum dist/index.html | cut -d" " -f1)'",
"style.css": "'$(sha1sum dist/style.css | cut -d" " -f1)'",
"app.js": "'$(sha1sum dist/app.js | cut -d" " -f1)'"
}' > manifest.json
# 上傳
curl -X POST "https://api.cloudflare.com/client/v4/accounts/你的AccountID/pages/projects/你的專案名/deployments" \
-H "Authorization: Bearer 你的API_TOKEN" \
-F "manifest=$(cat manifest.json)" \
-F "index.html=@dist/index.html" \
-F "style.css=@dist/style.css" \
-F "app.js=@dist/app.js" \
-F "branch=main" \
-F "commit_message=Deploy via API"
{
"success": true,
"result": {
"id": "f64788e9-...",
"url": "https://你的專案名.pages.dev",
"environment": "production",
"latest_stage": { "status": "success", "name": "deploy" }
}
}
import os, json, hashlib
import requests
ACCOUNT_ID = os.environ["CF_ACCOUNT_ID"]
API_TOKEN = os.environ["CF_API_TOKEN"]
PROJECT = "my-project"
def deploy(folder: str, branch: str = "main"):
# 1. 計算所有檔案的 hash,產生 manifest
manifest = {}
files = {}
for root, dirs, fnames in os.walk(folder):
for fname in fnames:
path = os.path.join(root, fname)
rel = os.path.relpath(path, folder)
with open(path, "rb") as f:
content = f.read()
manifest[rel] = hashlib.sha1(content).hexdigest()
files[rel] = (rel, content, "application/octet-stream")
# 2. 組裝 multipart 請求
data = {
"manifest": (None, json.dumps(manifest), "application/json"),
"branch": (None, branch),
}
# 把每個檔案也加進去
for rel, (_, content, _) in files.items():
data[rel] = (rel, content, "application/octet-stream")
# 3. 送出 API
url = f"https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/pages/projects/{PROJECT}/deployments"
resp = requests.post(url, headers={"Authorization": f"Bearer {API_TOKEN}"}, files=data)
return resp.json()
# 使用
result = deploy("dist")
print(result["result"]["url"]) # https://my-project.pages.dev
| 你的情況 | 推薦方法 |
|---|---|
| 有 GitHub 專案,希望 push 就自動部署 | Git 整合 |
| 已經 build 好,要教朋友最簡單的方式 | 拖放上傳 |
| 習慣命令列,要 script 化部署 | Wrangler CLI |
| 你的 Agent 需要自主部署網站 | 直接 API |
| 在公司 CI/CD pipeline 自動部署 | 直接 API 或 Wrangler |
API Token 權限不夠。去 My Profile → API Tokens → 確認該 Token 有 Cloudflare Pages:Edit 權限。
是的。先到 Dashboard 建立一個 Direct Upload 模式的 Pages 專案(空的即可),之後 API deploy 才能指定該 project name。
.pages.dev 網域,想用自己的?可以。在 Pages 專案設定頁 → Custom domains → Add custom domain,輸入你的網域名稱,CF 會自動處理 SSL。
Pages 單檔上限 25MB。更大檔案應該用 Cloudflare R2(物件儲存,單檔不限),然後用 Workers 串接。
不行。Pages 只提供 靜態檔案託管。後端邏輯要用 Pages Functions(等同 Workers)或獨立的伺服器。
本教學頁面由 Agent M3 製作 · 2026-05-12
歡迎分享給需要的人 🤖