前言
我一直使用 Obsidian 管理笔记,它很好地满足了我的写作需求。但我始终渴望拥有一个属于自己的博客——一方面希望将积累的知识分享出去,获得反馈;另一方面,通过维护博客倒逼自己持续写作和总结,提升表达能力。
本文将完整记录我搭建博客的过程,并重点解决从 Obsidian 写作到博客发布的自动化流程。如果你也想打造一个“赛博小窝”,希望我的经验能给你带来一些参考。
搭建方案
我的博客基于以下工具组合实现:
- 写作端: Obsidian,笔记的写作组织工具。
- 同步插件:Enveloppe:将本地文章同步到GitHub的Obsidian插件。
- 博客框架: Hexo:博客站点使用的框架。
- 主题:hexo-theme-matery:简洁美观的响应式主题。
- 托管平台:GitHub Pages:免费静态网页托管。
由于我不希望公开所有文章的源文件,我创建了两个 GitHub 仓库:
- 私有仓库
hexo-project– 存放 Hexo 博客配置、主题和文章源文件。 - 公共仓库
<用户名>.github.io– 存放 Hexo 生成的静态文件,供 GitHub Pages 展示。
整体流程如下图所示:
操作步骤
搭建 Hexo 博客
安装依赖
Hexo 依赖 Node.js 和 Git,请根据官方文档完成安装:
初始化 Hexo
安装 Hexo 命令行工具并创建项目:
npm install -g hexo-cli # 全局安装 Hexo
hexo init hexo-blog # 初始化博客项目
cd hexo-blog
npm install # 安装项目依赖
本地预览
生成静态文件并启动本地服务器:
hexo g # 生成页面
hexo s # 启动服务
访问 http://localhost:4000 即可看到默认的 Hello World 页面。
更换主题
我选择的是 hexo-theme-matery,按以下步骤启用:
git clone https://github.com/blinkfox/hexo-theme-matery.git
修改 Hexo 根目录下的 _config.yml 的 theme 的值:theme: hexo-theme-matery
theme: hexo-theme-matery
重新生成并预览:
hexo clean # 清除
hexo g # 生成
hexo s # 本地启动
此时主题已更换成功。你还可以参考 主题文档 进行个性化配置(如菜单、关于页等)。
快捷建站(可选)
如果你想跳过初始配置,可以直接克隆已配置好的示例博客:
git clone https://github.com/blinkfox/blinkfox.github.io.git
cd blinkfox.github.io
npm install
hexo s
配置 GitHub 与自动部署
创建仓库
在 GitHub 上创建两个仓库:
- 公共仓库
<你的用户名>.github.io– 用于托管静态页面。 - 私有仓库
hexo-blog– 用于存放博客源文件及配置。
关联本地仓库
将本地的 hexo-blog 文件夹与 GitHub 上的 hexo-blog 私有仓库关联,并推送所有文件。
生成 Personal Access Token
在 GitHub 的 Settings → Developer settings → Personal access tokens → Tokens (classic) 中生成一个新 token,赋予 repo 权限。复制并保存该 token(只会显示一次)。

在私有仓库中设置 Secrets
进入 hexo-blog 仓库的 Settings → Secrets and variables → Actions,点击 New repository secret,将上一步的 token 粘贴进去,并命名为 HEXO_BLOG_DEPLOY_TOKEN。
配置 GitHub Actions 工作流
在 hexo-blog 仓库中创建 .github/workflows/deploy.yml 文件,内容如下:
name: Deploy Hexo to GitHub Pages
on:
push:
branches:
- main # 或你使用的默认分支名称
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout blog source
uses: actions/checkout@v4
with:
path: blog
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: "24" # 设置 Node.js 版本
- name: Cache dependencies
uses: actions/cache@v3
with:
path: node_modules
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: Install dependencies
run: npm install
working-directory: ./blog
- name: Install Hexo CLI
run: npm install -g hexo-cli
working-directory: ./blog
- name: Generate static pages
run: hexo generate
working-directory: ./blog
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
personal_token: ${{ secrets.HEXO_BLOG_DEPLOY_TOKEN }} # 这里是设置的token密码名称
publish_dir: ./blog/public
external_repository: gloamfox/gloamfox.github.io # 更改为你的 GitHub Pages 仓库, username 是你的用户名
publish_branch: main # GitHub Pages 分支
该工作流会在每次向 hexo-blog 仓库的 main 分支推送时自动执行:安装依赖、生成静态文件,并将生成的 public目录推送到你的公共仓库。
开启 GitHub Pages
进入公共仓库 <你的用户名>.github.io 的 Settings → Pages,在 Branch 中选择 main 分支,点击保存。GitHub Pages 会提供一个默认域名:https://<你的用户名>.github.io。
实现 Obsidian 到博客的一键发布
痛点与需求
在写作过程中,我希望:
- 只发布部分精选文章,而非全部笔记。
- 图片、Excalidraw 绘图等附件能自动上传并正确显示。
- Obsidian 的双链语法能转换为普通 Markdown 链接,避免失效。
- 发布的文章样式与本地一致。
Enveloppe 插件完美解决了这些问题。它可以将指定文章及其依赖的资源同步到 GitHub 仓库,并自动处理链接转换。
安装与配置 Enveloppe
在 Obsidian 社区插件中搜索并安装 Enveloppe。安装后进入插件设置,主要配置项如下:
- GitHub 仓库:填写你的私有仓库
hexo-blog。 - 分支:
main(与工作流触发分支一致)。 - 文件夹:可以设置默认上传的文件夹,例如
source/_posts(Hexo 默认的文章目录)。 - 附件处理:
- 勾选“上传附件”。
- 设置附件文件夹为
source/Assets,这样图片会统一上传到 Hexo 的全局资源文件夹,便于引用。
- 链接转换:启用“转换 Obsidian 内部链接”和“转换双链为 Markdown 链接”。
- Excalidraw 支持:勾选“将 Excalidraw 文件转换为 SVG”,使其能在博客中正常渲染。
其他选项可根据需要调整,详细说明可参考 Enveloppe 官方文档。
发布流程
在 Obsidian 中编辑完一篇文章后,只需在文件菜单中点击“通过 Enveloppe 上传”按钮(或使用快捷键),插件会自动:
- 将文章 Markdown 文件上传至指定仓库路径。
- 上传文章中引用的所有本地图片和附件(按配置存放至
source/Assets)。 - 转换内部链接为相对路径,确保博客中能正确跳转(如果链接指向未发布的笔记,可以配置为“链接到外部”或忽略)。
推送完成后,GitHub Actions 会自动触发,几分钟后你的博客就会更新。
遇到的问题与解决
- 私有仓库上传路径错误:早期版本中,Enveloppe 将文件上传到了仓库根目录,而非
source/_posts。该问题已在 GitHub 上的 issue #414 中修复,截至到文章发布插件市场尚未发布修复版本。如需提前使用修复版,可手动下载插件的最新源码替换本地插件。 - 图片无法显示:确保附件文件夹设置为
source/Assets,并在文章中通过相对路径引用(例如)。Enveloppe 会自动调整链接。
总结
通过以上步骤,我们实现了:
- 基于 Hexo 和 matery 主题搭建了一个美观的个人博客。
- 利用 GitHub Actions 实现了推送即部署的自动化流程。
- 借助 Enveloppe 插件,从 Obsidian 写作到博客发布做到了“一键完成”,图片、绘图和内部链接均能完美转换。
这套流程不仅简化了发布操作,更重要的是让我能够专注于内容创作,而无需担心技术细节。希望本文也能帮助你顺利搭建属于自己的“赛博小窝”,并享受写作与分享的乐趣。