通过 GitHub Actions 定时更新网站内容
内容提要
本文介绍了作者构建自给自足的内容管理系统的经历,该系统不需要传统意义上的内容数据库,并解决了手动部署网站和降低托管成本的问题。作者通过推送到主分支、更新内容和定时更新等设置实现了灵活和方便的操作。
延伸解读
模块化工作流的灵活性与手动触发
文章将系统拆分为三个独立工作流:推送主分支部署、更新内容、定时触发更新。这种模块化设计允许作者在旅行时通过手机手动触发“更新内容”工作流,无需等待定时任务。手动触发依赖GitHub PAT,因此需要妥善保管令牌。这种灵活性适合对内容上线时间不敏感、但希望随时控制更新时机的场景。
成本与实时性的权衡
作者明确表示书签上线速度不重要,因此选择定时更新而非实时同步。定时工作流每12小时运行一次(cron表达式为“13 0,12 * * *”),在保证内容最终一致的同时,避免了频繁构建和部署带来的成本。这种设计适合个人网站或对时效性要求不高的内容管理,但若需要即时发布,则需调整定时频率或改用其他触发方式。
安全配置与权限管理
系统使用多个GitHub Secrets:部署需要Cloudflare账户ID和API令牌,更新内容需要Notion API密钥和数据库ID,以及具有代码读写权限的PAT,定时触发则需要具有Actions读写权限的另一个PAT。作者为不同工作流分配不同PAT,遵循最小权限原则。读者在复现时应注意令牌权限范围,避免过度授权导致安全风险。
Q&A
如何构建一个自给自足的内容管理系统?
可以通过使用Notion数据库存储内容,并结合GitHub Actions实现自动化更新,避免手动部署。
这个系统如何解决手动部署网站的问题?
系统通过设置'推送到主分支'和'更新内容'的工作流程,实现自动构建和部署,减少手动操作。
定时更新内容的工作流程是如何设置的?
定时更新内容的工作流程使用cron表达式定期触发'更新内容'工作流程,确保内容保持最新。
作者使用Notion数据库的原因是什么?
作者希望在添加书签后无需手动部署网站,因此选择Notion数据库来存储内容。
如何通过手机手动触发内容更新?
可以使用GitHub个人访问令牌手动触发'更新内容'工作流程,从而在旅行时更新内容。
这种内容管理系统的优点是什么?
这种系统灵活且模块化,允许在不同环境下(如旅行时)轻松更新内容,降低了托管成本。