目标
把 Obsidian Vault 中固定目录 Blogs/ 的文章,自动同步到 petrezhucn 这个 Hexo 博客项目,并自动重新发布站点。
固定目录约定
- Obsidian 仓库本地副本:
/root/git/Obsidian-Vault - 博客源目录:
/root/git/Obsidian-Vault/Blogs - Hexo 项目同步副本:
/root/git/petrezhucn-sync - Hexo 项目主目录:
/root/git/petrezhucn - 网站发布目录:
/www/wwwroot/petrezhu.cn
以后只要把带 frontmatter 的 Markdown 笔记放进 Blogs/,就会进入博客发布链路。
当前自动化链路
1 | 本机 Obsidian -> push 到 Obsidian-Vault 仓库 |
关键脚本
1)同步脚本
1 | /root/scripts/sync-obsidian-blogs-to-petrezhucn.sh |
作用:
- 先更新服务器本地的 Obsidian-Vault 仓库
- 再读取
Blogs/目录中的文章 - 同步到 Hexo
_posts - 自动提交并 push 到
petrezhucn
2)发布脚本
1 | /root/scripts/petrezhucn-webhook.sh |
作用:
- 拉取
petrezhucn最新代码 - 执行 Hexo 构建
- 把生成结果发布到站点目录
3)手动一键执行
1 | /root/scripts/sync-obsidian-blogs-to-petrezhucn.sh && /root/scripts/petrezhucn-webhook.sh |
定时任务
当前已配置 cron,每天早上 6 点自动同步:
1 | 0 6 * * * flock -xn /root/scripts/sync-obsidian-blogs-to-petrezhucn.lock -c '/root/scripts/sync-obsidian-blogs-to-petrezhucn.sh' |
如需稳妥,也可以手动再执行一次发布脚本。
Frontmatter 建议模板
1 |
|
注意事项
- 当前同步逻辑是“新增/覆盖”,不是自动删除。
- 如果删掉某篇博客,需同时删除博客仓库中的对应
_posts文件,再重新发布。 - 如果文章里使用本地附件图片,后续还需要补图片同步;外链图片可直接使用。
- 若服务器上的 Obsidian 副本落后,脚本会先执行
fetch + reset --hard到远端最新main。
本次落地结果
- 已建立固定博客源目录:
/root/git/Obsidian-Vault/Blogs - 已建立同步脚本与发布脚本
- 已建立 Hexo 同步副本
petrezhucn-sync - 已完成从 Obsidian 到 Hexo 的自动更新验证
以后新增博客,直接放到 Blogs/ 即可。