引言
去年11月搭完博客后就一直没更新,而且遗留了一堆问题没处理
今天忙里偷闲更新了一下博客,顺便解决了一个有意思的小问题
之前一直将 Hexo 博客源码和生成的静态页面放在同一个仓库中。由于 GitHub Free 的 Pages 服务要求发布仓库为 Public,源码、主题配置以及项目依赖等内容也会随之公开。
虽然不一定会产生直接的安全风险,但我还是希望将源码和最终发布的网站分开管理。于是便研究起了 GitHub Actions 的自动化部署方案。
根据查阅的资料以及与G老师的讲解,整理了一个简单流程,本人技术有限,大佬们图一乐就好
前期准备
首先我们准备两个仓库
源码仓库 Private:专门保存 Hexo 源码,用于日常编写和维护 - 文章、Reimu 配置、插件依赖、自定义图片和脚本
发布仓库 Public:存放构建完成的网页 - index.html、css、js、images 等静态资源
生成专用 SSH 密钥
我们需要让源码仓库的 GitHub Actions 有权限向发布仓库推送生成的网页
这里建议使用 Deploy Key,而不是个人访问令牌(PAT),因为 Deploy Key 可以只授权一个仓库,权限范围更小
打开PowerShell,执行
1 | New-Item -ItemType Directory -Force "$HOME\.ssh" | Out-Null |
生成过程中提示输入 passphrase 时,留空即可,方便 Actions 自动使用
完成后会在C:\Users\<你的用户名>\.ssh下生成两个文件:
example_blog_deploy和example_blog_deploy.pub
把公钥添加到发布仓库
查看公钥
打开example_blog_deploy.pub文件,复制密钥
在发布仓库的Settings下找到Deploy Keys
点击 Add deploy key,填写Title,Key 并勾选Allow write access
把私钥添加到源码仓库
接下来查看私钥
复制example_blog_deploy的完整内容
在源码仓库的Settings下找到Secrets and variables的Actions
点击 New repository secret,填写Name,Secret
这样配置后,源码仓库的自动化流程就能向网站仓库推送文件,但部署密钥本身不需要暴露在 package.json、Hexo 配置或公开网页中
创建 GitHub Actions 工作流
在你的源码仓库新建文件:
1 | .github/workflows/deploy.yml |
然后粘贴以下内容:
1 | name: Deploy Hexo Blog |
这里使用的 peaceiris/actions-gh-pages@v4 明确支持将 publish_dir 发布到另一个 GitHub 仓库,且支持使用 Deploy Key 认证
检查 GitHub Pages 发布设置
在发布仓库的Settings下找到GitHub Pages设置
确认
Source:Deploy from a branch
Branch:main
Folder:/(root)
如果是 GitHub Actions,就改成 Deploy from a branch,保存设置
运行自动化
配置完成后,打开源码仓库的 Actions 页面
找到 Deploy Hexo Blog,点击 Run workflow,选择 main 并运行
正常情况下,依次出现以下步骤:
-
Checkout source
获取源码
-
Setup Node.js
准备 Node 24.11.0
-
Install dependencies
安装依赖
-
Build Hexo
生成网站
-
Verify output
确认输出
-
Publish website
发布到另一个仓库
如果整个工作流显示绿色成功,再打开网站仓库的提交记录
你应该能看到由自动化生成的新部署提交
随后访问博客,检查网站是否已更新
后续
今后只需在本地写文章,然后将源码推送到 源码仓库
后续构建、部署和网站更新都会由 GitHub 自动完成
你也可以直接通过 GitHub 网页编辑源码仓库中的 Markdown 文章,提交后同样会触发自动部署
说些什么吧!