使用 Cloudflare Pages 免費部署靜態網站完整教學

每個 App 開發者都需要一個開發者網站,用來放隱私政策、app-ads.txt、作品集頁面等等。我一開始考慮過 GitHub Pages,但後來選了 Cloudflare Pages,用了快兩年,完全免費而且非常穩定。這篇就來分享我的部署經驗。

為什麼選 Cloudflare Pages?

市面上免費的靜態網站託管服務不少,常見的有 GitHub Pages、Netlify、Vercel 和 Cloudflare Pages。我最後選 Cloudflare Pages 的原因:

  • 完全免費:不限頻寬,每月 500 次建置,對個人開發者來說綽綽有餘
  • 全球 CDN:Cloudflare 在全球有超過 300 個資料中心,包含台灣的節點,訪問速度很快
  • 自動 HTTPS:不需要自己設定 SSL 憑證
  • GitHub 整合:推上 main 分支就自動部署,零設定
  • 自訂網域:免費支援自訂網域,而且 Cloudflare 本身就是 DNS 服務商,設定超簡單

對比之下,GitHub Pages 雖然也免費,但不支援自訂建置指令(只能用 Jekyll),而且 CDN 節點在亞洲相對少。Netlify 免費方案有 100GB 頻寬限制。Cloudflare Pages 基本上沒有這些顧慮。

事前準備

你需要:

  1. 一個 GitHub 帳號
  2. 一個 Cloudflare 帳號(免費註冊)
  3. 你的靜態網站專案(純 HTML 或 Hugo 等靜態網站產生器都可以)

部署純靜態 HTML 網站

如果你的專案就是幾個 HTML 檔案,不需要任何建置步驟,部署非常簡單。

步驟一:將專案推到 GitHub

確保你的專案已經在 GitHub 上有一個 repository。基本的目錄結構像這樣:

├── index.html
├── app-ads.txt
├── privacy/
│   └── my-app.html
└── styles.css

步驟二:連結 Cloudflare Pages

  1. 登入 Cloudflare Dashboard
  2. 在左側選單找到「Workers & Pages」
  3. 點「Create」→「Pages」→「Connect to Git」
  4. 授權 Cloudflare 存取你的 GitHub,選擇你要部署的 repository
  5. 設定建置選項:
    • Production branchmain
    • Build command:留空(純靜態不需要建置)
    • Build output directory:留空或填 /(根目錄就是輸出目錄)
  6. 點「Save and Deploy」

就這樣!Cloudflare 會自動拉取你的程式碼並部署。部署完成後會給你一個 *.pages.dev 的網址,馬上就能存取。

部署 Hugo 部落格

如果你用 Hugo 作為靜態網站產生器(像我現在的部落格),設定稍微多一點點。

Hugo 專案結構

├── config/
│   └── _default/
│       └── hugo.toml
├── content/
│   └── zh-tw/
│       └── blog/
│           └── my-post.md
├── layouts/
├── static/
└── themes/

建置設定

在 Cloudflare Pages 的設定中:

  • Build commandhugo --minify
  • Build output directorypublic
  • Environment variables
    • HUGO_VERSION = 0.145.0(或你使用的版本)

Hugo 版本這個環境變數很重要。Cloudflare 預設的 Hugo 版本可能很舊,不設定的話建置很可能會失敗。我之前就因為這個卡了好一陣子。

設定方式

你也可以在專案根目錄建立一個 wrangler.toml 或直接在 Cloudflare Dashboard 設定環境變數。如果想讓設定跟著版本控制走,也可以用 .node-version.hugo-version 檔案。

自訂網域設定

Cloudflare Pages 預設給你的 *.pages.dev 網址已經可以用了,但如果你想用自己的網域,設定也很簡單。

如果網域已經在 Cloudflare

如果你的網域本來就是在 Cloudflare 管理 DNS,那設定超級方便:

  1. 到你的 Pages 專案 →「Custom domains」
  2. 輸入你的網域,例如 www.yourdomain.com
  3. Cloudflare 會自動幫你新增 CNAME 記錄
  4. SSL 憑證會自動產生,通常幾分鐘就搞定

如果網域在其他地方

如果你的網域是在其他註冊商(例如 GoDaddy、Namecheap),你可以:

方法一:把 DNS 轉移到 Cloudflare(推薦)

  1. 在 Cloudflare 新增你的網域
  2. 到你的網域註冊商,把 nameserver 改成 Cloudflare 提供的
  3. 等 DNS 生效(通常幾小時到一天)
  4. 然後就和上面一樣設定 Custom domain

方法二:在原本的 DNS 加 CNAME 記錄

指向你的 *.pages.dev 網址。但這樣就不能享受 Cloudflare 的完整功能。

我自己的經驗是直接把 DNS 搬到 Cloudflare 最省事。Cloudflare 的 DNS 服務本身就是免費的,速度也快,沒有理由不用。

自動部署流程

Cloudflare Pages 和 GitHub 連結後,每次你推程式碼到指定的分支,就會自動觸發部署。這是我日常的工作流程:

# 寫好內容後
git add .
git commit -m "feat: add new blog post"
git push origin main

推上去之後,Cloudflare 會自動開始建置和部署,通常在一分鐘內就完成了。你可以在 Cloudflare Dashboard 看到每次部署的狀態和日誌。

Preview Deployments

除了正式部署,Cloudflare Pages 也支援 Preview Deployments。當你推到非 main 的分支(例如開 PR 的分支),Cloudflare 會自動部署一個預覽版本,給你一個獨立的 URL 可以先確認效果。這在多人協作或是你想先預覽文章時很方便。

進階設定

重新導向規則

如果你需要設定重新導向(redirect),在專案根目錄建立一個 _redirects 檔案:

/old-page  /new-page  301
/blog/*    /zh-tw/blog/:splat  302

自訂 Headers

同樣在根目錄建立 _headers 檔案:

/*
  X-Frame-Options: DENY
  X-Content-Type-Options: nosniff
  Referrer-Policy: strict-origin-when-cross-origin

/app-ads.txt
  Content-Type: text/plain
  Cache-Control: public, max-age=86400

這對 app-ads.txt 特別有用。廣告平台的爬蟲需要能正確讀取這個檔案,設定正確的 Content-Type 和 Cache-Control 可以確保一切順利。

Cloudflare Web Analytics

Cloudflare 還提供免費的 Web Analytics,不需要在網頁中加任何 JavaScript(和 Google Analytics 不同)。在 Dashboard 的「Web Analytics」中啟用,就能看到基本的流量數據。對注重使用者隱私的開發者來說,這是一個很好的選擇。

常見問題排解

建置失敗

最常見的原因是 Hugo 版本不對。檢查環境變數 HUGO_VERSION 是否和你本地使用的版本一致:

hugo version

404 錯誤

確認 Build output directory 設定正確。Hugo 的輸出目錄是 public,純靜態網站可能是 /dist

自訂網域 SSL 錯誤

通常等幾分鐘就好了,Cloudflare 會自動產生和配置 SSL 憑證。如果超過一小時還有問題,到 SSL/TLS 設定確認模式是「Full」或「Full (strict)」。

費用比較

最後整理一下各平台的免費方案比較:

平台 頻寬 建置次數/月 自訂網域 建置指令
Cloudflare Pages 無限 500 免費 支援
GitHub Pages 100GB 無限 免費 僅 Jekyll
Netlify 100GB 300 分鐘 免費 支援
Vercel 100GB 6000 分鐘 免費 支援

對個人開發者和小型網站來說,Cloudflare Pages 的無限頻寬和全球 CDN 確實是最有吸引力的。

結語

Cloudflare Pages 是我目前最推薦的靜態網站託管方案。設定簡單、部署快速、完全免費,而且背後有 Cloudflare 的全球基礎設施支撐。不管你是要放一個簡單的開發者網站、App 的隱私政策頁面,還是一個完整的 Hugo 部落格,Cloudflare Pages 都能輕鬆勝任。

希望這篇教學對你有幫助。如果你也在用 Cloudflare Pages,歡迎分享你的使用經驗!