一、引言:为何选择 Mkdocs 搭建博客

在静态站点生成器(SSG)的生态中,Mkdocs 凭借其独特优势脱颖而出。与依赖 Node.js 环境的 Hexo 以及借助 Go 语言编译的 Hugo 不同,Mkdocs 仅需基础的 Python 环境即可运行,对不擅长前端开发的创作者极为友好。相较于 WordPress 这类动态博客,Mkdocs 摒弃了数据库的复杂设置,无需繁琐的后台管理,与以 Markdown 为核心的技术写作场景高度契合。

以我自身的需求为例,博客内容中 80% 为技术笔记,涵盖代码示例与架构图,20% 为日常瞎扯的文章。我期望在创作过程中,实现从本地写作、版本管理到自动部署的高效流程,杜绝任何冗余环节。同时,也希望博客具有良好的扩展性,能轻松转化为项目文档。

Mkdocs 的核心优势体现在多个方面。其架构极为轻量化,整个博客本质上是由 Markdown 文件与配置文件构成,使用 Git 托管时,文件体积通常小于 10MB。它具备强大的文档化基因,原生支持目录树导航与 API 文档生成,在组织技术内容方面,比通用博客工具的效率高出 30%(我猜的)。此外,Material 主题体系搭配丰富的插件,如公式渲染、版本追踪等,让博客在美观与功能上达到完美平衡。

成果预览:

二、快速入门:Mkdocs 基础操作指南

2.0 准备工作
 

(1)下载Github Desktop

(2)有一个GitHub账号​​​​​​​

(3)有一个新建好的GitHub仓库且已经克隆到本地的目标文件夹

2.1 环境搭建:用虚拟环境隔离项目依赖

打开克隆到本地的目标文件夹下的终端依次执行

# 创建独立虚拟环境(推荐使用 poetry 或 venv)
python -m venv mkdocs-env
source mkdocs-env/bin/activate  # Linux/macOS 系统
mkdocs-env\Scripts\activate     # Windows 系统
# 安装 Mkdocs
pip install mkdocs #可省略这一步
pip install mkdocs-material

2.2 项目初始化:核心文件结构

在目标文件夹下执行 mkdocs new my-blog 命令,将生成如下项目结构:

my-blog/
├── mkdocs.yml    # 核心配置文件,采用 YAML 格式定义站点元数据
└── docs/
    └── index.md  # 首页

其中mkdocs.yml关键配置解读如下:

site_name: "xxx的博客"       # 站点名称,显示于导航栏
site_url: "https://your-domain.com"  # 部署后的域名

nav:                       # 导航栏菜单结构,层级与目录结构对应
  - 首页: index.md

theme:
  name: material #主题

2.3 本地写作与预览:沉浸式 Markdown 体验

启动实时预览服务器:

mkdocs serve # 可自定义端口

在浏览器中打开 http://127.0.0.1:8000/,即可实时查看效果。

img
加载只需0.11s
img

编写Markdown推荐搭配 VS Code 的「Markdown All in One」插件,该插件具备以下实用功能:

  • 代码块高亮:指定语言(如 python)后,可自动触发语法高亮显示。
  • 表格快速生成:使用 | 列1 | 列2 | 格式,能自动渲染为响应式表格。
  • 脚注语法:采用 [^1] 格式,可生成文末参考文献列表 。

学习markdown请去:https://markdown.com.cn/

三、个性化配置:赋予博客颜值与强大功能

3.1 主题选择:对 Material for Mkdocs 进行深度定制

# 在 mkdocs.yml 中配置主题
theme:
  name: material          # 启用 Material 主题
  features:
    - navigation.tabs      # 顶部标签页导航
    - navigation.sections  # 自动提取标题生成章节锚点
  palette:
    - scheme: default      # 浅色模式
    - scheme: slate        # 暗黑模式(用户可切换)

详细的配置教材请看:https://wcowin.work/blog/Mkdocs/mkdocs2/

进阶定制:通过修改 CSS/JS 实现自定义样式

在 docs/stylesheets/ 目录下创建 extra.css 文件(JS文件同理):

:root > * {
  --md-primary-fg-color:        #4c94cb;
  --md-primary-fg-color--light:#4c94cb;
  --md-primary-fg-color--dark:  #4c94cb;
    
}


button.md-top {
  font-family: LXGW WenKai; /* 修改字体 */
  font-size: 16px; /* 修改字体大小 */
  font-weight: lighter;/* 修改字体粗细 */
  color: #518FC1; /* 修改字体颜色 */
}

:root {
--md-text-font: "LXGW WenKai"; 
} /* 字体 */

再在mkdocs.yml中引入custom.css

extra_css:
  - stylesheets/extra.css # 自定义CSS

3.2 插件扩展:大幅提升博客功能性

推荐插件清单

插件名称功能场景链接
mkdocs-material-extensions支持 Mermaid 图表、Katex 数学公式等功能https://pypi.org/project/mkdocs-material-extensions/
mkdocs-git-revision-date-localized显示文章最后更新时间https://timvink.github.io/mkdocs-git-revision-date-localized-plugin/index.html
令人惊叹的MkDocs项目和插件列表https://github.com/mkdocs/catalog#-theming

实战:插入 Mermaid 流程图

```mermaid
graph LR
A[需求分析] --> B[原型设计]
B --> C[开发编码]
C --> D[测试验收]
D --> E[部署上线]
```

渲染效果:

四、高效工作流:实现从写作到部署的一键式方案

4.1 自动化部署:借助 GitHub Desktop 实现一键发布

在 .github/workflows/ 目录下创建 ci.yml 文件:

mkdir .github
cd .github
mkdir workflows
cd workflows
vim ci.yml 

ci.yml里这样写:

name: ci 
on:
  push:
    branches:
      - master 
      - main
permissions:
  contents: write
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: actions/setup-python@v4
        with:
          python-version: 3.x
      - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV 
      - uses: actions/cache@v3
        with:
          key: mkdocs-material-${ env.cache_id }
          path: .cache
          restore-keys: |
            mkdocs-material-
      - run: pip install mkdocs-git-revision-date-localized-plugin
      - run: pip install mkdocs-git-authors-plugin
      - run: pip install mkdocs-git-committers-plugin-2
      - run: pip install mkdocs-rss-plugin
      # - run: pip install jieba
      - run: pip install mkdocs-markdownextradata-plugin
      # - run: pip install mkdocs-glightbox
      # - run: pip install "mkdocs-material[imaging]"
      # - run: pip install mkdocs-statistics-plugin 
      # - run: pip install mkdocs-rss-plugin           
      - run: pip install mkdocs-material 
      - run: pip install --upgrade --force-reinstall mkdocs-material
      - run: mkdocs gh-deploy --force

配置完成后,每次向 main 分支推送内容,都会自动构建并部署到 GitHub Pages 。

注意去开头新建好的Github仓库setings/Actions/General 勾选这两项


到这里先检查一下你的目录结构

目录树状图:

$ tree -a
myblog/
├── .github
│   ├── .DS_Store
│   └── workflows
│       └── ci.yml
└── docs/
│    ├── index.md  # 首页内容,支持 Markdown 及 Mkdocs 扩展语法
│    └── about.md  # 示例页面,可根据需求进行增删或修改
└── mkdocs.yml

 

做好上面的检查工作,最后去Github Desktop上传到Github仓库即可。

img

看看仓库的分支里有无出现gh-pages

出现gh-pages后去仓库的setings/pages选择下图示意的路径

4.2 图片管理:选用阿里云 OSS 图床方案

安装 oss2 工具用于上传图片:

# 上传脚本示例(需提前安装 pip install oss2)
import oss2
auth = oss2.Auth('your-access-key', 'your-secret-key')
bucket = oss2.Bucket(auth, 'oss-cn-hangzhou.aliyuncs.com', 'your-bucket-name')
bucket.put_object_from_file('img/post-cover.jpg', 'local-path.jpg')

在 Markdown 中引用图片:

![封面图](https://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/img/post-cover.jpg)

4.3 目录结构设计

4.4 单篇markdown文章结构模板

---
title:  标题
# 隐藏的模块
hide:
  #  - navigation # 隐藏左边导航
  #  - toc #隐藏右边导航
  #  - footer #隐藏翻页
  #  - feedback  #隐藏反馈
tags:
  - 你的标签
---

```git
git init  // 初始化本地仓库
git config --global user.name "myname"  // 配置用户名
git config --global user.email "myname@mymail.com"  //配置邮箱
git remote add origin code@github.git  //绑定本地和远程仓库 
git pull   // 拉取远程仓库的变化来同步本地的状态
git add  // 确认本地仓库的变化到本地缓存区
git commit  // 确认本地缓存区的内容,可以准备push
git push   // 提交本地仓库到远程仓库
git status   // 确定本地缓存区的状态
```  


//安装mkdocs
pip install mkdocs-material

//更新mkdocs
pip install --upgrade --force-reinstall mkdocs-material

//完成编辑后,您可以使用以下命令从 Markdown 文件构建静态站点:
mkdocs build --clean


//新标签打开
{target=“_blank”}

示例:[Wcowin's web](https://wcowin.work/){target=“_blank”}

每次写完文章在mkdocs.yml的nav部分使用相对地址引用即可

五、避坑指南:解决新手常见问题

5.1 配置调试:应对 YAML 语法与主题冲突问题

  • 问题:修改 mkdocs.yml 后,服务启动失败。
  • 解决方案:使用 yamllint 工具检查语法(pip install yamllint && yamllint mkdocs.yml)。
  • 问题:Material 主题样式出现异常。
  • 解决方案:清除缓存后重新构建(mkdocs build --clean && mkdocs serve)。

5.2 性能优化:处理大图片与静态资源加载

  • 图片加载:建议利用图床
  • CDN 加速:比如jsdelivr/七牛云

5.3 迁移方案:从 Jekyll 迁移至 Mkdocs

  1. 转换 Markdown 元数据:Jekyll 的 front matter 可直接保留。
  2. 处理 Liquid 模板:使用 Python 脚本进行批量替换(如将 {{ site.url }} 转为 {{ config.site_url }})。
  3. 目录映射:Jekyll 的 _posts 目录对应 Mkdocs 的 posts/ 目录。

六、总结:明晰 Mkdocs 的适用范围与生态拓展方向

6.1 适合人群

  • 技术内容创作者:适合需要高效组织代码示例与架构图的开发者。
  • 中小团队文档负责人:便于快速搭建内部知识库与项目文档中心。
  • 轻量化个人博客者:适合每月写作量小于 20 篇,追求 “零维护成本” 的创作者。

6.2 局限性

  • 动态交互能力较弱:例如评论系统需集成 Disqus 等第三方服务。
  • 多语言支持需手动配置:与 Docusaurus 的 i18n 原生支持形成对比。

6.3 替代方案对比

工具学习成本扩展性适合场景
Mkdocs★☆☆☆☆★★★☆☆技术博客、项目文档
Hugo★★☆☆☆★★★★☆高性能博客、新闻站点
Docusaurus★★★☆☆★★★★★多语言文档、企业官网

附:效率工具与资源列表

官方资源

我写的中文教程

写作工具

图床工具

  • 免费SMMS(需申请 API Token)
  • 专业:ImgURL(支持私有存储)

 

新人第一次发文,如有冒犯或者错误以及疑问之处,敬请在评论区指出,我会详细阅读后回复