diff --git a/docs/技术/index.md b/docs/技术/index.md index 510195b..b093a9f 100644 --- a/docs/技术/index.md +++ b/docs/技术/index.md @@ -31,5 +31,6 @@ ## 📝 技术笔记 +- [MkDocs 知识库部署](mkdocs部署.md) — MkDocs Material 构建 + Caddy 静态文件服务 - [旁路由 + 去广告 部署](旁路由部署.md) — sing-box + AdGuard Home 旁路由架构、配置路径、已知问题 - [Artalk 评论系统](artalk评论系统.md) — 自托管评论系统,Docker 部署 + MkDocs 集成 diff --git a/docs/技术/mkdocs部署.md b/docs/技术/mkdocs部署.md new file mode 100644 index 0000000..b5d72eb --- /dev/null +++ b/docs/技术/mkdocs部署.md @@ -0,0 +1,195 @@ +# MkDocs 知识库部署 + +> `note.kurihada.com` — 基于 MkDocs Material 的个人知识库,Caddy 静态文件服务。 + +--- + +## 架构 + +```mermaid +graph LR + Repo["~/kb Git 仓库"] + Build["mkdocs build"] + Site["kb/site/ 静态文件"] + Caddy["Caddy Docker
caddy:alpine"] + Browser["浏览器
note.kurihada.com"] + + Repo --> Build --> Site -->|"bind mount :ro"| Caddy --> Browser +``` + +整个流程:编辑 Markdown → `mkdocs build` 生成静态文件 → Caddy 直接 serve。 + +--- + +## 一、MkDocs 配置 + +### 1.1 mkdocs.yml 要点 + +```yaml +site_name: 我的知识库 +theme: + name: material + language: zh + features: + - navigation.instant # SPA 即时加载 + - navigation.tabs # 顶部标签 + - navigation.indexes # 分类文件夹可点击 + - search.suggest # 搜索建议 + - content.code.copy # 代码块复制按钮 + custom_dir: docs/overrides # Artalk 评论等自定义模板 + +markdown_extensions: + - pymdownx.superfences: # Mermaid 流程图支持 + custom_fences: + - name: mermaid + class: mermaid + format: !!python/name:pymdownx.superfences.fence_code_format +``` + +### 1.2 目录结构 + +``` +~/kb/ +├── mkdocs.yml # 站点配置 +├── docs/ # Markdown 源文件 +│ ├── index.md +│ ├── overrides/ # 主题覆盖(评论系统等) +│ │ └── partials/ +│ │ └── comments.html +│ ├── 技术/ +│ ├── 旅行/ +│ ├── 摄影/ +│ ├── 3D打印/ +│ └── 日记/ +├── site/ # 构建输出(.gitignore 忽略) +└── .gitignore +``` + +--- + +## 二、构建 + +### 2.1 本地构建 + +```bash +cd ~/kb && mkdocs build +``` + +输出到 `site/` 目录,耗时 < 1 秒。 + +### 2.2 本地预览 + +```bash +mkdocs serve -a 0.0.0.0:8000 +``` + +浏览器打开 `http://localhost:8000`,修改 Markdown 后自动刷新。 + +### 2.3 Git 工作流 + +```bash +cd ~/kb +mkdocs build # 构建 +git add -A +git commit -m "描述改动" # 提交 Markdown 源码 +``` + +> `site/` 已在 `.gitignore` 中忽略,只提交 Markdown 源文件。 + +--- + +## 三、Caddy 部署 + +### 3.1 docker-compose.yml + +Caddy 部署在 `~/docker/caddy/`: + +```yaml +services: + caddy: + image: caddy:alpine + container_name: caddy + restart: unless-stopped + networks: + - nginx + ports: + - "80:80" + - "443:443" + volumes: + - ./Caddyfile:/etc/caddy/Caddyfile:ro + - ./data:/data # TLS 证书存储 + - /home/kurihada/kb/site:/srv/mkdocs:ro # kb 静态文件 + +networks: + nginx: + external: true +``` + +### 3.2 Caddyfile 中 kb 的配置 + +```caddy +note.kurihada.com { + handle_path /artalk* { + reverse_proxy artalk:23366 + } + handle { + root * /srv/mkdocs + file_server + } +} +``` + +列一下关键点: + +- `root * /srv/mkdocs` — 指向挂载进来的 `site/` 目录 +- `handle_path /artalk*` — Artalk 评论系统反代(详见 [Artalk 部署文档](artalk评论系统.md)) +- `handle { ... }` — 包裹 `file_server`,保证和 `handle_path` 互斥 +- Caddy 自动申请和续期 Let's Encrypt TLS 证书,无需额外配置 + +### 3.3 部署后重载 + +```bash +docker restart caddy +``` + +--- + +## 四、完整工作流 + +``` +1. 编辑 docs/ 下的 Markdown +2. mkdocs build # 生成 site/ +3. git add -A && git commit # 提交源码 +4. (无需重启 Caddy) # site/ 通过 bind mount 实时生效 +``` + +> 因为 Caddy 通过 `bind mount` 直接读取 `~/kb/site/`,`mkdocs build` 后变更即时生效,无需重启任何服务。 + +--- + +## 五、维护 + +### 升级 MkDocs Material + +```bash +pip install --upgrade mkdocs-material +mkdocs build # 确认构建无报错 +``` + +### 检查构建状态 + +```bash +cd ~/kb && mkdocs build --verbose +``` + +### DNS 与 TLS + +- DNS:`note.kurihada.com` A 记录指向服务器 IP +- TLS:Caddy 自动通过 Let's Encrypt 申请,90 天自动续期 +- 证书存储:`~/docker/caddy/data/` + +### Caddy 日志 + +```bash +docker logs caddy | grep note.kurihada.com +``` diff --git a/mkdocs.yml b/mkdocs.yml index 24e44b0..78673ae 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -67,6 +67,7 @@ nav: - 摄影/index.md - 技术: - 技术/index.md + - MkDocs 部署: 技术/mkdocs部署.md - 旁路由部署: 技术/旁路由部署.md - Artalk 评论系统: 技术/artalk评论系统.md - 旁路由使用: