用 Git 裸仓库部署 Hexo 静态站点
500 字
3 分钟
用 Git 裸仓库部署 Hexo 静态站点
目标
把 Hexo 生成的静态文件推送到 GitHub 和一台自建服务器。服务器使用专用 deploy 用户接收 Git 推送,Nginx 只读取发布目录。
前置条件
- 已有域名、服务器和可用的 HTTPS 配置。
- 已创建无交互管理权限的
deploy用户。 - 已验证本地 Hexo 可以成功生成
public/。 - 已备份现有站点目录。
不要以 root 身份接收 Git 推送,也不要把 Nginx worker 改成 root。
创建裸仓库和发布目录
在服务器上执行:
sudo install -d -o deploy -g deploy /srv/git/blog.git
sudo install -d -o deploy -g www-data /var/www/blog
sudo -u deploy git init --bare /srv/git/blog.git
只把本地部署公钥加入 deploy 用户的 authorized_keys。如果服务器托管多个服务,应进一步限制该密钥可执行的命令和来源地址。
添加 post-receive hook
创建 /srv/git/blog.git/hooks/post-receive:
#!/bin/sh
set -eu
GIT_WORK_TREE=/var/www/blog
GIT_DIR=/srv/git/blog.git
git --work-tree="$GIT_WORK_TREE" --git-dir="$GIT_DIR" checkout -f main
然后设置权限:
sudo chown deploy:deploy /srv/git/blog.git/hooks/post-receive
sudo chmod 0755 /srv/git/blog.git/hooks/post-receive
发布目录只存放生成产物。checkout -f 会覆盖其中的同名文件,不要在该目录手工编辑内容。
配置 Nginx
server {
listen 80;
server_name blog.example.com;
root /var/www/blog;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
测试配置后再重载:
sudo nginx -t
sudo systemctl reload nginx
生产环境应配置 HTTPS、安全响应头、访问日志和发布目录权限。
配置 Hexo 多目标部署
安装 hexo-deployer-git 后,在 _config.yml 中配置:
deploy:
type: git
repo:
github: git@github.com:USERNAME/USERNAME.github.io.git
server: deploy@SERVER:/srv/git/blog.git
branch: main
发布前先生成并本地验证:
npx hexo clean
npx hexo generate
npx hexo deploy
验证与回滚
确认 GitHub Pages 和自建站点展示同一个提交版本。自建服务器可以在裸仓库中保留发布历史;回滚时把确认过的旧提交重新推送到 main,或在维护窗口执行指定提交的 checkout。
更复杂的项目应使用 CI 构建、制品校验和原子目录切换,避免本机环境差异与部署中途产生半成品。
参考
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
用 Git 裸仓库部署 Hexo 静态站点
https://blog.mintalix.com/posts/study-multi-terminal-deployment/相关文章智能推荐
1
将 Hexo 站点发布到 GitHub Pages
blogging-and-deployment创建 GitHub Pages 用户站点仓库,配置 Ed25519 SSH 密钥与 Hexo Git 部署器,并验证静态站点发布结果。
2
从零创建一个 Hexo 博客
blogging-and-deployment从 Node.js 环境、Hexo 初始化和文章创建开始,完成本地预览、主题选择与配置校验,再衔接静态站点部署。
3
[译] 一种面向时空可组合性的编程范式
paper2026.08.14 deepseek-harness-paper 的ai翻译版本
4
在 Vercel 上部署 Next.js 并使用预览环境
blogging-and-deployment连接 Git 仓库到 Vercel,区分 Preview 与 Production 环境,配置环境变量,并通过检查和回滚完成 Next.js 发布。
5
Android Studio 启动与 Gradle 插件故障排查
android-development处理禁用关键插件导致 Android Studio 无法启动,以及代理配置导致 Gradle 插件无法解析的两类环境问题。
随机文章随机推荐


