TL;DR
你会看到如下内容:
- 基于
hugo建站 GitHub托管博客、通过webhook自动部署
1. hugo 与 hugo stack 主题
没什么可说的,hugo和hugo stack有完整的文档,虽然从我个人的角度来说,hugo文档很复杂、上手容易熟悉难;hugo stack则是文档过于简略,很多东西没有细写,毕竟是个人开发的,也很正常。但考虑到网上有大量相关的实践,我建站时也有一些参考,就不再赘述大量查得到的细节了,简单叙述一下我的方案。
首先,出于个人洁癖,我用docker compose管理每一个服务(包括个人主页),通过nginx反代到具体服务。
而对于个人主页,我用了 hugo server 部署(不知为何大量实践都不用),实际使用下来,hugo server 性能很高、并且会自动监控更改并重新构建,否则每次更新都要依次触发build、部署,并不必要。
不要用apt源的hugo,版本太低了,可能有内存泄露bug,会占用异常多的内存,用github release里的最新版本。
|
|
0.0.0.0是docker方案,不用docker的话不需要。
然后新增博客,我没有使用 hugo new 命令,这个活 hugo server 干完了。只需要把新增的markdown文档放在相应目录下即可。
2. 博客自动部署
这部分花的时间更多,主要是以下三个原因:
- 我要用自己的服务器部署(而不是github pages或者vercel或者OSS,不然租服务器的钱白花了)
- 我要用git管理我的所有博客,并且要有一个远程托管平台(随时随地都能敲博客)
- 我不想用github actions,我想用webhook的土制CI方案(去年折腾飞书机器人的时候,卡在没有一台服务器可以做webhook的后处理,以失败告终,遗憾至今)
我的方案也很简单,如果你不排斥git actions,那可能会更简单。
graph LR
A[撰写Markdown] --> B[上传至GitHub私仓<br>GitHub触发webhook]
E[服务器flask服务]
B --> F[鉴权验证]
E --> F
F --> G[Pull博客仓库]
G --> I[内容后处理<br>输出到Hugo content]
I --> K[Hugo自动重新构建<br>博客更新完成]
style A fill:#e1f5fe
style K fill:#ffcdd2
关于通过flask部署的监听、后处理服务,我开源了这部分代码供参考:blog-webhook-handler
简单描述一下这个仓库:
- 文档是最早由AI直接生成的版本,还没来得及更新,与代码实现可能会有一些区别,在我手动修改完文档之前建议忽略(看文档第一句话,没写是AI生成的就说明我改了)。
- 使用:可以直接改一些
config里的default.json,然后一键docker compose up。 - 我向cline(deepseek-chat API)描述了功能和大致框架,几轮交谈后由cline生成了整个代码框架,此后我在这个框架内手动进行缝补。作为参考的工作量:
- 从代码行数来说,大致数了下(可能不准确),只考虑
pythonDockerfile:- cline:+419 -5
- 我:+144 -90
- 从时间来说,我大约在这个仓库上花了四个半小时(来自wakatime)。
- 从代码行数来说,大致数了下(可能不准确),只考虑
Acknowledgement
(以下感谢不分先后)
感谢hugo项目、hugo stack项目。hugo stack挺好看的,很对我的审美。
感谢两位不愿意透露姓名先生在整个建站过程中对我的建议和帮助。
感谢FGO,本站目前、以及可预见的未来内,应当会大量使用FGO官图,如个人头像、博客封面等。
Appendix A. 建站历史
大约19年,我听说科大给所有师生都提供了免费的个人网站域名和静态资源,只要将网站资源文件上传到对应的ftp上即可,而且是高贵的教育域名(home.ustc.edu.cn)。非常方便快捷。不过当时我技术不行、也忙于学业没什么时间折腾,所以随便写了个index.html放上去占位。
到了21年前后,国内对个人主页的管控一下子收紧了起来,科大也不再提供新的个人主页域名了,过去存在的个人域名倒是短时间内没有收回。幸好我先前放了一个html占住了位置,此后很多同学想要也申不到。
再到22年和23年,我总算有了一些可以随意支配的闲暇时间。教育域名还在,于是先用 mkdocs 构建了一个挺好看的静态页面,再手动修改html写了点东西。这算是我的第一个个人主页。惭愧的是,由于我惫懒、没有定期写东西的习惯;而且这个方案里每次上传内容都很麻烦(要重新构建、改html),所以后续也完全没有更新和维护。就这么挂了好几年,直到今天还可以用搜索引擎(搜索我本人的名字)搜到。
此后偶尔有折腾个人服务器和主页的想法,一来试着从运营商那里要动态IPv4地址失败、二来25年10月之前都很忙,所以也只是停留在想法的阶段。直到25年国庆,有一些闲暇时间,于是干脆租了云服务器、买了域名,准备搞点有意思的实践。也就是现在这个主页了。
不过我有点嫌弃现在的这个域名(因为 brevity 和 d 放在一起太突兀太丑了,我平时会用下划线将两者隔开、并且首字母大写成 Brevity_D。这样泾渭分明好看一些),当时在这个域名和 selenophilia.top 之间犹豫了一阵子。最终还是考虑 selenophilia 这个词没有我的个人色彩,不适合作为个人主页(倒可以用作别的玩意儿)。
2025年10月19日17:00 UTC+8 于USTC东区1958咖啡馆