使用Github Actions部署Hexo博客
前言
作为技术博主,博客的高效维护与部署一直是我关注的重点。近期在维护博客时,我遇到了两个核心问题:
- 内容管理混乱:草稿箱文件堆积,缺乏分类标准,甚至因误操作破坏了原有配置;
 - 兼容性局限:计划将文章同步至 FastGPT 等 AI 知识库时,发现官方推荐的 Hexo 部署方案(源码与静态文件混存)中,冗余的 
public目录会干扰 RAG 系统提取内容,且源码与发布产物耦合易引发冲突。 
为解决这些问题,我采用了源码与发布分离的部署架构:将 Markdown 源文件单独存放在一个仓库,通过 GitHub Actions 自动在另一个仓库构建并发布静态文件。这种方式的优劣对比如下:
| 方案 | 优点 | 缺点 | 
|---|---|---|
| 官方混仓部署 | 支持本地手动 / 自动发布,预览方便,配置简单 | 仓库体积大,源码与产物混合,不利于二次利用 | 
| 本文分离部署 | 源码纯净、产物独立,兼容 AI 知识库,自动构建 | 本地预览需搭测试环境,配置较复杂(双仓库 + 鉴权) | 
部署核心思路
核心逻辑:当源码仓库收到推送时,GitHub Actions 自动将源文件检出到 source/_posts,并从 _hexo 目录复制配置文件还原 Hexo 环境,最终执行构建与发布。
文件结构设计(源码仓库):
1  | |-- _hexo/ # Hexo 核心配置目录  | 
详细部署步骤
1. 生成 SSH 密钥对(用于仓库间鉴权)
需要生成一对 SSH 密钥,用于源码仓库向发布仓库推送构建结果:
1  | ssh-keygen -t rsa -C "<github 注册邮箱>"  | 
执行后会在以下路径生成两个文件:
- 私钥:
~/.ssh/id_rsa(Linux/Mac)或C:\Users\<用户名>\.ssh\id_rsa(Windows) - 公钥:
~/.ssh/id_rsa.pub(同上路径) 
注意:.ssh为隐藏目录,需要修改系统设置显示此文件夹
2. 准备两个仓库
仓库 1:源码仓库(存放 Markdown 与配置)
- 新建仓库(例如命名为 
hexo-source) - 进入仓库设置:
Settings → Secrets and variables → Actions → New repository secret - 添加一个名为 
HEXO_DEPLOY_KEY的密钥,值为私钥id_rsa的内容(用记事本打开复制) 
仓库 2:发布仓库(存放静态文件,用于 GitHub Pages)
- 仓库名必须为 
<你的 GitHub 用户名>.github.io(固定格式,否则 GitHub Pages 无法生效) - 权限需设为公开,并开启 
Discussions功能(进入仓库设置 →Features勾选) - 配置部署密钥:
Settings → Deploy keys → Add deploy key- Title 填 
HEXO_DEPLOY_PUB - Key 填入公钥 
id_rsa.pub的内容,并勾选Allow write access(允许推送权限) 
 - Title 填 
 
3. 配置 Hexo 环境文件
在源码仓库中创建 _hexo 目录,放入以下核心文件(可从本地 Hexo 环境中复制, 参考Hexo-博客配置):
_config.yml:Hexo 主配置(需修改部署相关配置,见步骤 4)_config.next.yml:NexT 主题配置(其他主题同理)package.json:依赖配置(需包含hexo、hexo-deployer-git等核心依赖)scaffolds/:文章模板(draft.md/page.md/post.md)- 静态资源:如头像(
avatar.jpg)、关于页(about.md)等,按实际需求存放 
4. 配置部署与工作流文件
① Hexo 部署配置(_hexo/_config.yml)
在配置文件中添加部署规则,指向发布仓库:
1  | # Deployment  | 
② GitHub Actions 工作流(.github/workflows/hexo-deploy.yml)
创建工作流文件,实现自动构建部署:
1  | name: hexo-deploy # 工作流名称  | 
验证与使用
- 将上述文件提交到源码仓库的 
master分支,GitHub Actions 会自动触发工作流; - 进入源码仓库的 
Actions标签页,查看工作流执行状态,若显示绿色对勾则部署成功; - 访问 
https://<你的用户名>.github.io,即可看到最新发布的博客。 
注意事项
- 私钥 
HEXO_DEPLOY_KEY是敏感信息,切勿泄露或提交到仓库; - 发布仓库名必须严格为 
<用户名>.github.io,否则 GitHub Pages 无法正常访问; - 若主题是自定义修改过的,建议将主题 fork 到自己的仓库,再在工作流中拉取自己的 fork 版本;
 - 本地预览时,可在源码仓库中手动搭建 Hexo 环境(复制 
_hexo目录文件,执行hexo server)。 
参考