Hugo 靜態網站最大的優勢之一,就是 構建快、部署輕。但如果你希望在每次更新文章後:
- 一條命令就完成構建 + 部署
- 服務器自動同步最新 public 文件
- 整個過程不需要登錄服務器
- 也不需要 CI/CD 或額外工具
那麼 基於 Git 的 Hugo Public 目錄熱更新方案 是最輕量、最穩定的部署方式。
這篇文章將完整介紹如何使用 Git 將 Hugo 的 public 目錄推送到服務器,並通過服務器端 hook 實現熱更新自動上線。
為什麼要用 Git 部署 Hugo ?
Hugo 的 public 目錄只是純靜態文件,部署可以非常簡單:
- 不需要 Nginx reload
- 不需要重啓服務
- 不需要 build 服務器
- 甚至不需要 ssh 登錄
只要 push 一下,就能讓服務器自動同步最新 public 文件,實現真正的 Zero-Downtime 熱更新。
一、整體方案架構
本地電腦
├── Hugo 項目
│ ├── content/
│ ├── themes/
│ ├── public/ ← 構建後目錄
│
└── git push deploy main
↓
服務器
└── /var/repo/hugo_public.git (bare repo)
↓ post-receive hook 自動觸發
└── /var/www/website ← 網站根目錄(熱更新)
流程:
- 本地執行:
hugo && git push deploy main
- push 到服務器的 bare 倉庫(沒有工作區)
- 服務器觸發
post-receivehook - 自動 checkout 最新 public 文件到
/var/www/website - 網站立即更新(零停機)
二、服務器初始化部署倉庫(bare repo)
服務器上執行:
mkdir -p /var/repo
cd /var/repo
git init --bare hugo_public.git
設置默認主分支(避免 “branch yet to be born”):
cd hugo_public.git
git symbolic-ref HEAD refs/heads/main
三、配置 post-receive 自動部署腳本
編輯:
/var/repo/hugo_public.git/hooks/post-receive
內容:
#!/bin/bash
set -e
echo ">>> 正在部署 Hugo 靜態文件..."
WORK_TREE=/var/www/website
GIT_DIR=/var/repo/hugo_public.git
# 自動創建 main 分支(首次部署不會失敗)
if ! git rev-parse --verify main >/dev/null 2>&1; then
git checkout -b main
fi
git --work-tree=$WORK_TREE --git-dir=$GIT_DIR checkout -f main
echo ">>> 部署完成!"
賦予可執行權限:
chmod +x /var/repo/hugo_public.git/hooks/post-receive
四、本地配置 deploy 遠程倉庫
進入 Hugo 項目目錄:
cd public
git init
git add .
git commit -m "init public"
添加服務器地址:
git remote add deploy ssh://ubuntu@服務器IP/var/repo/hugo_public.git
五、發佈流程:一條命令完成構建 + 部署
你可以直接用兩段式:
hugo
cd public
git add .
git commit -m "update"
git push deploy main
或者把它合成一個命令:
hugo && (cd public && git add . && git commit -m "update" && git push deploy main)
服務器自動執行:
>>> 正在部署 Hugo 靜態文件...
>>> 部署完成!
網站秒級更新
六、方案優勢(為什麼説這是“熱更新”?)
| 優勢 | 説明 |
|---|---|
| 🟢 零停機 | 靜態文件直接覆蓋,無需 reload |
| 🟢 不需登錄服務器 | 所有操作本地 push 完成 |
| 🟢 不需 CI/CD | 無 GitHub Actions / GitLab Runner |
| 🟢 安全 | 僅開放 SSH |
| 🟢 高速 | Hugo 構建 + Git push 極快 |
| 🟢 可回滾 | 服務器 public 目錄有完整 Git 歷史 |
這是部署 Hugo 最輕便、最優雅的方法之一。
七、總結
本方案的核心邏輯:
- 本地 push public → 服務器自動 checkout
- 利用 bare 倉庫 + hook
- 完整的版本控制
- 熱更新、零停機
如果你正在運營博客、文檔站、產品官網,這是目前最強的 Hugo 私有部署方案。