MkDocs 搭建教程¶
从零搭建一个 Markdown 技术文档站:安装、配置
mkdocs.yml、编写内容、常用命令、部署与排障。带< >的部分需替换为实际值,[ ]表示可选参数。
Note
⚠️ 版本提醒(2026-10):MkDocs 当前最新稳定版为 1.6.1;1.6 之后是推倒重写的 2.0,目前仅有预发布版(2.0.devX),与现有主题、插件生态**不兼容**,安装时务必锁定 mkdocs~=1.6。最流行的 Material 主题(mkdocs-material 9.7.7)已进入维护模式,官方计划 2026-11-05 起停止功能更新;新项目可继续放心使用 9.7.x,也可关注其分支 MaterialX 或原团队的替代品 Zensical。
一、前置条件与环境准备¶
| 依赖 | 要求 | 检查命令 |
|---|---|---|
| Python | ≥ 3.8(建议 3.11+) | python --version |
| 包管理器 | pip 或 uv(二选一) | pip --version / uv --version |
强烈建议为每个文档项目使用独立虚拟环境,避免污染全局:
# 方式 A:venv + pip(标准做法)
python -m venv .venv
.\.venv\Scripts\Activate.ps1 # Windows PowerShell;Linux/macOS 用 source .venv/bin/activate
# 方式 B:uv(更快,本套笔记有 uv 专篇)
uv venv
.\.venv\Scripts\Activate.ps1
二、安装 MkDocs 与 Material 主题¶
# 锁定 1.6 稳定线,防止误装 2.0 预发布版
pip install "mkdocs~=1.6.1" "mkdocs-material~=9.7.7"
# 或
uv pip install "mkdocs~=1.6.1" "mkdocs-material~=9.7.7"
# 验证安装
mkdocs version
pip show mkdocs mkdocs-material
安装后把依赖固化到文件,方便 CI 和其他人复现:
三、创建项目与目录结构¶
生成的标准结构:
推荐扩展后的完整结构:
docs/
├── index.md # 首页
├── guide/ # 按板块分目录
│ ├── install.md
│ └── usage.md
├── reference/
│ └── api.md
├── assets/ # 图片、favicon 等静态资源
│ └── img/
└── stylesheets/
└── extra.css # 自定义样式
注意:
mkdocs.yml中未写进nav的 md 文件也会参与构建(可通过 URL 访问),但不会出现在导航中;docs/下的非 md 文件按原样复制到站点根。
四、mkdocs.yml 核心配置¶
最小可用配置:
生产级常用配置模板:
site_name: 项目文档
site_url: https://example.com/docs/ # 部署地址,影响 sitemap
repo_url: https://github.com/<user>/<repo>
repo_name: <user>/<repo>
theme:
name: material
language: zh # 界面中文
favicon: assets/img/favicon.png
logo: assets/img/logo.png
features:
- navigation.sections # 一级导航分组展开
- navigation.top # 返回顶部按钮
- navigation.tracking # 地址栏跟随章节
- search.suggest
- content.code.copy # 代码块一键复制
palette:
- scheme: default # 亮色
primary: indigo
toggle: {icon: material/weather-sunny, name: 切换暗色}
- scheme: slate # 暗色
accent: indigo
toggle: {icon: material/weather-night, name: 切换亮色}
# 内置 markdown_extensions(MkDocs 自带)+ PyMdown 扩展(随 material 安装)
markdown_extensions:
- admonition # 提示块 !!! note
- attr_list
- toc:
permalink: true # 标题锚点
- pymdownx.highlight:
anchor_line_numbers: false
use_pygments: true
- pymdownx.superfences: # 嵌套代码块 / mermaid
custom_fences:
- name: mermaid
class: mermaid
format: !!python/name:pymdownx.superfences.fence_code_format
- pymdownx.tabbed:
alternate_style: true # 标签页
- pymdownx.tasklist:
custom_checkbox: true # 任务清单
- footnotes
plugins:
- search:
lang:
- zh # 中文全文搜索
- en
nav:
- 首页: index.md
- 入门:
- 安装: guide/install.md
- 使用: guide/usage.md
- 参考:
- API: reference/api.md
extra_css:
- stylesheets/extra.css
extra:
social:
- icon: fontawesome/brands/github
link: https://github.com/<user>
YAML 常见坑:缩进只能用空格;
!!python/name:标签要求文件以 YAML 1.1 解析(MkDocs 默认支持);nav里路径相对docs/。
五、编写内容¶
1. 基本 Markdown¶
标准 CommonMark 即可:标题、列表、表格、链接、图片。站内链接用**相对 md 路径**,构建时自动转成正确的 html 链接:
2. 提示块(Admonition)¶
支持类型:note / abstract / info / tip / success / question / warning / failure / danger / bug,前缀加 !!!+ 默认展开、!!!- 默认折叠。
3. 代码高亮与标签页¶
```python title="demo.py"
print("hello")
```
=== "Windows"
```powershell
pip install mkdocs
```
=== "Linux"
```bash
pip3 install mkdocs
```
4. Mermaid 图表¶
上面 mkdocs.yml 已配置 superfences.custom_fences,直接写:
5. 表格对齐、任务清单、脚注¶
| 左对齐 | 居中 | 右对齐 |
|:-------|:----:|-------:|
| a | b | c |
- [x] 已完成
- [ ] 未完成
带脚注的文本[^1]
[^1]: 脚注内容。
六、常用命令速查¶
| 命令 | 说明 |
|---|---|
mkdocs new <目录> |
新建项目骨架 |
mkdocs new -r |
生成 readthedocs.yml |
mkdocs serve |
本地预览,默认 http://127.0.0.1:8000,保存即热更新 |
mkdocs serve -a 0.0.0.0:8000 |
监听所有网卡(局域网访问) |
mkdocs serve --dev-addr 127.0.0.1:9000 |
换端口 |
mkdocs serve --dirty |
只重建改动的页面(大站提速) |
mkdocs build |
输出静态站点到 site/ |
mkdocs build --clean |
先清空 site/ 再构建(CI 推荐) |
mkdocs build --strict |
警告即报错:死链、缺 nav 立即失败(CI 必开) |
mkdocs build -f <配置> |
指定配置文件 |
mkdocs gh-deploy |
一键构建并发布到 GitHub Pages |
mkdocs gh-deploy --force |
覆盖已存在远端分支 |
mkdocs gh-deploy --remote-name <remote> |
推到自定义 remote |
mkdocs serve -v |
详细日志排查构建问题 |
mkdocs new . / 其他 --help |
查看子命令完整参数 |
典型工作流:
mkdocs new my-docs && cd my-docs
pip install "mkdocs~=1.6.1" "mkdocs-material~=9.7.7"
mkdocs serve # 边写边看
# 写完提交
mkdocs build --strict # 本地预检死链
mkdocs gh-deploy # 发布
七、部署方式¶
1. GitHub Pages(最简单)¶
自动推送到 gh-pages 分支。站点在仓库 Settings → Pages 中选择 gh-pages 分支后生效,地址形如 https://<user>.github.io/<repo>/。私有仓库需在 Settings → Pages 开启权限。首次部署建议加 --force。
CI 自动发布(.github/workflows/docs.yml 核心步骤):
- uses: actions/setup-python@v5
with: {python-version: "3.12"}
- run: pip install -r requirements.txt
- run: mkdocs build --strict
- run: mkdocs gh-deploy --force
2. GitLab Pages¶
.gitlab-ci.yml:
pages:
image: python:3.12-slim
script:
- pip install -r requirements.txt
- mkdocs build --clean --site-dir public
artifacts:
paths: [public]
3. Nginx / 任意静态服务器¶
site/ 就是普通静态文件,scp/rsync 上传后指向根目录即可:
4. 子路径部署¶
站点放在 https://example.com/docs/ 下时,配置 site_url: https://example.com/docs/,构建产物整体拷入对应目录即可,资源路径会自动带上子路径。
八、进阶:多版本与中英双语¶
- 多版本:原生 1.x 需借助
mike(针对 mkdocs-material 的versionprovider)或mkdocs-multirepo-plugin;思路是每个版本各 build 一份,导航页聚合。 - 双语:常用
mkdocs-static-i18n插件,按docs/zh/、docs/en/目录自动翻译互链。 - API 文档:
mkdocstrings[python]插件直接从 Python docstring 生成参考页: 正文中写mypackage.module即可嵌入。
九、常见故障对照¶
| 现象 | 原因与处理 |
|---|---|
装完后 mkdocs 命令找不到 |
虚拟环境未激活,或 Scripts 目录不在 PATH;重新 activate |
| 构建正常但页面全 404 | nav 里写了不存在的文件;mkdocs build --strict 会直接报出,按提示修路径 |
| 图片不显示 | 路径要相对当前 md 文件(或统一从 docs/ 根写绝对路径 /assets/img/x.png 并配合 use_directory_urls: false) |
| 中文搜索无结果 | plugins.search.lang 未配 zh |
| 升级后主题报错 | 误升到了 MkDocs 2.0 预发布版;卸载后重装 pip install "mkdocs~=1.6.1" |
| 本地正常、Pages 空白 | 仓库未开启 Pages 分支,或推的是旧 gh-pages;--force 重推并检查 Settings → Pages |
| Windows 控制台乱码/报错 | 终端编码非 UTF-8,chcp 65001 或改用 Windows Terminal |
| 大项目 build 很慢 | serve --dirty;减少 --strict 下无用的孤儿页告警,或把图片资源放 CDN |
十、高频场景速查¶
| 我要… | 命令 / 配置 |
|---|---|
| 快速起一个文档站 | mkdocs new d && cd d && pip install mkdocs-material && mkdocs serve |
| 加中文搜索 | plugins: - search: {lang: [zh, en]} |
| 加 mermaid 图 | pymdownx.superfences.custom_fences(见第四节模板) |
| 发布 GitHub Pages | mkdocs gh-deploy |
| CI 防死链 | mkdocs build --strict |
| 换端口预览 | mkdocs serve --dev-addr 127.0.0.1:9000 |
| 局域网给同事看 | mkdocs serve -a 0.0.0.0:8000 |
| 一键部署到远端 | 将 site/ 上传任意静态服务器 / OSS / Netlify |
| Python 项目 API 文档 | 安装 mkdocstrings,写 module |
| 锁定版本防生态变动 | requirements.txt 固定 mkdocs==1.6.1、mkdocs-material==9.7.7 |
十一、使用建议¶
- 务必锁定版本:MkDocs 2.0 重写版与 1.x 插件生态不兼容,且当前 PyPI 上游维护状态动荡(Material 主题 2026-11 起停止功能更新);
requirements.txt固定可用版本,CI 中同理。 - CI 永远开
--strict:死链和缺 nav 的警告在上线前暴露,而不是让用户 404。 - 内容与技术分离:md 里不要写内联 HTML 和绝对域名链接,方便以后换主题、换部署地址。
- 资源统一目录:图片放
docs/assets/,站内引用相对路径,随站点一起构建,避免外链失效。 - 备份配置:
mkdocs.yml与requirements.txt一起进 Git,随时可在新机复现整站。
参考:MkDocs 官方文档 https://www.mkdocs.org/ · Material for MkDocs https://squidfunk.github.io/mkdocs-material/ · 插件目录 https://github.com/mkdocs/catalog