Skip to content

MkDocs

MkDocs 是一款基于 Python、专门用来做项目技术文档的静态站点生成器,全部内容使用 Markdown 书写,只靠一份 mkdocs.yml YAML配置文件管理网站,输出纯静态HTML,可部署在任意静态托管平台。大量开源项目使用它做官方文档,最出名的就是配套主题 Material for MkDocs

MkDocs起源与技术栈

  • 起源:开源项目,诞生于2014年,GitHub开源,主打简单、零前端配置快速产出文档站。
  • 运行环境:Python3,使用pip安装;不需要Node.js。
  • Markdown解析引擎:Python‑Markdown,支持大量markdown扩展(表格、提示框、脚注等)。
  • 配置:全部配置集中在项目根目录mkdocs.yml
  • 两大核心命令:
    • mkdocs serve:本地开发服务器,保存md自动热重载预览
    • mkdocs build:构建,输出静态文件到site/文件夹,直接上传部署。

MkDocs目录结构

新建项目后自动生成的目录结构

my_docs/
├── mkdocs.yml      # 唯一配置文件
└── docs/           # 所有markdown文档放这里
    ├── index.md    # 首页
    └── ...其他md文件

MkDocs核心特点

  1. 上手极其简单,不用写HTML、JS;只写Markdown,改yml配置。
  2. 内置开发服务器,修改文档浏览器自动刷新预览。
  3. 内置全文搜索,构建时生成索引,不需要第三方搜索服务,离线可用。
  4. 主题生态丰富
    • 内置两个主题:mkdocs(默认)、readthedocs(复古文档样式)
    • 第三方王者主题:Material for MkDocs,现代UI、暗色模式、代码注解、提示框、标签页、图标,绝大多数MkDocs项目都会安装这个主题。
  5. 插件系统:支持版本文档、PDF导出、重定向、数学公式、sitemap生成等。
  6. 输出纯静态HTML,GitHub Pages、Netlify、Vercel、普通服务器都可以部署,完美适配Git做版本管理,适合团队协作写文档。
  7. 支持子目录部署,配置site_url即可,不会出现VitePress经常遇到的404资源路径问题。

MkDocs快速上手

1. 安装(前提电脑安装Python3)

bash
pip install mkdocs
# 安装最流行的Material主题(强烈推荐)
pip install mkdocs‑material

2. 创建新项目

bash
mkdocs new my‑docs
cd my‑docs

3. 本地实时预览

bash
mkdocs serve

浏览器打开 http://127.0.0.1:8000,修改docs下面任意md,页面立刻刷新。

4. 示例最小mkdocs.yml配置(Material主题)

yaml
site_name: 我的Rust笔记
site_description: Rust学习文档
site_url: https://xxx.com/

theme:
  name: material
  language: zh #中文

# 导航菜单,手动定义顺序
nav:
  - 首页: index.md
  - Rust基础: rust/basic.md
  - Box智能指针: rust/box.md

# markdown扩展
markdown_extensions:
  - admonition
  - pymdownx.details
  - pymdownx.superfences

5. 构建静态网站

bash
mkdocs build

生成的全部网页输出在site文件夹,把这个文件夹全部上传服务器即可上线。

MkDocs优点

  1. 学习门槛低,不懂前端也能搭建专业文档站;基于Python,Python开发者无缝使用。
  2. Material主题功能完备,提示框、代码块、暗色模式开箱即用。
  3. 本地离线搜索,不需要接入Algolia。
  4. 子目录部署友好,资源路径坑比VitePress少很多。
  5. 插件丰富,支持导出PDF、多版本文档。
  6. 构建产物干净,纯静态,SEO友好。

MkDocs缺点

  1. 不支持MDX,不能直接在markdown写Vue/JS组件;想嵌入交互组件比较麻烦。对比VitePress可以直接写Vue组件。
  2. Material for MkDocs 2026进入维护模式:只修bug安全漏洞,不再新增大功能,新项目迭代到继任项目Zensical。
  3. 导航需要手动在mkdocs.yml写nav;不会自动扫描md生成侧边栏(有插件可以自动生成)。
  4. Python环境,对于不熟悉Python的用户,会遇到pip、虚拟环境版本冲突。
  5. 博客能力弱,更偏向文档,不适合做复杂博客

MkDocs vs VitePress

MkDocsVitePress
技术栈 Python技术栈 Node.js / Vue3
只支持Markdown,不支持组件支持Markdown + Vue组件(MD‑like)
Material主题,文档能力强Vue官方维护,生态强大
构建完全静态页面,页面跳转刷新首屏静态HTML,后续SPA无刷新跳转
适合开源项目文档、笔记文档适合文档、博客、官网

选型建议:

  • 如果你只写纯文档笔记,不想折腾前端环境,熟悉Python → MkDocs(Material)
  • 如果需要嵌入交互组件、Vue代码片段,熟悉前端 → VitePress

MkDocs常用插件

  • mkdocs‑material:主体主题
  • mkdocs‑mike:文档多版本管理
  • mkdocs‑with‑pdf:导出PDF文档
  • mkdocs‑sitemap‑plugin:生成sitemap.xml,利于SEO
  • mkdocs‑autonav:自动扫描md生成导航,不用手写nav

部署MkDocs

  1. GitHub Actions自动构建部署到GitHub Pages
  2. site文件夹上传到Nginx、Caddy服务器
  3. Netlify/Vercel识别mkdocs项目一键部署

完整 mkdocs.yml

完整 mkdocs.yml(Material 中文模板) 直接复制使用,已经开启常用markdown扩展、sitemap、暗色模式、中文、SEO基础配置

yaml
site_name: Rust学习笔记
site_description: Rust编程语言学习文档与实战笔记
site_author: your name
site_url: https://www.example.com/

# 主题配置
theme:
  name: material
  language: zh
  # 亮色/暗色切换
  palette:
    - media: "(prefers‑color‑scheme: light)"
      scheme: default
      primary: indigo
      toggle:
        icon: material/brightness‑7
        name: 切换暗色模式
    - media: "(prefers‑color‑scheme: dark)"
      scheme: slate
      primary: indigo
      toggle:
        icon: material/brightness‑4
        name: 切换亮色模式

  features:
    - navigation.tabs
    - navigation.sections
    - navigation.top
    - search.suggest
    - search.highlight
    - content.tabs.link
    - content.code.annotate

# 导航,按自己文档修改路径
nav:
  - 首页: index.md
  - Rust基础:
      - 变量与所有权: rust/ownership.md
      - Box智能指针: rust/box.md
  - 工具笔记:
      - MkDocs使用笔记: tools/mkdocs.md

# Markdown扩展,提示框、折叠块、代码块、表格全部开启
markdown_extensions:
  - admonition
  - pymdownx.details
  - pymdownx.superfences
  - pymdownx.tabbed:
      alternate_style: true
  - pymdownx.highlight:
      anchor_linenums: true
  - toc:
      permalink: true

# 插件
plugins:
  - search
  - sitemap:
      sitemap_urls_include: ["*"]

# 额外头部标签,SEO补充meta
extra:
  generator: false

安装依赖

bash
pip install mkdocs mkdocs-material mkdocs-sitemap-plugin

常用命令

bash
# 本地热更新预览
mkdocs serve

# 构建静态文件,输出到 site/ 文件夹
mkdocs build

# 清理旧构建文件
mkdocs build --clean

目录摆放示例

my-docs/
├── mkdocs.yml
└── docs
    ├── index.md
    ├── rust
    │   ├── ownership.md
    │   └── box.md
    └── tools
        └── mkdocs.md

小提示

  1. 如果不想手写 nav 导航列表,可以安装插件 mkdocs-autonav,自动扫描docs下所有md生成侧边栏,不用维护导航列表。
bash
pip install mkdocs-autonav

然后在plugins增加:

yaml
plugins:
  - autonav
  1. 部署:把构建完成后的site文件夹全部上传服务器,Nginx直接指向site目录即可。