Hugo 圖片管理比較:GitHub vs Cloudflare R2

Posted by Wayne X.Y. on Tuesday, February 3, 2026

Hugo 圖片管理比較:GitHub vs Cloudflare R2

在架設 Hugo 部落格後,也註冊了自己的網域,便開始開心的透過 git push 更新網站。但稍微看了 repository 存放的內容,想想卻覺得圖片一起 push 好像怪怪的XD。之後如果持續更新維護,圖片勢必會增加,到時候會佔用太多空間。而且假如換個開發環境,在 pull 下來時,就要重新下載一堆圖片在 local。

決定稍微研究一下,並比較原本 GitHub page 的做法,以及目前透過 Cloudflare R2 的做法。


原:存放在 static/ 資料夾(與網站同步部署)

這是 Hugo 的傳統標準作法,圖片會隨著你的程式碼一起推送到 GitHub。

1. 運作原理

Hugo 會將 static/ 資料夾內的所有內容,在編譯時原封不動地搬移到網站根目錄。

2. 實作方式

  • 檔案路徑:將圖片放在 /static/images/test.jpg
  • Markdown 語法![圖片描述](/images/test.jpg) (路徑開頭的 / 代表網站根目錄)。

3. 優缺點分析

  • 優點
    • 離線寫作:不需要網路就能預覽圖片,圖片與文章內容生命週期一致。
    • 版本控制:圖片的異動也會紀錄在 Git 歷史中。
  • 缺點
    • 儲存庫肥大:隨著圖片增加,GitHub Repository 的體積會迅速增長,長期下來會影響效能。

現:使用 Cloudflare R2

為了避免 GitHub 儲存庫容量被圖片佔用太多,決定使用 Cloudflare R2,並且提供了 10GB 免費儲存空間,以目前來說非常足夠。

⚠️ 注意:雖然說有免費額度,但還是需要先填寫付款資訊才能啟用。


1. 啟用 Cloudflare R2 儲存桶

  1. 登入 Cloudflare 儀表板,點擊左側選單的 Storage & Database > R2 Storage
  2. 點擊 Create bucket
  3. 命名你的儲存桶(例如 my-blog-assets),並點擊 Create bucket 完成建立。

2. 設定公開存取(讓圖片能被看見)

預設情況下,R2 的內容是私有的,我們需要將它與你的網域串接才能在網路上顯示圖片。

  1. 進入剛建立好的 Bucket,點擊上方標籤的 Settings
  2. 找到 Custom Domains 區塊。
  3. 推薦做法:使用自定義網域
    • 點擊 Connect Domain
    • 輸入一個子網域(例如 xxx.yourdomain.com)。
    • Cloudflare 會自動幫你處理 DNS 紀錄,之後你的圖片網址就會變成 https://xxx.yourdomain.com/photo.jpg

3. 上傳圖片與並在 Hugo 文章中引用

  • 在 Bucket 頁面點擊 Upload,直接將圖片拖進去。

  • 上傳後點擊該圖片,會看到 URL,在撰寫 markdown 文章是,直接引用即可。

![Test image](https://xxx.yourdomain.com/photo.jpg)