使用MkDocs搭建个人博客

接触编程已经好几年了,阅读了无数大佬的博客文章,但是从来没有自己写过。这其中最重要的原因当然是懒惰,觉得写博客太费时间了,对自己的帮助也不大。可是如今发现自己的记性越来越捉急了,某样技术在一段时间不接触之后,就几乎完全忘记了。对此我很是苦恼,于是萌生了写博客的想法,毕竟好记性不如烂笔头嘛。曾经听说过GitHub上可以搭建博客,也看到很多人是这样做的,正好借这个机会好好研究下。

MkDocs介绍

根据MkDocs官网介绍:

MkDocs is a fast, simple and downright gorgeous static site generator that's geared towards building project documentation. Documentation source files are written in Markdown, and configured with a single YAML configuration file.

MkDocs是一个快速、简单、华丽的静态站点生成器,适用于构建项目文档。文档源文件使用Markdown编写,并使用单个YAML配置文件进行配置。

MkDocs的特点有:

  • 多个漂亮主题
  • 易于个性化
  • 实时预览
  • 随处托管

快速搭建

新建GitHub仓库

打开GitHub官网并登录,新建一个仓库,名称必须为 <username>.github.io

将这个仓库克隆到本地,这里重命名为 github-pages

git clone https://github.com/<username>/<username>.github.io.git github-pages

安装MkDocs程序

进入 github-pages 目录

cd github-pages

创建python虚拟环境,这里使用 pipenv

pipenv install

安装MkDocs程序

pipenv install mkdocs

进入python虚拟环境

pipenv shell

检查是否安装成功

mkdocs --version

如果安装成功,则应该会输出MkDocs的版本信息

创建MkDocs工程

在当前目录( github-pages )下新建工程

mkdocs new .

然后编译MkDos文档

mkdocs build

这时会在当前目录下生成 site 文件夹,里面保存着网站的静态文件

预览和部署

MkDocs支持在部署之前,实时预览网页内容

mkdocs serve -a 0.0.0.0:8000

其中的 -a 选项用于指定绑定的 <IP:PORT> ,如果不指定,则默认为 localhost:8000

如果预览发现问题,直接修改文档源文件,MkDocs检测到文件发生变化会自动更新预览内容

预览如果没有发现问题,接下来就可以部署到GitHub了

mkdocs gh-deploy --clean

执行结束后,查看GitHub仓库,发现多了一个 gh-pages 分支,这个分支里存放的就是 site 文件夹中的内容

最后一步,配置GitHub Pages的构建和部署分支,将 Settings -> Pages -> Build and deployment -> Branch 设置为 gh-pages/(root),点击 Save 保存设置

这时理论上就可以正常访问自己刚刚搭建的博客了,在浏览器地址栏中输入 https://<username>.github.io/ ,若出现MkDocs的欢迎页则说明部署成功

配置网页

MkDocs工程的所有配置都集成在 mkdocs.yml 文件中

修改网页名称

网页名称就是显示在浏览器标签以及网页左上位置的内容,默认为 My Docs,可以在 mkdocs.yml 文件中的设置 site_name 来改变

site_name: <网页名称>

修改主题

MkDocs支持多个主题,内置主题有 mkdocs 和 readthedocs ,第三方主题可以在MkDocs Wiki找到,也可以自定义主题

这里我是用的是比较受欢迎的 material 主题

pipenv install mkdocs-material

material 主题的详细配置说明可以参阅Material for MkDocs,这里我的配置如下

theme:
name: material
language: zh
hljs_languages:
- yaml
markdown_extensions:
- toc:
permalink: true
- pymdownx.highlight:
linenums: true
anchor_linenums: true
- pymdownx.inlinehilite
- pymdownx.superfences
  • name 指定使用的主题名称
  • language 指定网页语言
  • hljs_languages 指定额外需要高亮的语言
  • toc 用于设置目录,permalink: true 表示为网页中的一级/二级/三级/...标题生成链接
  • pymdownx.highlight 用于设置代码高亮,linenums: true 表示显示行号,anchor_linenums: true 用于为代码块的行号生成链接
  • pymdownx.inlinehilite 启用对内联代码高亮的支持
  • pymdownx.superfences 允许在代码和内容块之间任意嵌套

最终效果如下

发布文章

MkDocs的文章以markdown文件的形式存储在docs文件夹下,其中 index.md 为主页

发布新文章时,在docs目录下新建 <article>.md 文件并编辑

然后修改 mkdocs.yml 文件,将新文章加到导航栏中

nav:
- 主页: index.md
- <标题>: <article>.md

标题可以不设置,MkDocs按照 nav配置的标题 > 文章中定义的标题(h1) > 文件名 的顺序进行推断

如果要使用多级导航,则可以这样配置

nav:
- 主页: index.md
- <分类>:
- <标题>: <aritle>.md

然后执行 mkdocs gh-deploy 命令部署到GitHub

自动部署

一般会将MkDocs源文件也推送到GitHub以防止丢失,这里我就直接推送到 main 分支

新建 .gitignore 文件,忽略掉除 docs 、 mkdocs.yml 以及 git 相关文件之外的文件

/*
!/docs
!/mkdocs.yml
!/.gitignore
!/.github

然后我们在编写完文章后,一般至少都要执行这些命令

git add .
git commit -m 'new article'
git push # 第一次push时执行git push -u origin main
mkdocs gh-deploy

本着省一点是一点的原则,前面几个 git 相关的命令无法省略,但 mkdocs gh-deploy 可以通过GitHub Actions来帮助我们自动完成

在仓库根目录下新建 .github/workflows 文件夹

mkdir -p .github/workflows

在 .github/workflows 文件夹下新建 gh-deploy.yml 文件,其他文件名也可以,内容如下,具体含义可以参考Deploy MkDocs

name: Publish docs via GitHub Pages
on:
push:
branches:
- main
jobs:
build:
name: Deploy docs
runs-on: ubuntu-latest
steps:
- name: Checkout main
uses: actions/checkout@v2
- name: Deploy docs
uses: mhausenblas/mkdocs-deploy-gh-pages@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
EXTRA_PACKAGES: build-base

在GitHub仓库页面中,将 Settings -> Actions -> General -> Workflow Permissions 设置为 Read an write permissions,点击 Save 保存设置

这样每次编写完文章,只需成功执行 git push ,GitHub就会自动帮助我们部署

参考资料

  1. MkDocs官网
  2. MkDocs中文文档
  3. Material for MkDocs
  4. Mkdocs 配置和使用
  5. Deploy MkDocs

使用MkDocs搭建个人博客的更多相关文章

  1. windows上使用mkdocs搭建静态博客

    windows上使用mkdocs搭建静态博客 之前尝试过用HEXO搭建静态博客,最近发现有个叫mkdocs的开源项目也是搭建静态博客的好选择,而且它支持markdown格式,下面简要介绍一下mkdoc ...

  2. 【原】Github+Hexo+NextT搭建个人博客

    摘要 GitHub 是一个开源项目的托管网站,相信很多人都听过.在上面有很多高质量的项目代码,我们也可以把自己的项目代码托管到GitHub,与朋友们共享交流.GitHub Pages 是Github为 ...

  3. hexo+github搭建个人博客

    最近用hexo+github搭建了自己的个人博客-https://liuyfl.github.io,其中碰到了一些问题,记录下来,以便查阅. hexo+github在win7环境下搭建个人博客:hex ...

  4. 【一】Ubuntu14.04+Jekyll+Github Pages搭建静态博客

    本系列有五篇:分别是 [一]Ubuntu14.04+Jekyll+Github Pages搭建静态博客:主要是安装方面 [二]jekyll 的使用 :主要是jekyll的配置 [三]Markdown+ ...

  5. 利用Hexo搭建个人博客-博客发布篇

    通过 <利用Hexo搭建个人博客-环境搭建篇> 以及 <利用Hexo搭建个人博客-博客初始化篇>,我们了解到了利用Hexo搭建个人博客需要的环境以及配置,下面这篇文章将会介绍如 ...

  6. 利用Hexo搭建个人博客-博客初始化篇

    上一篇博文 <利用Hexo搭建个人博客-环境搭建篇> 中,我们讲解了利用Hexo搭建个人博客应该要配置哪些环境.相信大家已经迫不及待的想要知道接下来应该要怎么把自己的博客搭起来了,下面,让 ...

  7. 利用Hexo搭建个人博客-环境搭建篇

    我是一个爱写博客进行总结分享的人.然而,有着热爱写博客并且深知写博客好处的我,却没有好好的把这个习惯坚持下来.如今毕业已经一年多了吧,每一次与师弟师妹们聊天,我总会意味深长的建议他们,一定要定期梳理总 ...

  8. hexo在git上搭建个人博客

    公司实习第一天接到的任务是:搭建一个基于Nodejs的开源项目的开发环境,接到任务时以为不是很困难,后来才知道该项目已于去年被废弃,搭配环境的时候遇到了不少问题,折腾了两天还是没有最终完成... 不过 ...

  9. 使用jekyll在GitHub Pages上搭建个人博客【转】

    网上有不少资源,但大多是“授人以鱼”,文中一步一步的告诉你怎么做,却没有解释为什么,以及他是如何知道的.他们默认着你知道种种专业名词的含义,默认着你掌握着特定技能.你折腾半天,查资料,看教程,一步步下 ...

  10. 使用github与jekyll搭建个人博客(一)

    虽然使用博客园还没有多久,但是最近看到一些大神的博客觉得很是炫酷.于是突发奇想,想要搭建自己的博客站点儿.编程菜鸟一枚,还是想要记录下最近的搭建博客经历. 使用github搭建个人博客的方式有很多,百 ...

随机推荐

  1. 解决PaddlePaddle飞桨在迁移学习使用预训练模型时更改num_classes参数出现警告

    当我们使用 PaddlePaddle 进行迁移学习的时候,直接导入模型虽然是可以的,但是总是会有个警告 如直接用官方的 resnet101 并加载预训练模型的话 model = paddle.visi ...

  2. 2022-11-22:小美将要期中考试,有n道题,对于第i道题, 小美有pi的几率做对,获得ai的分值,还有(1-pi)的概率做错,得0分。 小美总分是每道题获得的分数。 小美不甘于此,决定突击复习,

    2022-11-22:小美将要期中考试,有n道题,对于第i道题, 小美有pi的几率做对,获得ai的分值,还有(1-pi)的概率做错,得0分. 小美总分是每道题获得的分数. 小美不甘于此,决定突击复习, ...

  3. 2021-04-08:给定一个单链表的头节点head,请判断该链表是否为回文结构。

    2021-04-08:给定一个单链表的头节点head,请判断该链表是否为回文结构. 福大大 答案2021-04-08: 1.找中点. 2.按中点切分成两个链表. 3.反转右边链表. 4.相等判断. 5 ...

  4. WSGI介绍

  5. AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from

    函数里面return response问题: 1.没有 2.写错 3.位置错 例如: return Response('确认成功')

  6. django之drf(部分讲解)

    序列化类常用字段和字段参数 drf在Django字段类型的基础上派生了自己的字段类型以及字段参数 序列化器的字段类型用于处理原始值和内部数据类型直接的转换 还可以用于验证输入.以及父对象检索和设置值 ...

  7. 一个线上全文索引BUG的排查:关于类阿拉件数字的分词与检索

    说到全文检索的分词,多半讲到的是中(日韩)文分词,少有英文等拉丁文系语言,因为英语单词天然就是分词的. 但更少讲到阿拉伯数字.比如金额,手机号码,座机号码等等. 以下不是传统的从0开始针对mysql全 ...

  8. vue项目提示TypeError: e.call is not a function

    最近运行vue项目老是提示TypeError: e.call is not a function 如上一运行到该页面就会提示这个错误,虽然页面功能都没受到影响,但是这个必定会给后期发布后的项目带来极大 ...

  9. odoo总结---类继承和视图继承

    类继承 自从有了类,就有继承,继承是类最大的特性,ODOO开发有不例外,先ODOO集采总结如下: 1)类继承:扩展类中没有_name属性,因为它继承了父类的_name.对现有模型的扩展, 添加新功能, ...

  10. 【python基础】if语句-条件测试

    1.初识if语句 编程时经常需要检查一系列条件,并据此决定采取什么措施.在Python中,使用if语句能够检查程序的当前状态,并据此采取相应措施. 其语法格式之一: 假设有一个学员名单的列表,想将其中 ...