本人是高中生,不能经常用电脑,而移动端在编辑文章这块一直是一件非常蛋疼的事
hexo时期我一直在用qexo这个项目,移动端体验很好,但毕竟还是个网页,受限于网络,不能离线编辑,保存时会自动提交触发部署(即使保存的是草稿…)
在把博客迁移到Mizuki后我发现他有个叫 内容分离 的功能,简单来说启用这个功能后博客的代码和文章可以分别存在两个仓库,内容仓库有单独的版本管理,并且可以 多人协作,但是官方文档看的我有点晕,下面是我科研了一晚上的搭建教程
设置内容仓库
初始化
首先在github上创建一个空仓库用来存文章,然后在本地初始化仓库
1# 创建并进入新目录2mkdir Mizuki-Content3cd Mizuki-Content4
5# 初始化 Git 仓库6git init7
8# 创建目录结构9mkdir -p posts spec data images/albums images/diary images/posts10
11# 创建 README12cat > README.md << 'EOF'13# Mizuki 博客内容14
15这是 Mizuki 博客的内容仓库,包含所有文章、数据和图片。16
17## 目录结构18
19- `posts/` - 博客文章20- `spec/` - 特殊页面 (关于、友链等)21- `data/` - 数据文件 (番剧、项目、技能、时间线)22- `images/` - 图片资源23
24## 使用方法25
26此仓库作为 Mizuki 代码仓库的内容源,通过 Git Submodule 或独立模式关联。27
28详细说明请查看: https://github.com/matsuzaka-yuki/Mizuki29EOF初始化后的目录结构:
1.2├── README.md3├── data //数据目录,存放友链,日记等4├── images //图片目录5│ ├── albums6│ ├── diary7│ └── posts8├── posts //文章目录9└── spec //特殊页面迁移
然后迁移文章到内容仓库
1# 设置路径变量2MIZUKI_PATH="/path/to/your/Mizuki"3CONTENT_PATH="/path/to/Mizuki-Content"4
5# 复制文章6cp -r "$MIZUKI_PATH/src/content/posts/"* "$CONTENT_PATH/posts/"7
8# 复制特殊页面9cp -r "$MIZUKI_PATH/src/content/spec/"* "$CONTENT_PATH/spec/"10
11# 复制数据文件12cp "$MIZUKI_PATH/src/data/anime.ts" "$CONTENT_PATH/data/" 2>/dev/null || echo "anime.ts not found"13cp "$MIZUKI_PATH/src/data/projects.ts" "$CONTENT_PATH/data/" 2>/dev/null || echo "projects.ts not found"14cp "$MIZUKI_PATH/src/data/skills.ts" "$CONTENT_PATH/data/" 2>/dev/null || echo "skills.ts not found"15cp "$MIZUKI_PATH/src/data/timeline.ts" "$CONTENT_PATH/data/" 2>/dev/null || echo "timeline.ts not found"16
17# 复制图片18cp -r "$MIZUKI_PATH/public/images/albums/"* "$CONTENT_PATH/images/albums/" 2>/dev/null || echo "albums not found"19cp -r "$MIZUKI_PATH/public/images/diary/"* "$CONTENT_PATH/images/diary/" 2>/dev/null || echo "diary not found"20
21echo "✅ 内容复制完成!"提交更改
1cd "$CONTENT_PATH"2
3# 添加所有文件4git add .5
6# 提交7git commit -m "Initial commit: Migrate content from Mizuki monorepo"8
9# 添加远程仓库 (替换为你的仓库地址)10git remote add origin https://github.com/your-username/Mizuki-Content.git11
12# 推送13git branch -M master14git push -u origin master15
16echo "✅ 内容仓库已推送!"启用内容分离
然后回到你原来的仓库,修改 .env文件内容,启用内容分离
1# 启用内容分离2ENABLE_CONTENT_SYNC=true3
4# 内容仓库配置5CONTENT_REPO_URL=内容仓库地址6USE_SUBMODULE=true然后运行 pnpm run sync-content就可以内容仓库获取文章了
自动部署
内容分离后会出现一个问题,就是内容仓库的提交不会触发代码仓库的构建,需要手动更新一下才能触发,这显然不够优雅,但官方文档这方面写的好像并不详细,也可能是我没有仔细阅读
总之我没有用官方的Repository Dispatch方案,我选择的是直接在内容仓库提交后由actions触发pages的webhook接口来实现自动部署的(能跑就行)
在cloudflare控制台获取部署挂钩,然后填到girhub的仓库密钥,名字叫 CF_DEPLOY_HOOK
1.进入你用来存放自动化部署脚本的公开GitHub 仓库主页。 2.点击顶部的 Settings(设置)选项卡。 3.在左侧边栏中,向下滚动找到 Security 区域下的 Secrets and variables,展开后点击 Actions。 4.点击页面右侧绿色的 New repository secret(新建仓库密钥)按钮。 5.在 Name 字段中,为你的变量起一个大写的名字,CF_DEPLOY_HOOK。 在 Secret 字段中,粘贴你完整的 Cloudflare Pages 部署钩子 URL。 6.点击 Add secret 保存。
然后在 .github/workflows目录新建文件
1name: Cloudflare Pages Deploy2
3on:4 push:5 branches:6 - master7 paths:8 - 'data/**'9 - 'images/**'10 - 'posts/**'11 - 'spec/**'12
13jobs:14 deploy:15 runs-on: ubuntu-latest16 steps:17 - name: Trigger Cloudflare Pages Deploy Hook18 run: |19 curl -X POST ${{ secrets.CF_DEPLOY_HOOK }}只有 data,posts,images,spec目录的提交才会触发部署,现在可以把仓库连接到obsidian来写作了
部分信息可能已经过时