使用MkDocs搭建个人博客

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

MkDocs介绍

根据MkDocs官网介绍:

MkDocs is a fastsimple 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支持多个主题,内置主题有 mkdocsreadthedocs ,第三方主题可以在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 文件,忽略掉除 docsmkdocs.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. 2023-04-28:将一个给定字符串 s 根据给定的行数 numRows 以从上往下、从左到右进行 Z 字形排列 比如输入字符串为 “PAYPALISHIRING“ 行数为 3 时,排列如下 P

    2023-04-28:将一个给定字符串 s 根据给定的行数 numRows 以从上往下.从左到右进行 Z 字形排列 比如输入字符串为 "PAYPALISHIRING" 行数为 3 ...

  2. 2022-09-20:以下go语言代码输出什么?A:8 8;B:8 16;C:16 16;D:16 8。 package main import ( “unsafe“ “fmt“ )

    2022-09-20:以下go语言代码输出什么?A:8 8:B:8 16:C:16 16:D:16 8. package main import ( "unsafe" " ...

  3. 2020-11-21:java中,什么是跨代引用?

    福哥答案2020-11-21: [答案来自此链接:](http://bbs.xiangxueketang.cn/question/404) 跨代引用常出现与 CMS 分代收集时需要使用可达性分析判断对 ...

  4. Git开发、发布、缺陷分离模型概述(支持master/develop/feature/release/hotfix类型分支)

    Git是什么? Git是一种分布式版本控制系统,它可以记录文件的修改历史和版本变化,并可以支持多人协同开发.Git最初是由Linux开发者Linus Torvalds创建的,它具有高效.灵活.稳定等优 ...

  5. 越小越好: Q8-Chat,在英特尔至强 CPU 上体验高效的生成式 AI

    大语言模型 (LLM) 正在席卷整个机器学习世界.得益于其 transformer 架构,LLM 拥有从大量非结构化数据 (如文本.图像.视频或音频) 中学习的不可思议的能力.它们在 多种任务类型 上 ...

  6. GroundingDINO(一种开集目标检测算法)服务化,根据文本生成检测框

    背景 最近发现一个叫GroundingDINO的开集目标检测算法,所谓开集目标检测就是能检测的目标类别不局限于训练的类别,这个算法可以通过输入文本的prompt然后输出对应的目标框.可以用来做预标注或 ...

  7. 代码随想录算法训练营Day45 动态规划

    代码随想录算法训练营 代码随想录算法训练营Day45 动态规划|70. 爬楼梯(进阶) 322. 零钱兑换 70. 爬楼梯 (进阶) 题目链接:70. 爬楼梯 (进阶 假设你正在爬楼梯.需要 n 阶你 ...

  8. 【python基础】复杂数据类型-列表类型(列表切片)

    1.列表切片 前面学习的是如何处理列表的所有数据元素.python还可以处理列表的部分元素,python称之为切片. 1.1创建切片 创建切片,可指定要使用的第一个数据元素的索引和最后一个数据元素的索 ...

  9. Proteus运行故障分析(电源、程序等)

    问题一.Program file is not specified 原因分析:未加载hex文件. 解决方法:双击芯片,点击Program files,找到hex文件添加进来. 问题二.No power ...

  10. 园子的商业化努力-行行AI人才培养「常青藤计划」

    各位园子的小伙伴: 感谢大家长期对园子的支持,AI大模型出现之后,各行各业都在积极思考如何应对,如何把业务场景和AI结合.在这个过程中,AI人才缺乏是最核心的问题. 基于此,园子打算在AI人才培养方面 ...