Files
blog-code/docs/CONTENT_SEPARATION.md
2025-12-08 01:03:07 +08:00

526 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Mizuki 内容分离完整指南
本指南详细说明如何在 Mizuki 中使用内容分离功能,包括基础配置、私有仓库、CI/CD 部署等所有场景。
## 📖 目录
- [快速开始](#-快速开始)
- [ENABLE_CONTENT_SYNC 控制开关](#-enable_content_sync-控制开关)
- [配置方式](#-配置方式)
- [私有仓库](#-私有仓库配置)
- [CI/CD 部署](#-cicd-部署)
- [常用命令](#-常用命令)
- [故障排查](#-故障排查)
---
## 🚀 快速开始
### 新手推荐: 本地模式 (最简单)
**不需要任何配置**,直接开始使用:
```bash
# 克隆项目
git clone https://github.com/matsuzaka-yuki/Mizuki.git
cd Mizuki
# 安装依赖
pnpm install
# 直接开发
pnpm dev
```
内容存放在 `src/content/``public/images/` 目录,与代码一起管理。
### 进阶: 启用内容分离
如果需要将内容独立管理(多人协作、私有内容、独立版本控制),按以下步骤配置:
```bash
# 1. 创建 .env 文件
cp .env.example .env
# 2. 编辑 .env,启用内容分离
ENABLE_CONTENT_SYNC=true
CONTENT_REPO_URL=https://github.com/your-username/Mizuki-Content.git
# 3. 同步内容
pnpm run sync-content
# 4. 启动开发
pnpm dev
```
---
## 🎛️ ENABLE_CONTENT_SYNC 控制开关
### 功能说明
`ENABLE_CONTENT_SYNC` 是一个一键开关,控制是否启用内容分离功能。
| 值 | 说明 | 适用场景 |
|---|---|---|
| `false` 或未设置 | **禁用内容分离** (默认) | 新手、个人博客、内容较少 |
| `true` | **启用内容分离** | 团队协作、私有内容、大量文章 |
### 配置位置
在项目根目录的 `.env` 文件中:
```bash
# 禁用内容分离 (使用本地内容)
ENABLE_CONTENT_SYNC=false
# 或启用内容分离 (从远程仓库同步)
ENABLE_CONTENT_SYNC=true
```
### 使用场景对比
#### 场景 1: 本地模式 (推荐新手)
**特点**:
- ✅ 无需额外配置
- ✅ 内容和代码一起管理
- ✅ 适合个人博客、小型项目
**配置**:
```bash
# .env (或不创建 .env 文件)
ENABLE_CONTENT_SYNC=false
```
**工作流程**:
```bash
# 直接编辑 src/content/ 下的文章
pnpm dev
# 提交时一起提交代码和内容
git add .
git commit -m "Update content"
git push
```
#### 场景 2: 独立仓库(分离)模式
**特点**:
- ✅ 内容独立仓库管理
- ✅ 支持私有内容仓库
- ✅ 多人协作方便
- ✅ 独立的内容版本控制
**配置**:
```bash
# .env
ENABLE_CONTENT_SYNC=true
CONTENT_REPO_URL=https://github.com/your-username/Mizuki-Content.git
```
**工作流程**:
```bash
# 自动同步内容后启动
pnpm dev
# 内容在独立仓库编辑
cd /path/to/Mizuki-Content
# 编辑文章
git add .
git commit -m "Update article"
git push
```
### 模式切换
#### 从本地切换到独立仓库
1. 创建内容仓库 (参考 [CONTENT_MIGRATION.md](./CONTENT_MIGRATION.md))
2. 编辑 `.env`:
```bash
ENABLE_CONTENT_SYNC=true
CONTENT_REPO_URL=https://github.com/your-username/Mizuki-Content.git
```
3. 同步内容: `pnpm run sync-content`
#### 从独立仓库切换回本地
1. 编辑 `.env`:
```bash
ENABLE_CONTENT_SYNC=false
```
2. 直接开发: `pnpm dev`
---
## ⚙️ 配置方式
### 环境变量说明
在 `.env` 文件中配置:
```bash
# ============================================
# 功能开关
# ============================================
# 是否启用内容分离功能
# false = 使用本地内容 (推荐新手)
# true = 从远程仓库同步内容
ENABLE_CONTENT_SYNC=false
# ============================================
# 内容仓库配置 (仅当 ENABLE_CONTENT_SYNC=true 时需要)
# ============================================
# 内容仓库地址
# 支持 HTTPS 和 SSH 方式
# 公开仓库: https://github.com/username/repo.git
# 私有仓库 (SSH): git@github.com:username/repo.git
# 私有仓库 (Token): https://TOKEN@github.com/username/repo.git
CONTENT_REPO_URL=https://github.com/your-username/Mizuki-Content.git
# 内容目录路径 (默认 ./content 一般无需改动)
CONTENT_DIR=./content
```
### 配置示例
#### 示例 1: 完全本地 (最简单)
```bash
# .env
ENABLE_CONTENT_SYNC=false
```
或者**不创建 `.env` 文件**,直接使用本地内容。
#### 示例 2: 公开仓库 (HTTPS)
```bash
# .env
ENABLE_CONTENT_SYNC=true
CONTENT_REPO_URL=https://github.com/your-username/Mizuki-Content.git
```
#### 示例 3: 私有仓库 (SSH)
```bash
# .env
ENABLE_CONTENT_SYNC=true
CONTENT_REPO_URL=git@github.com:your-username/Mizuki-Content-Private.git
```
---
## 🔄 自动构建触发 (内容更新时)
### 问题
启用内容分离后,默认只有代码仓库更新会触发部署,内容仓库更新**不会**自动触发。
### 解决方案
**推荐使用 Repository Dispatch**5 步快速配置,适用所有部署平台。
详细步骤请查看:
- **[自动构建触发快速参考](./AUTO_BUILD_TRIGGER.md)** - 最简洁的配置指南 ⭐
- **[部署文档 - 完整说明](./DEPLOYMENT.md#内容仓库更新触发构建)** - 包含多种方案
- **[内容仓库配置指南](../Mizuki-Content/.github/workflows/README.md)** - 工作流详细说明
---
## 🔐 私有仓库配置
完全支持私有内容仓库! 推荐使用 SSH 方式,安全且方便。
### 方案 A: SSH 密钥 (推荐)
#### 1. 生成 SSH 密钥
```bash
# 推荐使用 Ed25519
ssh-keygen -t ed25519 -C "your_email@example.com"
# 或使用 RSA
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
```
按提示操作,默认保存到 `~/.ssh/id_ed25519`。
#### 2. 添加公钥到 Git 平台
```bash
# 查看公钥
cat ~/.ssh/id_ed25519.pub
# Windows PowerShell
Get-Content ~/.ssh/id_ed25519.pub
```
**GitHub**:
- Settings → SSH and GPG keys → New SSH key
- 粘贴公钥内容
**GitLab**:
- Preferences → SSH Keys → Add new key
**Gitee**:
- 设置 → SSH 公钥 → 添加公钥
#### 3. 配置 Mizuki
在 `.env` 文件中使用 SSH URL:
```bash
ENABLE_CONTENT_SYNC=true
CONTENT_REPO_URL=git@github.com:your-username/Mizuki-Content-Private.git
```
#### 4. 测试连接
```bash
# 测试 GitHub 连接
ssh -T git@github.com
# 测试 GitLab 连接
ssh -T git@gitlab.com
# 同步内容
pnpm run sync-content
```
### 方案 B: HTTPS + Personal Access Token
#### 1. 生成 Token
**GitHub**:
- Settings → Developer settings → Personal access tokens → Generate new token
- 权限: 勾选 `repo` (完整访问)
**GitLab**:
- Preferences → Access Tokens
- Scopes: `read_repository`
**Gitee**:
- 设置 → 私人令牌 → 生成新令牌
- 权限: `projects` (读取)
#### 2. 配置 .env
```bash
ENABLE_CONTENT_SYNC=true
CONTENT_REPO_URL=https://YOUR_TOKEN@github.com/your-username/Mizuki-Content-Private.git
```
⚠️ **安全提示**:
- **不要将 `.env` 提交到 Git!** (已在 `.gitignore` 中)
- Token 具有完整权限,请妥善保管
---
## 🌐 CI/CD 部署
### 快速配置
所有部署平台都使用相同的自动同步机制:
- ✅ `pnpm build` 执行前自动运行 `prebuild` 钩子
- ✅ 根据 `ENABLE_CONTENT_SYNC` 决定是否同步内容
- ✅ 同步失败不会中断构建,回退到本地内容
**只需配置环境变量,无需修改构建命令!**
### 环境变量配置
在部署平台添加以下环境变量:
| 变量名 | 值 | 说明 |
|-------|---|------|
| `ENABLE_CONTENT_SYNC` | `true` | 启用内容分离 |
| `CONTENT_REPO_URL` | 仓库地址 | 内容仓库的 URL |
### 支持的平台
- ✅ **GitHub Pages** - 使用 GitHub Actions
- ✅ **Vercel** - 环境变量配置
- ✅ **Netlify** - 环境变量配置
- ✅ **Cloudflare Pages** - 环境变量配置
### 详细配置指南
不同平台的具体配置步骤、私有仓库认证、故障排查等详细信息,请查看:
📖 **[部署指南](./DEPLOYMENT.md)** - 完整的部署文档,包含:
- GitHub Pages 自动部署配置
- Vercel 部署详细步骤
- Netlify 部署配置
- Cloudflare Pages 部署
- 私有仓库认证配置
- 常见问题故障排查
---
## 📋 常用命令
| 命令 | 说明 |
|------|------|
| `pnpm run init-content` | 运行交互式初始化向导 |
| `pnpm run sync-content` | 手动同步内容仓库 |
| `pnpm run check-env` | 检查环境变量配置 |
| `pnpm dev` | 启动开发服务器 (自动同步) |
| `pnpm build` | 构建项目 (自动同步) |
### 自动同步时机
当 `ENABLE_CONTENT_SYNC=true` 时,以下命令会自动同步内容:
- `pnpm dev` - 开发前自动同步
- `pnpm build` - 构建前自动同步
同步失败不会中断开发,会显示警告并继续。
---
## 🔍 故障排查
### 问题 1: 提示 "未启用内容分离功能"
**原因**: `ENABLE_CONTENT_SYNC` 未设置或设置为 `false`。
**解决**:
```bash
# 检查 .env 文件
cat .env
# 确认有以下配置
ENABLE_CONTENT_SYNC=true
```
### 问题 2: 提示 "未设置 CONTENT_REPO_URL"
**原因**: 启用了内容分离但未配置仓库地址。
**解决**:
```bash
# 在 .env 中添加
CONTENT_REPO_URL=https://github.com/your-username/Mizuki-Content.git
```
### 问题 3: 私有仓库认证失败
**SSH 方式**:
```bash
# 测试 SSH 连接
ssh -T git@github.com
# 应该看到: Hi username! You've successfully authenticated...
```
如果失败,检查:
- SSH 密钥是否生成: `ls ~/.ssh/`
- 公钥是否添加到 GitHub
- SSH agent 是否运行: `ssh-add -l`
**HTTPS + Token 方式**:
- 检查 Token 是否有效
- 检查 Token 权限是否正确 (`repo` 权限)
- 确认 URL 格式: `https://TOKEN@github.com/user/repo.git`
### 问题 4: .env 文件不生效
**检查清单**:
1. 文件位置正确 (项目根目录)
```bash
ls -la .env # Linux/Mac
dir .env # Windows
```
2. 文件格式正确
```bash
# ✅ 正确
ENABLE_CONTENT_SYNC=true
# ❌ 错误 (多余空格)
ENABLE_CONTENT_SYNC = true
# ❌ 错误 (不需要引号,除非值中有空格)
ENABLE_CONTENT_SYNC="true"
```
3. 文件权限可读
```bash
chmod 644 .env # Linux/Mac
```
4. 运行检查命令
```bash
pnpm run check-env
```
### 问题 5: 内容同步失败
```bash
# 手动同步内容
pnpm run sync-content
# 检查内容目录
ls -la content/
# 手动克隆内容仓库
git clone https://github.com/your-username/Mizuki-Content.git content
```
### 问题 6: 部署时内容未同步
**Vercel/Netlify**:
- 确认环境变量已添加
- 检查构建日志,查看同步步骤是否执行
- 确认 Token 在部署环境有效
**GitHub Actions**:
- 检查工作流配置
- 查看 Actions 运行日志
- 确认 Secrets 已正确添加
---
## 💡 最佳实践
### 新手建议
1. **从本地模式开始** - 不需要额外配置,立即可用
2. **内容稳定后再分离** - 等内容积累到一定程度
3. **使用 SSH 方式** - 比 Token 更安全方便
### 进阶用户
1. **使用独立仓库模式** - 清晰的版本控制
2. **内容仓库添加 CI** - 自动检查文章格式、图片优化等
3. **分支管理** - main 分支用于生产,develop 用于预览
### 团队协作
1. **统一环境变量** - 团队成员使用相同的配置
2. **权限控制** - 内容仓库设置为私有,精细控制访问权限
3. **Git Hooks** - 提交前检查文章格式、图片大小等
---
## 📚 相关文档
- [内容迁移指南](./CONTENT_MIGRATION.md) - 如何从单仓库迁移到分离模式
- [内容仓库结构](./CONTENT_REPOSITORY.md) - 内容仓库的推荐结构
- [主 README](../README.zh.md) - 项目总体说明
---
## 🤝 需要帮助?
- 查看 [GitHub Issues](https://github.com/matsuzaka-yuki/Mizuki/issues)
- 阅读 [完整文档](../README.zh.md)
- 运行 `pnpm run check-env` 检查配置
祝你使用愉快! 🎉