2024年,如何打造惊艳的个人博客/出版系统并且赚点小钱?

几年前,我就推荐过用Markdown写作静态博客。静态博客几乎是零托管成本,比较适合个人博客起步。Markdown便于本地搜索,也可当作是个人知识库方案。

现在有了新的进展。我不仅构建了一个视觉上相当不错的个人网站,还美化了github、构建了个人出版系统 – 将文章导出为排版精美的图片和pdf的能力。


这一方案的核心是Mkdocs和Mkdocs-material。前者是Python技术文档构建系统,后者是与之适配的主题。我在《Python能做大项目》这本书中,深入介绍过这两种技术。

现在,基于这两种技术,我们可以走得更远:不仅可以撰写技术文档,更可以打造博客和门户网站。

下图就是截取的大富翁量化的网站界面:

2024年,如何打造惊艳的个人博客/出版系统并且赚点小钱?_第1张图片


你可以在大富翁量化网站上看到它最新的样式。更有创意的是,虽然它只是一个静态网站,但你每次刷新它,都能看到一些新的内容 – 至少配图会变!

这是首页。菜单栏、搜索这些是常规配置。标签云、首页的卡片式布局,是提升站点气质的地方。

所有的文档都有版本管理,我使用了github来托管文档和图片,所以,也顺便把github的个人主页美化了一下:

2024年,如何打造惊艳的个人博客/出版系统并且赚点小钱?_第2张图片

实在说,之前我没有想过,github主页也可以做得像个人网站。不得不说一张好图,能大大提升颜值。


此外,作为创作者,我还希望自己的文章能在多个渠道上发布,包括公众号、知乎、CSDN和小红书,有时候还需要把文章导出为PDF。这些渠道采用的技术大不相同,它们的排版要求也不一样,所以,要想不把时间无谓地浪费在枯燥、重复的排版上,我们就得用好各种工具。

1. Mkdocs + Mkdocs - Material

基础搭建我都写在《Python能做大项目》这本书的第10章中了,这里我们只介绍如何开通博客功能,以及定制首页。

Material自带了博客插件,我们只需要在配置中启用它(以及其它相关插件):

plugins:
  - awesome-pages:
      collapse_single_pages: true
  - blog:
      post_excerpt_separator: <!--more-->
  - tags:
      tags_file: tags.md
  - rss:
      match_path: "(blog|articles)/.*"
      categories:
        - categories
        - tags
      date_from_meta:
        as_creation: "date"
        as_update: true
        datetime_format: "%Y-%m-%d %H:%M"
        default_timezone: Asia/Shanghai
      use_git: false

其中rss插件需要安装mkdocs-rss-plugin插件。关于如何定制标签云,请参考Code Inside Out上的这篇文章。

该文也提到了如何实现最新博文的功能。不过,博主最后决定自己用Python撸一个方案,以实现本文开头提到的效果 – 动态和卡片式,并且能自动更新github的profile。

2. 自定义脚本生成卡片式首页和github profile

这个方案主要使用了python-frontmatter库。通过一个脚本,搜索articles和blog目录下所有的md文件,读取它们的front matter,再按日期排序,将最新发表的文章和博文的摘要、日期、title和首图抽取出来,通过模板生成一个新的README.md文件,放到项目根目录下。

github会读取这个文件作为我们的profile,mkdocs-material也会根据这个文件,生成网站首页。

这个readme.md实际上是一个带部分html标签的md片段。我先用脚本生成了供mkdocs使用的README.md,待网站发布后,再生成供github的profile使用的readme.md。区别主要在于,github的profile中不能使用’