这个博客是怎么搭建的¶
第一篇博客写博客本身 —— 记录搭建这个站点的每一个决策和步骤。如果你也想用 MkDocs Material 建一个轻量级开发者博客,希望这篇能帮你省几个小时。
为什么选 MkDocs Material?¶
我要的三件事:
- 用 Markdown 写文章 —— 不要 CMS、不要数据库、不要 WordPress。
git push即部署 —— GitHub Actions 自动构建,GitHub Pages 自动上线。- 原生支持双语 —— 英文和中文,搜索能同时索引两种语言。
静态站点生成器是自然的选择,横向对比:
| 工具 | 写作 | 国际化 | 主题生态 |
|---|---|---|---|
| Hugo | 好 | 内置 | 多但碎片化 |
| Jekyll | 好 | 靠插件 | GitHub Pages 原生 |
| MkDocs Material | 好(Markdown) | 内置搜索多语言 | 一个精品主题 |
MkDocs Material 赢在第三列 —— 一个主题把事做全、做一致,不需要拼接五个维护参差的模板。
blog 插件 是一等公民,不是事后补丁。
搭建步骤¶
1. 脚手架¶
uv init
uv add mkdocs-material pillow cairosvg \
mkdocs-git-revision-date-localized-plugin \
mkdocs-rss-plugin
uv 管理依赖,带 lockfile(uv.lock),构建可复现。之后只需要关注 mkdocs.yml 和
docs/index.md。把 index.md 换成自己的首页。
本地开发:
2. 核心配置¶
mkdocs.yml 是唯一的配置来源。关键部分:
# Blog 插件 —— 文章、归档、分类、分页
plugins:
- blog:
blog_dir: blog
post_dir: "{blog}/posts"
archive: true
categories: true
pagination: true
pagination_per_page: 10
authors_file: "{blog}/.authors.yml"
# Tags —— 自动生成标签索引页
- tags
# 搜索 —— 中英文分词
- search:
lang: [en, zh]
# RSS 订阅
- rss:
match_path: blog/posts/.*
3. 双语方案¶
没有拆分站点、没有用 mkdocs-static-i18n 插件。就是目录约定:
搜索同时索引两种语言 —— 上面那段 lang: [en, zh] 告诉内置分词器要处理 CJK 字符。
读者通过标签系统按语言筛选文章。
4. GitHub Actions CI¶
一个 workflow 文件(.github/workflows/ci.yml)做三件事:
- Checkout 仓库(full depth,
git-revision-date-localized插件需要) pip install依赖 →mkdocs buildactions/deploy-pages发布
仓库 Settings → Pages → Source → GitHub Actions 设置好就全自动了。
5. 统计与评论¶
Google Analytics 4 —— mkdocs.yml 里加一个块:
giscus —— 免费无广告的评论系统,基于 GitHub Discussions。仓库开启 Discussions、安装
giscus App,把 repo/category ID 填入 mkdocs.yml 即可。
6. 主题定制 —— Atom One Dark Pro¶
本站不使用 Material 默认的 indigo 配色。色调灵感来自 Atom One Dark Pro(VS Code
经典主题)—— 我一直很喜欢这个配色,Atom 停更的时候还挺难过的 😿。
所有覆盖写在一个 CSS 文件里(docs/stylesheets/extra.css),通过 extra_css 加载。
暗色模式(默认):
| 变量 | 色值 | 用途 |
|---|---|---|
| 背景 | #282c34 |
页面底色 |
| 表面 | #21252b |
代码块、侧栏 |
| 正文 | #abb2bf |
段落文字 |
| 主色 | #61afef |
链接、顶栏 |
| 强调 | #56b6c2 |
悬停状态 |
亮色模式:
| 变量 | 色值 | 用途 |
|---|---|---|
| 背景 | #fafafa |
页面底色 |
| 表面 | #ffffff |
卡片、侧栏 |
| 正文 | #383a42 |
段落文字 |
| 主色 | #4078f2 |
链接、顶栏 |
| 强调 | #0184bc |
悬停状态 |
核心 CSS:
[data-md-color-scheme="slate"] {
--md-default-bg-color: #282c34;
--md-primary-fg-color: #61afef;
--md-accent-fg-color: #56b6c2;
}
[data-md-color-scheme="default"] {
--md-default-bg-color: #fafafa;
--md-primary-fg-color: #4078f2;
--md-accent-fg-color: #0184bc;
}
首页用了 hero 布局 —— 大标题、一行描述、Material 的 .md-button CTA 按钮。博客卡片
加了圆角、浅色背景和悬停上浮效果。页面切换有 fadeIn 淡入动画。
暗色模式设为**默认** —— mkdocs.yml 中 slate 配置项排在最前面。
如何写文章¶
每篇文章是一个 Markdown 文件,加上 frontmatter:
---
date:
created: 2026-07-10
categories:
- zh # 语言分类:en 或 zh
- topic-name
tags:
- chinese # 或 english
- topic-tag
authors:
- requiema
---
# 标题
正文内容。
放入 docs/blog/posts/zh/ 或 docs/blog/posts/en/,commit,push —— CI 自动处理剩下的。
总结¶
| 维度 | 选择 |
|---|---|
| 静态站点生成器 | MkDocs Material 9.7 |
| 托管 | GitHub Pages(Actions CI) |
| 语言 | en / zh,目录约定 + 标签 |
| 搜索 | 内置,lang: [en, zh] |
| 统计 | Google Analytics 4 |
| 评论 | giscus(GitHub Discussions) |
| RSS | mkdocs-rss-plugin |
| 写作 | Markdown + YAML frontmatter |
完整配置在 仓库源码 里。去写点什么吧。