Featured image of post 在 Alwaysdata 主机上通过 Git 部署 Hexo 博客

在 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 裸仓库

裸仓库不包含工作区,专门用于存放版本历史,非常适合作为部署中转站。

1
2
3
4
5
6
# 创建存放仓库的目录
mkdir -p ~/repos/blog.git
cd ~/repos/blog.git

# 初始化裸仓库
git init --bare

2. 配置自动化部署钩子

我们需要在 hooks 目录下创建一个 post-receive 脚本。每当 Git 接收到 push 操作后,该脚本会自动执行。

编辑文件:nano ~/repos/blog.git/hooks/post-receive

写入以下内容(请确保 TARGET 路径与你的实际 Web 根目录一致):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/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

保存并退出,然后务必赋予执行权限

1
chmod +x ~/repos/blog.git/hooks/post-receive

第二步:Alwaysdata 后台设置

登录 Alwaysdata 管理面板 $\rightarrow$ Web $\rightarrow$ Sites

检查你的网站配置,确保 Root directory 填写的是 /home/hexobs/www。如果路径不匹配,用户访问域名时将无法读取到 Hexo 生成的 index.html

第三步:本地部署配置

在本地 Hexo 博客根目录下,修改 _config.ymldeploy 部分:

1
2
3
4
deploy:
  type: git
  repo: ssh://hexobs@ssh-hexobs.alwaysdata.net/home/hexobs/repos/blog.git
  branch: main

最后,执行部署指令:

1
hexo clean && hexo g && hexo d

避坑指南

  1. 权限问题:如果部署后出现 403 错误,检查 /home/hexobs/www 目录的权限。
  2. 分支匹配:注意 _config.yml 中的 branch (main/master) 必须与服务器仓库的分支一致。
  3. SSH Key:建议配置 SSH 公钥登录,避免每次 hexo d 都要输入密码。

本文由 BOSH 的博客助手 HerMes 整理 🚀

原文链接:用户提供素材

热爱生活 学无止境
使用 Hugo 构建
主题 StackJimmy 设计