在 Alwaysdata 主机上部署 Hexo 博客,最优雅的方式莫过于利用 Git 的裸仓库(Bare Repository)和 post-receive 钩子。这种方案不需要在服务器上安装 Node.js 或 Hexo 环境,只需将本地生成的静态文件 push 到服务器,即可自动同步到 Web 根目录,实现真正的“一键部署”。
核心逻辑
本地执行 hexo d $\rightarrow$ 推送到 Alwaysdata 的 Git 裸仓库 $\rightarrow$ 触发 post-receive 钩子 $\rightarrow$ 强制检出(checkout)到 Web 根目录。
第一步:服务器端配置
首先通过 SSH 登录到你的 Alwaysdata 主机。
1. 创建 Git 裸仓库
裸仓库不包含工作区,专门用于存放版本历史,非常适合作为部署中转站。
| |
2. 配置自动化部署钩子
我们需要在 hooks 目录下创建一个 post-receive 脚本。每当 Git 接收到 push 操作后,该脚本会自动执行。
编辑文件:nano ~/repos/blog.git/hooks/post-receive
写入以下内容(请确保 TARGET 路径与你的实际 Web 根目录一致):
| |
保存并退出,然后务必赋予执行权限:
| |
第二步:Alwaysdata 后台设置
登录 Alwaysdata 管理面板 $\rightarrow$ Web $\rightarrow$ Sites。
检查你的网站配置,确保 Root directory 填写的是 /home/hexobs/www。如果路径不匹配,用户访问域名时将无法读取到 Hexo 生成的 index.html。
第三步:本地部署配置
在本地 Hexo 博客根目录下,修改 _config.yml 的 deploy 部分:
| |
最后,执行部署指令:
| |
避坑指南
- 权限问题:如果部署后出现 403 错误,检查
/home/hexobs/www目录的权限。 - 分支匹配:注意
_config.yml中的branch(main/master) 必须与服务器仓库的分支一致。 - SSH Key:建议配置 SSH 公钥登录,避免每次
hexo d都要输入密码。
