尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

基于Obsidian与GitHub Actions构建自动化内容工作流

基于Obsidian与GitHub Actions构建自动化内容工作流 1. 项目概述从混沌到秩序的内容创作革命如果你和我一样每天被“今天写什么”、“素材在哪”、“排版怎么又乱了”这些问题反复折磨那你一定懂那种内容创作的无力感。我做了十多年博主从科技评测到生活分享几乎踩遍了所有坑。最头疼的不是写不出来而是整个创作过程像一团乱麻——灵感散落在十几个App里草稿躺在不同设备上发布前还要手动同步到五六个平台一套流程下来精力耗去大半创作的热情早就磨没了。“Openclaw创建内容工作流”这个项目就是我为了终结这种混乱而发起的一次系统性自救。它不是一个现成的软件而是一套基于开源与自动化工具将内容创作的“灵感捕捉 → 素材整理 → 内容生产 → 多平台发布 → 数据分析”全链路打通的个人化系统。你可以把它理解为你专属的、高度可定制的“数字内容工厂”。核心目标就一个把创作者从重复、琐碎的机械劳动中解放出来让我们能更专注在真正的思考与表达上。这套工作流尤其适合独立创作者、知识博主、小型团队以及任何需要持续产出高质量数字内容的人。无论你是写公众号文章、做小红书图文、录制播客还是制作视频其底层逻辑——标准化、自动化、资产化——都是相通的。接下来我就把这套折腾了无数个日夜最终稳定运行了两年多的系统从设计思路到每个螺丝钉的安装毫无保留地拆解给你。2. 核心设计哲学为什么是“Openclaw”在动手搭建任何系统之前想清楚“为什么”比“怎么做”更重要。我将其命名为“Openclaw”开放之爪寓意是希望这套系统能像灵活的爪子一样牢牢抓取创作过程中的各种元素同时保持“开放”的本质。2.1 对抗数字碎片化统一你的创作战场我们面临的第一个敌人是“数字碎片化”。你的灵感可能在手机的便签里参考文章在浏览器的上百个标签页中图片素材在电脑的“下载”文件夹深处而文稿又在石墨文档或Notion里。这种状态导致每次创作都要进行一次“全盘搜索”效率极低。Openclaw工作流的第一步就是建立一个统一的、中心化的信息仓库。所有输入无论来源都必须流向这个仓库。这就像为你的思维修建一个专属水库所有雨水灵感都必须通过管道汇集于此而不是任由其散落蒸发。我选择用Obsidian作为这个核心仓库因为它基于本地Markdown文件所有权完全在自己手里并且其“双向链接”和“知识图谱”功能能让零散的灵感自动产生关联孕育出意想不到的新想法。2.2 拥抱自动化让机器处理重复劳动第二个核心是自动化。内容创作中有大量重复动作将文稿同步到博客后台、转换格式发布到其他平台、下载封面图并压缩、在发布后自动推送到社交媒体……这些工作不值得消耗你宝贵的心智带宽。Openclaw工作流大量使用GitHub Actions、IFTTT、Zapier以及Python脚本来实现自动化。例如当我完成一篇Markdown文稿并推送到GitHub仓库后自动化流程可以1自动构建静态网站并部署2自动将文章摘要和链接发布到Twitter和Telegram频道3自动备份文稿到另一个云存储。你的角色从“操作工”转变为“监工”和“设计师”只需设定好规则剩下的交给机器。2.3 资产化思维让每一份创作都产生复利很多人把内容当作一次性的“产品”发布后就束之高阁。而资产化思维要求我们把内容看作可重复利用、可增值的“资产”。一篇深度文章可以拆解成多条微博、一张信息图、一段播客素材一个核心观点可以在未来的多篇文章中被引用和深化。Openclaw工作流通过结构化标签和双向链接来实现资产化管理。在Obsidian中我会为每篇笔记打上诸如#公众号文章、#素材-案例、#观点-数字化转型这样的标签。未来当我想写关于“数字化转型”的文章时我可以通过一个简单的搜索瞬间找到所有相关的过往文章、案例素材和零星想法。这极大地提升了创作效率和质量真正实现了“知识复利”。3. 工作流核心架构与工具选型一套稳定的工作流离不开合理的架构和趁手的工具。我的Openclaw系统主要由五个核心模块组成下图清晰地展示了信息与任务在这些模块间的流动路径flowchart TD A[“输入层br灵感捕获”] -- B[“核心仓库brObsidian管理”] B -- C[“加工层br内容生产”] C -- D[“输出层br多平台发布”] D -- E[“反馈层br数据分析”] subgraph A [输入层] A1[闪念胶囊] -- A2[网页剪辑] A3[微信收藏] -- A2 A2 -- B end subgraph B [核心仓库] B1[“Inbox收件箱”] -- B2[“整理与关联”] B2 -- B3[“知识图谱形成”] end subgraph C [加工层] C1[“Markdown写作”] -- C2[“素材嵌入br图/表/代码”] C2 -- C3[“初稿完成”] end subgraph D [输出层] C3 -- D1[“自动化部署brGitHub Actions”] D1 -- D2[“主站发布br静态博客”] D2 -- D3[“社交平台同步brIFTTT/Zapier”] end subgraph E [反馈层] D2 -- E1[“数据统计brGoogle Analytics/Umami”] E1 -- E2[“反馈整理br评论/邮件归集”] E2 -- B1[“回流至核心仓库”] end下面我们来逐一拆解每个环节的工具选择与设计理由。3.1 输入与捕获打造无处不在的灵感漏斗目标是建立一个低摩擦、全场景的输入系统确保任何灵感在消失前都能被迅速捕获。核心工具Flomo OmnivoreFlomo浮墨笔记这是我的“闪念胶囊”。它的微信输入、快捷指令iOS、浏览器插件等多端入口让我能在任何场景下用一句话或一段语音快速记录想法。我给自己定的规矩是记录时间不超过30秒。Flomo的每日回顾和随机漫步功能能很好地帮助激活过去的碎片灵感。Omnivore开源免费的“稍后读”和网页剪辑神器。当我浏览到有价值的文章、报道时一键保存到Omnivore。它的高亮和批注功能非常出色所有标注都会自动同步并可以导出为Markdown直接成为我的写作素材。微信传输助手作为一个临时中转站。在手机上看到图片、文字来不及处理先丢进“文件传输助手”电脑端登录微信后统一处理。实操心得千万不要在捕获阶段追求完美格式。很多灵感死于“等我打开电脑好好写”。先完整地记下来哪怕只有关键词整理是后面阶段的事。3.2 核心仓库与知识管理构建你的数字大脑这是工作流的心脏所有信息在这里沉淀、关联、发酵。核心工具Obsidian为什么是Obsidian首先它基于本地Markdown文件数据完全由自己掌控没有厂商锁定的风险。其次它的双向链接和知识图谱是革命性的。当你创建[[数字化转型]]这样的链接时不仅链向了目标笔记目标笔记也会显示所有引用它的笔记从而自动形成知识网络。文件夹结构设计My-Obsidian-Vault/ ├── 0-Inbox/ # 收件箱临时存放所有捕获的内容 ├── 1-Projects/ # 进行中的创作项目 ├── 2-Areas/ # 持续关注的领域如“自媒体运营”、“编程” ├── 3-Resources/ # 永久资源如“好用工具清单”、“金句库” ├── 4-Archives/ # 已完成项目的归档 └── 9-Templates/ # 各类模板文章模板、视频脚本模板等核心插件推荐Dataview让笔记变成数据库。你可以用查询语句自动列出所有带#待发布标签的文章或统计本月创作数量。Templater定义自动化模板。我的“公众号文章模板”会自动生成包含标题、Front-Matter元数据、固定章节结构的文档。QuickAdd快速收集和创建笔记与Flomo等工具联动实现一键入库。3.3 加工与生产从素材到成品的流水线这是将仓库中的“原材料”加工为“成品”的阶段。写作与排版坚持使用Markdown。它纯文本、格式简单、与平台无关。在Obsidian中写作能实时看到双向链接的上下文激发新思路。对于需要精美排版的公众号我使用Markdown Nice这类工具将Markdown一键转换为美观的微信排版。素材处理图片使用Snipaste进行截图和贴图标注用Squoosh或TinyPNG进行无损压缩用Photopea在线PS进行简单的裁剪、调色。图表技术架构图、流程图使用Draw.io集成在Obsidian中数据图表用Obsidian的Advanced Tables插件或导出Excel数据后生成。版本控制整个Obsidian仓库通过Git进行版本管理并托管在私有GitHub仓库中。这不仅是备份更能清晰地看到每篇文章的修改历史和写作脉络。3.4 发布与分发一键触达多平台的自动化枢纽这是自动化大显身手的环节目标是“一次编写多处发布”。核心平台主站我选择Hugo生成静态博客托管在Vercel上。原因是免费、速度快、完全可控。Hugo能完美渲染Obsidian中的Markdown笔记需注意双链语法转换。自动化部署流水线我在Obsidian中完成文章保存到1-Projects/Blog目录。使用Obsidian的Git插件提交更改并推送到GitHub。GitHub Actions被触发自动执行以下操作将文章从Obsidian格式转换为标准Hugo文章格式一个Python脚本完成。运行Hugo构建静态网站。将构建好的文件部署到Vercel。几分钟后文章就在我的主站上线了。多平台同步公众号通过浏览器插件将主站文章页面一键抓取到公众号编辑器微调后发布。社交媒体使用IFTTT或Zapier。创建Applet当我的主站RSS Feed有新条目时自动提取标题和链接发布到Twitter和Telegram频道。Newsletter使用ConvertKit或Revue同样通过RSS自动抓取最新博文发送给订阅者。避坑指南自动化同步到社交媒体时务必添加平台特定的标签如#Tech、#Blogging并定制一下推送文案避免生硬的“新文章《XXX》已发布”这种格式互动率会更高。3.5 反馈与优化闭合循环的数据驱动发布不是终点而是下一个循环的起点。需要收集反馈来优化内容。数据分析在主站集成Umami开源、隐私友好的分析工具或Google Analytics关注页面浏览量、访客来源、阅读时长等。反馈归集将博客评论通过Giscus基于GitHub Discussions、社交媒体评论、读者邮件等有选择地整理回Obsidian的对应文章笔记下作为后续修改或写作新文章的素材。定期回顾每周或每月利用Obsidian的查询功能回顾发布数据好的文章和反馈多的文章分析其共同点总结成“高流量内容 checklist”指导未来的选题和写作。4. 关键配置与实操步骤详解理论讲完我们来点实在的。下面以“从Obsidian写作到自动发布到静态博客”这个最核心的流程为例展示关键配置。4.1 环境准备与工具链安装安装Obsidian并创建仓库从官网下载安装新建一个文件夹作为你的知识库。建议初始就启用“核心插件”中的“模板”和“大纲”。安装并配置Git在电脑上安装Git。在Obsidian仓库根目录打开终端执行git init初始化仓库。然后去GitHub创建一个新的私有仓库将其添加为远程仓库。git remote add origin https://github.com/你的用户名/你的仓库名.git安装Node.js和HugoHugo是基于Go的但通常通过npm安装很方便。确保系统已安装Node.js然后通过命令行安装Hugo扩展版本。npm install -g hugo-extended创建Hugo站点在你喜欢的位置运行hugo new site myblog创建一个新的Hugo站点。然后选择一个主题如Stack按照主题文档进行基本配置。4.2 Obsidian与Hugo的协同配置这是最关键的一步需要让两者和谐共处。在Obsidian仓库中规划文章目录我在1-Projects/下创建Blog文件夹所有待发布和已发布的博客文章草稿都放在这里。创建文章模板在Obsidian的9-Templates/下创建Blog-Post.md模板内容如下--- title: {{title}} date: {{date:YYYY-MM-DD}}T{{time:HH:mm:ss}}08:00 draft: true # 初稿时为true完成准备发布时改为false tags: [] categories: [] --- # {{title}} !-- 这里是正文开始 --这个Front-Matter两个---之间的部分是Hugo用来识别文章元数据的。配置Obsidian Git插件安装社区插件“Obsidian Git”设置自动拉取、推送和备份的时间间隔如每30分钟。这是实现自动化的基础。编写格式转换脚本由于Obsidian的双向链接语法[[ ]]与Hugo不兼容需要转换。在仓库根目录创建一个Python脚本convert.pyimport os import re import shutil from datetime import datetime def convert_obsidian_to_hugo(obsidian_path, hugo_content_path): for root, dirs, files in os.walk(obsidian_path): for file in files: if file.endswith(.md): obsidian_file_path os.path.join(root, file) # 读取Obsidian文件内容 with open(obsidian_file_path, r, encodingutf-8) as f: content f.read() # 转换1: 将Obsidian双链 [[目标]] 转换为Hugo短码或普通链接 # 这里简单转换为普通链接复杂情况可用短码 content re.sub(r\[\[([^\]])\]\], r[\1](\1), content) # 转换2: 处理标签 #tag 为Hugo格式如果需要 # Hugo通常用Front-Matter的tags字段这里可忽略或移除行内标签 # content re.sub(r\s#([a-zA-Z0-9_]), , content) # 移除行内标签 # 确定Hugo中的目标路径和文件名 # 例如将文件复制到hugo的content/posts目录下保持同名 relative_path os.path.relpath(obsidian_file_path, obsidian_path) hugo_file_path os.path.join(hugo_content_path, posts, relative_path) # 确保目标目录存在 os.makedirs(os.path.dirname(hugo_file_path), exist_okTrue) # 写入转换后的内容到Hugo目录 with open(hugo_file_path, w, encodingutf-8) as f: f.write(content) print(fConverted: {obsidian_file_path} - {hugo_file_path}) if __name__ __main__: # 你的Obsidian博客文章目录 OBSIDIAN_BLOG_PATH /path/to/your/Obsidian/Vault/1-Projects/Blog # 你的Hugo站点content目录 HUGO_CONTENT_PATH /path/to/your/hugo/site convert_obsidian_to_hugo(OBSIDIAN_BLOG_PATH, HUGO_CONTENT_PATH)注意这是一个基础示例。实际应用中你可能需要处理更复杂的双链情况如带别名[[目标|别名]]、嵌入图片路径转换等。建议先在小范围测试。4.3 构建自动化部署流水线GitHub Actions在Hugo站点的仓库不是Obsidian仓库中创建.github/workflows/deploy.yml文件name: Deploy Hugo Site to Vercel on: push: branches: [ main ] # 当主分支有推送时触发 workflow_dispatch: # 允许手动触发 jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout Code uses: actions/checkoutv3 with: submodules: recursive # 如果主题是子模块需要这个 fetch-depth: 0 - name: Setup Hugo uses: peaceiris/actions-hugov2 with: hugo-version: latest extended: true - name: Run Conversion Script (Optional) run: | # 这里可以放置从Obsidian仓库拉取文章并运行转换脚本的命令 # 例如如果你的转换脚本和文章在同一个仓库的特定目录 python scripts/convert.py # 注意更常见的做法是Obsidian通过Git推送到一个“源”分支 # 然后这个Action从“源”分支获取文件转换后构建。 # 这里假设转换后的Markdown文件已经存在于当前仓库的content/posts目录。 - name: Build Hugo Site run: hugo --minify - name: Deploy to Vercel uses: amondnet/vercel-actionv20 with: vercel-token: ${{ secrets.VERCEL_TOKEN }} # 需要在GitHub仓库Settings中设置此Secret vercel-org-id: ${{ secrets.VERCEL_ORG_ID }} vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }} working-directory: ./ vercel-args: --prod # 部署到生产环境这个工作流实现了代码推送 → 自动安装Hugo → 可选转换文章格式 → 构建静态网站 → 部署到Vercel。你需要先在Vercel上关联你的GitHub仓库项目然后在GitHub仓库的Settings - Secrets中配置VERCEL_TOKEN、VERCEL_ORG_ID和VERCEL_PROJECT_ID。4.4 发布流程的SOP标准作业程序当一切就绪你的日常发布流程将变得极其简单写作在Obsidian的1-Projects/Blog下用模板新建笔记开始写作。插入图片时直接粘贴到笔记同名的附件文件夹Obsidian自动管理。定稿文章写完检查无误后将Front-Matter中的draft: true改为draft: false。提交在Obsidian中使用Git插件填写提交信息如“发布文章Openclaw工作流详解”然后点击推送。触发自动化推送操作同步到GitHub触发GitHub Actions工作流。等待与验证大约2-5分钟后打开你的Vercel站点域名刷新即可看到新文章。同时你设定的IFTTT等自动化工具会将新文章通知同步到社交媒体。至此一个从本地写作到全球发布的自动化闭环就完成了。你只需专注于第一步的创作。5. 常见问题与故障排查实录在搭建和运行这套系统的过程中我遇到了不少坑。这里把典型问题和解决方案记录下来希望能帮你节省时间。5.1 图片路径问题问题在Obsidian中插入的图片发布到Hugo后无法显示。原因Obsidian支持相对路径和绝对路径但Hugo对图片资源的存放位置有特定要求通常放在static目录下。两者的路径解析方式不同。解决方案统一管理在Obsidian中使用附件功能将图片放在与笔记同名的文件夹内。在转换脚本中将这些图片同步复制到Hugo站点的static/images/posts/文章名/目录下。路径重写在转换脚本中不仅转换文本还要查找Markdown中的图片语法![]()并将其中的路径重写为Hugo可识别的绝对路径如/images/posts/文章名/图片.png。使用图床更一劳永逸的方法是使用图床如SM.MS、Imgur或自建。在Obsidian中可以使用PicGo插件截图后自动上传到图床并将Markdown图片链接插入笔记。这样链接是公网URL在任何平台都能显示。5.2 双向链接转换失败问题Obsidian中丰富的[[内部链接]]在Hugo中变成死链或显示异常。原因Hugo原生不支持Obsidian的双链语法。解决方案简单转换如上面的脚本所示转换为普通Markdown链接[链接文本](目标文章)。但这要求目标文章的URL路径是确定的。使用Hugo短码创建Hugo短码来模拟双链效果。例如创建layouts/shortcodes/link.html{{ $page : .Site.GetPage (.Get 0) }} {{ if $page }} a href{{ $page.RelPermalink }} classinternal-link{{ default $page.Title (.Get 1) }}/a {{ else }} span classbroken-link{{ .Get 0 }}/span {{ end }}然后在转换脚本中将[[目标]]转换为{{ link 目标 }}将[[目标|别名]]转换为{{ link 目标 别名 }}。这种方式更强大但转换脚本更复杂。妥协方案如果双链不是必须的可以在发布前将重要的双链手动改为普通链接不重要的直接移除。这适合发布导向的笔记而内部知识库则保留Obsidian的原生双链。5.3 自动化流程中断问题GitHub Actions执行失败网站没有更新。排查步骤查看日志进入GitHub仓库的“Actions”标签页点击失败的工作流查看详细的错误日志。这是最直接的线索。常见错误Hugo版本不兼容确保工作流中指定的Hugo版本与本地开发环境一致特别是是否都需要extended版本。依赖缺失如果使用了自定义的Hugo模块或主题确保在工作流中正确配置了submodules: recursive或执行了hugo mod get。路径错误检查转换脚本或构建命令中的文件路径是否正确尤其是在GitHub Actions的虚拟环境中。密钥失效检查Vercel的部署密钥VERCEL_TOKEN等是否在GitHub Secrets中正确配置且未过期。本地测试在本地终端切换到Hugo站点目录尝试运行hugo --minify看是否能成功构建。这能排除大部分环境问题。5.4 信息过载与维护负担问题工具太多流程复杂感觉维护这套系统本身就成了负担。核心建议迭代式搭建从简开始。不要试图一天就搭建好所有环节。MVP最小可行产品先从最痛点开始。如果你最大的问题是写作环境杂乱那就先只搭建Obsidian核心仓库Markdown写作流程。如果问题是发布麻烦就先实现Git手动推送半自动发布。固化一个环节再扩展下一个。当“写作-发布”主流程稳定运行两周后再考虑添加“灵感捕获”或“社交媒体自动同步”。定期精简每季度回顾一次哪些工具很少用了哪些自动化流程其实没必要果断砍掉。系统的核心是为你服务而不是你伺候系统。6. 进阶优化与个性化扩展当基础工作流跑顺后你可以尝试以下进阶玩法让系统更智能、更贴合你的需求。6.1 利用API实现深度集成自动同步到Notion数据库如果你用Notion做内容规划可以写一个脚本当Obsidian中某篇文章的Front-Matter里status变为published时自动调用Notion API在指定的数据库里创建一条记录包含标题、链接、标签等信息。语音写作集成通过DraftsiOS/macOS App的语音转文字功能快速记录灵感并配置其动作一键发送到Obsidian的Inbox文件夹。阅读数据回流将Umami或Google Analytics的API接入定期如每周将热门文章的数据自动写入对应Obsidian笔记的Front-Matter中方便后续分析。6.2 构建内容日历与看板在Obsidian中使用Dataview插件可以动态生成强大的内容看板。dataview TABLE status AS 状态, date AS 日期, file.tags AS 标签 FROM 1-Projects/Blog WHERE status ! archived SORT date ASC 这段代码会生成一个表格列出所有非归档状态的文章及其状态、日期和标签。你还可以用WHERE status idea来筛选所有灵感用WHERE date date(today) - dur(7 days)来查看本周完成的任务。这比任何外部项目管理工具都直观因为数据和写作环境是一体的。6.3 设计个性化的分析仪表板在Obsidian中创建一个“创作仪表板”笔记利用Dataview查询来展示关键数据## 本周创作统计 dataview LIST FROM 1-Projects/Blog WHERE date(file.ctime) date(today) - dur(7 days) ## 待发布文章 dataview LIST FROM 1-Projects/Blog WHERE status ready ## 高频标签 dataview LIST rows.file.link FROM 1-Projects/Blog FLATTEN file.tags as tag GROUP BY tag SORT length(rows) DESC LIMIT 10 打开这个笔记你就能对自己的创作情况一目了然。搭建Openclaw内容工作流就像为自己量身定制一套顺手的创作装备。它不会让你立刻成为写作高手但能确保当你灵感迸发时工具不会成为绊脚石当你想要复盘时所有资料都触手可及。这个过程本身也是对个人创作习惯的一次深度梳理和优化。最重要的是这套系统完全属于你你可以随着需求的变化不断调整和进化它。
返回列表