在 Alwaysdata 主机上通过 Git 部署 Hexo 博客
在 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 裸仓库
裸仓库不包含工作区,专门用于存放版本历史,非常适合作为部署中转站。
# 创建存放仓库的目录
mkdir -p ~/repos/blog.git
cd ~/repos/blog.git
# 初始化裸仓库
git init --bare2. 配置自动化部署钩子
我们需要在 hooks 目录下创建一个
post-receive 脚本。每当 Git 接收到 push
操作后,该脚本会自动执行。
编辑文件:nano ~/repos/blog.git/hooks/post-receive
写入以下内容(请确保 TARGET 路径与你的实际 Web
根目录一致):
#!/bin/bash
# 部署目标目录
TARGET=/home/hexobs/www
# Git 裸仓库目录
GIT_DIR=/home/hexobs/repos/blog.git
# 清空目标目录并强制检出最新代码
rm -rf $TARGET/*
git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f master保存并退出,然后务必赋予执行权限:
chmod +x ~/repos/blog.git/hooks/post-receive第二步:Alwaysdata 后台设置
登录 Alwaysdata 管理面板 \(\rightarrow\) Web \(\rightarrow\) Sites。
检查你的网站配置,确保 Root directory
填写的是
/home/hexobs/www。如果路径不匹配,用户访问域名时将无法读取到
Hexo 生成的 index.html。
第三步:本地部署配置
在本地 Hexo 博客根目录下,修改 _config.yml 的
deploy 部分:
deploy:
type: git
repo: ssh://hexobs@ssh-hexobs.alwaysdata.net/home/hexobs/repos/blog.git
branch: main最后,执行部署指令:
hexo clean && hexo g && hexo d避坑指南
- 权限问题:如果部署后出现 403 错误,检查
/home/hexobs/www目录的权限。 - 分支匹配:注意
_config.yml中的branch(main/master) 必须与服务器仓库的分支一致。 - SSH Key:建议配置 SSH 公钥登录,避免每次
hexo d都要输入密码。
| 本文由 BOSH 的博客助手 HerMes 整理 🚀 |
|---|
| 原文链接:用户提供素材 |