Hugo 静态网站最大的优势之一,就是 构建快、部署轻。但如果你希望在每次更新文章后:
- 一条命令就完成构建 + 部署
- 服务器自动同步最新 public 文件
- 整个过程不需要登录服务器
- 也不需要 CI/CD 或额外工具
那么 基于 Git 的 Hugo Public 目录热更新方案 是最轻量、最稳定的部署方式。
这篇文章将完整介绍如何使用 Git 将 Hugo 的 public 目录推送到服务器,并通过服务器端 hook 实现热更新自动上线。
为什么要用 Git 部署 Hugo ?
Hugo 的 public 目录只是纯静态文件,部署可以非常简单:
- 不需要 Nginx reload
- 不需要重启服务
- 不需要 build 服务器
- 甚至不需要 ssh 登录
只要 push 一下,就能让服务器自动同步最新 public 文件,实现真正的 Zero-Downtime 热更新。
一、整体方案架构
css
本地电脑
├── Hugo 项目
│ ├── content/
│ ├── themes/
│ ├── public/ ← 构建后目录
│
└── git push deploy main
↓
服务器
└── /var/repo/hugo_public.git (bare repo)
↓ post-receive hook 自动触发
└── /var/www/website ← 网站根目录(热更新)
流程:
- 本地执行:
bash
hugo && git push deploy main
- push 到服务器的 bare 仓库(没有工作区)
- 服务器触发
post-receivehook - 自动 checkout 最新 public 文件到
/var/www/website - 网站立即更新(零停机)
二、服务器初始化部署仓库(bare repo)
服务器上执行:
bash
mkdir -p /var/repo
cd /var/repo
git init --bare hugo_public.git
设置默认主分支(避免 "branch yet to be born"):
bash
cd hugo_public.git
git symbolic-ref HEAD refs/heads/main
三、配置 post-receive 自动部署脚本
编辑:
bash
/var/repo/hugo_public.git/hooks/post-receive
内容:
bash
#!/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 ">>> 部署完成!"
赋予可执行权限:
bash
chmod +x /var/repo/hugo_public.git/hooks/post-receive
四、本地配置 deploy 远程仓库
进入 Hugo 项目目录:
bash
cd public
git init
git add .
git commit -m "init public"
添加服务器地址:
bash
git remote add deploy ssh://ubuntu@服务器IP/var/repo/hugo_public.git
五、发布流程:一条命令完成构建 + 部署
你可以直接用两段式:
bash
hugo
cd public
git add .
git commit -m "update"
git push deploy main
或者把它合成一个命令:
bash
hugo && (cd public && git add . && git commit -m "update" && git push deploy main)
服务器自动执行:
python
>>> 正在部署 Hugo 静态文件...
>>> 部署完成!
网站秒级更新
六、方案优势(为什么说这是"热更新"?)
| 优势 | 说明 |
|---|---|
| 🟢 零停机 | 静态文件直接覆盖,无需 reload |
| 🟢 不需登录服务器 | 所有操作本地 push 完成 |
| 🟢 不需 CI/CD | 无 GitHub Actions / GitLab Runner |
| 🟢 安全 | 仅开放 SSH |
| 🟢 高速 | Hugo 构建 + Git push 极快 |
| 🟢 可回滚 | 服务器 public 目录有完整 Git 历史 |
这是部署 Hugo 最轻便、最优雅的方法之一。
七、总结
本方案的核心逻辑:
- 本地 push public → 服务器自动 checkout
- 利用 bare 仓库 + hook
- 完整的版本控制
- 热更新、零停机
如果你正在运营博客、文档站、产品官网,这是目前最强的 Hugo 私有部署方案。