使用Hugo和Netlify搭建个人资料库

使用Hugo和Netlify搭建个人资料库

试过太多资料库了,包含ghost, hexo, mweb, dokuwiki, tiddlywiki等,各有特色,但最大的问题有几个:

  1. 有些是基于服务的资料库,正常用的时候还行,但是遇到服务器问题或需要迁移的时候,就难受了。重装安装,还要考虑环境的版本问题。
  2. mweb是好用,但是只在mac下有用,换个地方就没法用。
  3. dokuwiki存成了文件,没用数据库。原本以为迁移比较容易,但遇到了更新版本时不兼容问题,搞死了。
  4. tiddlywiki感觉有点用,未来快速建站,快速迁移,应该很好用。但因为所有数据全部存到了一个文件中,所以不适合做持续的数据管理。
  5. hexo在文件数量多了之后,编译太慢。

难受!

一直觉得github.io应该好用,一直琢磨着是不是能够做一个页面,读取站点下的markdown文件,在线解析后展示,这样数据就可以全部使用markdown了,而且全流程开源。但一直没空搞。直到我遇到了netlify。

组件介绍 #

Netlify #

Netlify是一个静态网站托管服务,它可以将静态网站部署到全球的CDN上,并提供免费的SSL证书和DNS解析。它的投资人是从github出来的,在设计的时候与github深度集成,其基本逻辑是这样的:

  1. 配置与github仓库的关联,配置网站默认网址(netlify.app下的子域名),配置一系列静态网站的信息,然后netlify就自动把github的站点部署了。
  2. 如果站点不是静态站点,而是Hugo、Hexo这一类的需要编译的站点,那么可以定义脚本执行,然后将执行结果部署。因为netlify默认支持hugo的构建,所以我也没做什么特别的配置。简单在netlify.toml中指定了一下netlify的部署条件。
[build]
  command = "hugo"
  publish = "public"

[context.production.environment]
  HUGO_VERSION = "0.131.0"
  HUGO_EXTENDED = "true"
  1. Netlify会检查github的关联分支,当有新的提交时,netlify会自动触发构建,并部署到指定的网址上。

Hugo #

Hugo是一个静态网站生成器,它可以将Markdown文件转换为HTML文件,并生成一个完整的静态网站。Hugo的优点是速度快,模板多。安装按照官网教程实现即可,注意区分普通版本和extension版本。Hugo的本地执行就比较简单了:

hugo server

从网页上就可以预览结果了。

Hugo版本也比较多,我选择的是0.131.0 extension版本。这个无特殊情况就不改了。目前用得挺稳定了。

Hugo-book #

Hugo-book是Hugo的一个主题,或者说模板。它原本是将Hugo的站点转换为书籍格式,能够有多级目录、支持检索等功能。但在我看来,这些功能非常适合做知识库。

Hugo-book的部署有点忘了,反正基本按照官网来的,也遇到了一些小问题,目前还能记得住的是双语言支持问题,解决方案见: https://doc.toast.pub/articles/docs/hugo/hugo-book-multilang-search/。配置完成之后应该是一劳永逸了。如果需要latex支持,需要配置katex或mathjax,需要折腾一下。

vscode-mindmap #

这是vscode的插件,之所以列在这里,是因为这东西能够方便整理思路,也可以放在目录下,同时还不被显示在网页里,非常好用。简单推荐一下。

全套解决方案 #

列一下我的解决方案:

首次配置 #

  1. 安装git,hugo(指定版本),vscode,vscode-mindmap插件。
  2. 在github上创建一个仓库,用于存放hugo全套项目。
  3. clone仓库到本地。
  4. 使用hugo new site命令创建一个站点。(好像是这样的,只配一次就行)
  5. 把hugo-book下载到hugo站点的themes目录下。注意,不要用官网给的submodule指令,因为我们后面有可能要修改hugo-book的代码,用submodule特别不方便。反正这一部分配一次就不变了,所以直接下载解压到themes目录即可。
  6. 配置hugo.tomlconfig.toml,这俩应该都是hugo配置。我的是这样的,供参考
baseURL = 'http://kd.duxy.cc'
languageCode = 'zh'
title = '小杜的资料库'
defaultContentLanguage = 'zh'
hasCJKLanguage = true

[params]
math = true

[markup]
  [markup.katex]
    enable = false
  1. 在站点目录下创建一个netlify.toml文件。这个是给netlify部署用的。内容如下:
[build]
  command = "hugo"
  publish = "public"

[context.production.environment]
  HUGO_VERSION = "0.131.0"
  HUGO_EXTENDED = "true"
  1. 在本地执行hexo server,预览一下效果。本地做的大部分修改,都可以实时在这个测试服看到。如果没问题,就可以提交到github了。
  2. 在github上创建一个分支,用于存放hugo的站点文件。我直接用了master分支。
  3. 在netlify上配置github的仓库,配置好域名,配置好部署条件。

文章格式说明 #

  1. 在站点目录下有一个docs目录,用于存放markdown文件。
  2. 目录结构代表了页面里的大纲结构,目录对应的显示放在目录下的_index.md文件中。
  3. 默认显示文件的标题,如果想要自定义标题,可以在正文上方添加title: 自定义标题

使用 #

若是一台新设备,先配一下基本环境,然后git clone一下仓库。

  1. 使用hugo server起一个本地服务器。然后文章撰写过程可以在本地查看。
  2. 撰写文章。
  3. 使用git add .git commit -m "提交信息"git push提交到github。

因为netlify会自动同步自动部署,所以基本上不用管什么事了。