我該看哪一份?
部署,就是「把電腦裡做好的網頁,搬到網路上讓大家看得到」。這裡整理了三種做法,九成的需求第一種就夠。
Pages 靜態網頁
像把海報貼到公佈欄。網頁做好是幾個檔案,丟上去大家就看得到,沒有資料庫。
實例:課前互動網頁、行前指南、課堂筆記、直播公告頁
Worker + D1
像開一間有店員和帳本的小店。Worker 是店員(回應訪客動作),D1 是帳本(存下報名資料)。
實例:超級業務力直播報名系統
Pages + Access 門禁
公佈欄外面加一道刷卡門。進門前要用 Email 收驗證碼,白名單裡的人才進得來。
實例:MJ 行程管理網頁
對照表
| 你要做的事 | 看這份 | 難度 |
|---|---|---|
| 第一次接觸,什麼都還沒裝 | ★ | |
| 把做好的網頁放上網,拿一個網址分享 | ★ | |
| 做有後端、有資料庫的系統(例如報名表單) | ★★★ | |
| 網頁只想給特定的人看(Email 白名單) | ★★ |
開始前的三句話
00 ・ 前置準備
三種部署都要先做這份。目標:帳號跟工具一次到位,之後不用再回頭補東西。全程免費,不需要信用卡。
一、先搞懂四個名詞
| 名詞 | 它是什麼 | 比喻 |
|---|---|---|
| Cloudflare | 提供「把網頁放上網」服務的公司,個人使用免費 | 免費的雲端房東 |
| Pages | 放靜態網頁的服務,網址長這樣:xxx.pages.dev | 公佈欄 |
| Worker | 會跑程式的小伺服器,網址長這樣:xxx.workers.dev | 24 小時待命的店員 |
| wrangler | 在終端機裡跟 Cloudflare 溝通的指令工具 | 對講機 |
二、註冊 Cloudflare 帳號(5 分鐘)
註冊
打開 dash.cloudflare.com/sign-up,用工作用的 Email 註冊、設密碼。
認證
收認證信、點連結完成。登入後看到的畫面叫 Dashboard(後台),之後會常回來。
三、安裝 Node.js(10 分鐘)
wrangler 需要 Node.js 才能跑。先檢查是否已安裝:
node -v
有出現版本號(例如 v20.x.x,18 以上都可以)就跳過這節。出現 command not found → 去 nodejs.org 下載 LTS 版,一路下一步裝完,關掉終端機重開再檢查一次。
四、讓 wrangler 有權限操作你的帳號(關鍵步驟)
wrangler 要「代表你」去 Cloudflare 上傳檔案,所以要給它一把鑰匙。有兩條路:
路線 A|瀏覽器授權(最簡單,先試這個)
npx wrangler login
會自動打開瀏覽器,按 Allow 授權即可。
路線 B|API Token(卡關時用,也是最可控的做法)
Token 就是一把「限定用途的鑰匙」:
1. Dashboard 右上角頭像 → My Profile → API Tokens → Create Token
2. 選範本 Edit Cloudflare Workers(Pages 和 Worker 部署都夠用)
3. 名稱寫用途 + 日期(例如 deploy-mjlive-20260804)、帳號只選自己的、有效期限設短一點
4. 按 Create → 畫面顯示一長串 Token,只會顯示這一次,先複製起來
5. 回終端機執行(把「貼上你的token」換掉):
export CLOUDFLARE_API_TOKEN=貼上你的token
這行只對「目前這個終端機視窗」有效,關掉視窗鑰匙就自動失效 — 這是優點,不是缺點。
Token 五不一定
五、驗證一切就緒
npx wrangler whoami
有列出你的 Email 和帳號名稱 → 前置準備完成。出現錯誤 → 回第四步重做(九成是 Token 沒 export 成功或已過期)。
六、每個專案開工前的資安檢查(30 秒)
01 ・ Pages 靜態網頁部署
適用:任何「一包 HTML / CSS / JS 檔案」的網頁。成果:拿到 https://你的專案名.pages.dev,全世界都能開。第一次約 15 分鐘,之後更新只要 1 分鐘。
準備網頁資料夾
把要上線的檔案集中在一個資料夾,首頁檔名必須是 index.html:
檢查方式:直接雙擊 index.html 用瀏覽器開,本機看起來是對的,上線後就會是對的。
資安檢查(30 秒,不可跳過)
幫專案取名字
專案名會直接變成網址:取 mj-super-218,網址就是 https://mj-super-218.pages.dev。
規則:只能用小寫英文、數字、連字號 -(不能有中文、空格、底線)。建議格式「品牌或課程-識別」,例如 tuo-0829-yewuli。名字全 Cloudflare 不能重複,被用走就換一個。
上鑰匙
照「00 前置準備」的路線 A 或 B。用 Token 路線的話:
export CLOUDFLARE_API_TOKEN=貼上你的token
部署(就一行)
npx wrangler pages deploy my-event-page --project-name=my-event-page --commit-dirty=true
把兩個 my-event-page 換成你的資料夾名和專案名(兩者可以不同)。第一次跑會問 Create a new project? → 按 Enter 選 Yes。
成功的樣子:最後印出 ✨ Deployment complete! 和一串網址。
驗證(別跳過,用無痕視窗)
開無痕視窗(Cmd + Shift + N)輸入網址,檢查:首頁有出來、圖片有顯示、按鈕點得動。手機也開一次 — 大部分使用者是用手機看的。
刪 Token
回 Dashboard → My Profile → API Tokens → 把剛剛那把刪掉。每次都刪,養成習慣。
之後要更新內容怎麼辦?
改好本機檔案後,重跑步驟 4 + 5 同一行指令即可,網址不變、內容更新。不會建出第二個專案,放心跑。
常見錯誤對照表
| 錯誤訊息/狀況 | 原因 | 解法 |
|---|---|---|
| Authentication error / 10000 | Token 沒設好或過期 | 重新 export,或重發一把 Token |
| project name already exists | 專案名被全球其他人用走 | 換個名字 |
| ENOENT / 找不到資料夾 | 終端機目前位置不對 | 先 pwd 看自己在哪、cd 到正確位置 |
| 網址打開是 404 | 資料夾裡沒有 index.html,或指錯資料夾 | 確認首頁檔名、重新部署 |
| 上線後圖片破圖 | 檔名大小寫不符(本機不分、雲端分) | 檔名和 HTML 引用的大小寫要完全一致 |
| 更新了但畫面沒變 | 瀏覽器快取 | Cmd + Shift + R 或無痕視窗 |
02 ・ Worker + D1 部署
適用:報名系統、投票、留言板 — 任何「要把使用者填的資料存起來」的網站。建議先做過一次 01 熟悉手感。第一次約 1 小時。
先搞懂架構(白話版)
一個專案長這樣:
寫設定檔 wrangler.jsonc
{
// ⚠️ 這個檔會進 git,絕不可寫入任何 token / 密碼
"name": "my-signup",
"main": "src/index.js",
"compatibility_date": "2025-01-01",
"assets": { "directory": "./public", "binding": "ASSETS" },
"d1_databases": [{
"binding": "DB",
"database_name": "my_signup_db",
"database_id": "先留空,步驟 3 會拿到"
}]
}第一行註解不是裝飾 — 真的不要把任何密碼寫進這個檔。
先在本機測試(不用碰雲端)
cd my-signup npx wrangler dev --local
會在 http://localhost:8787 跑起完整的本機版,連資料庫都是本機假帳本,隨便測、隨便填,跟雲端完全無關。
後台需要密碼的話,在專案夾建一個 .dev.vars 檔(本機測試專用),並確認 .gitignore 有 .dev.vars 這行:
ADMIN_KEY=本機測試用的隨便密碼
建立正式的 D1 資料庫(一次性)
先上鑰匙(Token 權限要包含 D1 Edit),然後:
npx wrangler d1 create my_signup_db
成功會回一串 database_id,把它複製、貼回 wrangler.jsonc。接著把帳本格式建到雲端(--remote 表示操作正式資料庫):
npx wrangler d1 execute my_signup_db --remote --file=schema/schema.sql
設定正式站的密碼(Secret)
機密不寫在任何檔案裡,用 secret 存到 Cloudflare 後台:
npx wrangler secret put ADMIN_KEY
它會請你輸入密碼(畫面不顯示字,正常)。這個密碼只存在 Cloudflare 那端,程式裡用 env.ADMIN_KEY 讀取。
部署
cd my-signup # 一定要先進到專案資料夾!
npx wrangler deploy成功會印出正式網址:https://my-signup.你的帳號.workers.dev
驗證
無痕視窗開正式網址 → 實際填一筆測試報名(名字標明「測試」)→ 開後台用步驟 4 的密碼登入 → 看得到那筆資料 → 手機也開一次。
刪 Token
跟 01 一樣,每次都刪。
上線後的維運鐵則(有真人資料後必讀)
常見錯誤對照表
| 錯誤訊息/狀況 | 原因 | 解法 |
|---|---|---|
| Missing entry-point / ENOENT | 沒 cd 進專案資料夾就跑 wrangler | 先 cd 進去再跑(最常見的雷) |
| Authentication error | Token 沒設或權限不含 D1 | 重發 Token,權限勾 Workers + D1 |
| 本機測好好的,正式站報名失敗 | 正式 D1 還沒建表 | 對正式庫跑一次 schema(步驟 3 第二行) |
| secret list 查不到東西 | 少了 --name 參數 | 加上 --name 你的worker名 |
| 改了前端但網頁沒變 | 邊緣快取 + 瀏覽器快取 | 等一兩分鐘 + Cmd + Shift + R |
| wrangler login 卡在 Authorizing… | 瀏覽器擋 localhost 回傳 | 改走 API Token 路線(00 的路線 B) |
03 ・ Pages 加 Access 門禁
適用:網頁內容不宜公開(行程、內部儀表板、名單),只想給指定的幾個 Email 看。前提:先照 01 部署好 Pages 網站。第一次約 30 分鐘,免費方案支援 50 人以內。
先搞懂它在做什麼
先把網站部署上 Pages
照 01 教學做完,拿到 https://你的專案名.pages.dev。
開通 Zero Trust(一次性)
Dashboard 左側選單找 Zero Trust → 第一次進入會請你取一個 team name(內部識別用,跟網址無關)→ 方案選 Free。
把 Pages 網站設為受保護的應用程式
Zero Trust → Access → Applications → Add an application → 類型選 Self-hosted。
Application domain(保護哪個網址):填 你的專案名.pages.dev。
登入方式:勾 One-time PIN(Email 驗證碼)就好,不用接 Google 登入那些。
設定白名單(Policy)
Policy name 取例如 allow-team;Action 選 Allow;Include 區塊 Selector 選 Emails,填要放行的 Email 一行一個(先填自己的,確保自己進得去)→ 儲存。
驗證(兩邊都要測)
之後要加人/移除人
Zero Trust → Access → Applications → 找到你的應用 → Policies → 編輯 → 在 Emails 加一行或刪一行 → 儲存。立即生效,網站不用重新部署。
常見問題
| 狀況 | 原因 | 解法 |
|---|---|---|
| 設完門禁自己也進不去 | 白名單 Email 打錯字 | 回 Policy 檢查拼字(最常見) |
| 驗證碼一直收不到 | 信進垃圾郵件 | 翻垃圾郵件夾,寄件者是 Cloudflare |
| 無痕視窗還是直接看到網頁 | Application domain 填錯 | 檢查 domain 和網址完全一致 |
| 預覽網址(帶亂碼那種)沒被擋 | 沒加 *.專案名.pages.dev 那條 | 回步驟 3 補加 |
| 登入一次後很久不用再登 | 正常,Session 有效期預設較長 | 可在設定裡調短 Session duration |