使用Hugo和Netlify搭建个人资料库
试过太多资料库了,包含ghost, hexo, mweb, dokuwiki, tiddlywiki等,各有特色,但最大的问题有几个:
- 有些是基于服务的资料库,正常用的时候还行,但是遇到服务器问题或需要迁移的时候,就难受了。重装安装,还要考虑环境的版本问题。
- mweb是好用,但是只在mac下有用,换个地方就没法用。
- dokuwiki存成了文件,没用数据库。原本以为迁移比较容易,但遇到了更新版本时不兼容问题,搞死了。
- tiddlywiki感觉有点用,未来快速建站,快速迁移,应该很好用。但因为所有数据全部存到了一个文件中,所以不适合做持续的数据管理。
- hexo在文件数量多了之后,编译太慢。
难受!
一直觉得github.io应该好用,一直琢磨着是不是能够做一个页面,读取站点下的markdown文件,在线解析后展示,这样数据就可以全部使用markdown了,而且全流程开源。但一直没空搞。直到我遇到了netlify。
组件介绍 #
Netlify #
Netlify是一个静态网站托管服务,它可以将静态网站部署到全球的CDN上,并提供免费的SSL证书和DNS解析。它的投资人是从github出来的,在设计的时候与github深度集成,其基本逻辑是这样的:
- 配置与github仓库的关联,配置网站默认网址(netlify.app下的子域名),配置一系列静态网站的信息,然后netlify就自动把github的站点部署了。
- 如果站点不是静态站点,而是Hugo、Hexo这一类的需要编译的站点,那么可以定义脚本执行,然后将执行结果部署。因为netlify默认支持hugo的构建,所以我也没做什么特别的配置。简单在
netlify.toml
中指定了一下netlify的部署条件。
[build]
command = "hugo"
publish = "public"
[context.production.environment]
HUGO_VERSION = "0.131.0"
HUGO_EXTENDED = "true"
- 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的插件,之所以列在这里,是因为这东西能够方便整理思路,也可以放在目录下,同时还不被显示在网页里,非常好用。简单推荐一下。
全套解决方案 #
列一下我的解决方案:
首次配置 #
- 安装git,hugo(指定版本),vscode,vscode-mindmap插件。
- 在github上创建一个仓库,用于存放hugo全套项目。
- clone仓库到本地。
- 使用hugo new site命令创建一个站点。(好像是这样的,只配一次就行)
- 把hugo-book下载到hugo站点的themes目录下。注意,不要用官网给的submodule指令,因为我们后面有可能要修改hugo-book的代码,用submodule特别不方便。反正这一部分配一次就不变了,所以直接下载解压到themes目录即可。
- 配置
hugo.toml
和config.toml
,这俩应该都是hugo配置。我的是这样的,供参考
baseURL = 'http://kd.duxy.cc'
languageCode = 'zh'
title = '小杜的资料库'
defaultContentLanguage = 'zh'
hasCJKLanguage = true
[params]
math = true
[markup]
[markup.katex]
enable = false
- 在站点目录下创建一个
netlify.toml
文件。这个是给netlify部署用的。内容如下:
[build]
command = "hugo"
publish = "public"
[context.production.environment]
HUGO_VERSION = "0.131.0"
HUGO_EXTENDED = "true"
- 在本地执行
hexo server
,预览一下效果。本地做的大部分修改,都可以实时在这个测试服看到。如果没问题,就可以提交到github了。 - 在github上创建一个分支,用于存放hugo的站点文件。我直接用了master分支。
- 在netlify上配置github的仓库,配置好域名,配置好部署条件。
文章格式说明 #
- 在站点目录下有一个
docs
目录,用于存放markdown文件。 - 目录结构代表了页面里的大纲结构,目录对应的显示放在目录下的
_index.md
文件中。 - 默认显示文件的标题,如果想要自定义标题,可以在正文上方添加
title: 自定义标题
。
使用 #
若是一台新设备,先配一下基本环境,然后git clone一下仓库。
- 使用
hugo server
起一个本地服务器。然后文章撰写过程可以在本地查看。 - 撰写文章。
- 使用
git add .
,git commit -m "提交信息"
,git push
提交到github。
因为netlify会自动同步自动部署,所以基本上不用管什么事了。