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    ← 網站根目錄(熱更新)

流程:

  1. 本地執行:
hugo && git push deploy main
  1. push 到服務器的 bare 倉庫(沒有工作區)
  2. 服務器觸發 post-receive hook
  3. 自動 checkout 最新 public 文件到 /var/www/website
  4. 網站立即更新(零停機)

二、服務器初始化部署倉庫(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 私有部署方案。