如何用纯Git方案分离Astro SSR博客的内容与站点代码?
独立内容仓库 + 部署脚本自动拉取方案
这个纯Git方案完全贴合你的需求:既实现内容与站点代码的版本分离,又简化协作者操作流程,同时预留CI/CD扩展空间,且无需修改Astro核心代码。
1. 初始化独立内容仓库
- 在GitHub创建私有仓库(例如
blog-content),仅存放Astro所需的Markdown内容,目录结构和Astro读取的content/子目录保持一致(比如posts/、pages/等)。 - 为协作者配置权限:使用GitHub个人访问令牌(PAT),仅授予
repo权限。协作者只需克隆该仓库,编辑推送Markdown文件即可,完全接触不到站点代码。 - 为内容仓库同步建立
dev和prod分支:协作者在dev分支提交内容,审核通过后合并到prod分支,站点部署仅拉取prod分支的稳定内容。
2. 站点服务器部署脚本配置
在自托管服务器上编写deploy-blog.sh脚本,替代手动拉取操作,脚本包含以下步骤:
# 拉取站点仓库prod分支最新代码 cd /path/to/your-astro-blog git checkout prod git pull origin prod # 同步内容仓库prod分支到Astro的content目录 if [ ! -d "./content/.git" ]; then # 首次部署:克隆内容仓库prod分支到content目录 git clone --branch prod https://<你的内容仓库PAT>@github.com/your-username/blog-content.git ./content else # 后续更新:直接拉取内容仓库prod分支最新内容 cd ./content git pull origin prod cd .. fi # 执行Astro构建并重启服务(根据你的部署工具调整,比如pm2) npm run build pm2 restart astro-blog
- 替换
<你的内容仓库PAT>为拥有内容仓库读取权限的令牌,避免暴露仓库地址。 - 每次更新服务器时,只需运行该脚本,即可自动同步最新站点代码和内容。
3. 协作者极简操作流程
协作者仅需3步,和操作普通Git仓库完全一致:
- 用个人令牌克隆内容仓库:
git clone https://<他们的PAT>@github.com/your-username/blog-content.git - 在
dev分支编辑内容:git checkout dev→ 编辑Markdown →git add .→git commit -m "更新XX文章"→git push origin dev - 提交PR到
prod分支,等待审核合并(利用GitHub的PR流程完成内容审核)
4. 预留CI/CD支持
未来搭建CI/CD时,只需在流程中加入以下核心步骤,即可无缝兼容GitHub Actions、GitLab CI等工具:
- 拉取站点仓库prod分支代码
- 用令牌拉取内容仓库prod分支到指定目录
- 执行构建与部署命令
方案优势
- 对比子模块/子树:协作者无需学习复杂Git子命令,操作零门槛,故障排查仅需处理内容仓库,不影响站点代码。
- 对比手动拉推:部署脚本自动同步内容,彻底避免人工复制粘贴的工作量和错误。
- 权限隔离彻底:协作者仅能访问内容仓库,站点代码完全保密。
内容的提问来源于stack exchange,提问作者Steve H
相关产品推荐
相关产品推荐

