Featured image of post 建站日志

建站日志

与大多数人一样,我也要讲讲我的建站方案。虽然这种内容已经品鉴的够多了,不过我额外折腾了一些东西,简单记录一下。

TL;DR

你会看到如下内容:

  • 基于 hugo 建站
  • GitHub 托管博客、通过 webhook 自动部署

1. hugo 与 hugo stack 主题

没什么可说的,hugohugo stack有完整的文档,虽然从我个人的角度来说,hugo文档很复杂、上手容易熟悉难;hugo stack则是文档过于简略,很多东西没有细写,毕竟是个人开发的,也很正常。但考虑到网上有大量相关的实践,我建站时也有一些参考,就不再赘述大量查得到的细节了,简单叙述一下我的方案。

首先,出于个人洁癖,我用docker compose管理每一个服务(包括个人主页),通过nginx反代到具体服务。

而对于个人主页,我用了 hugo server 部署(不知为何大量实践都不用),实际使用下来,hugo server 性能很高、并且会自动监控更改并重新构建,否则每次更新都要依次触发build、部署,并不必要。

不要用apt源的hugo,版本太低了,可能有内存泄露bug,会占用异常多的内存,用github release里的最新版本。

1
hugo server --appendPort=false --bind 0.0.0.0 -e production --baseURL ...

0.0.0.0是docker方案,不用docker的话不需要。

然后新增博客,我没有使用 hugo new 命令,这个活 hugo server 干完了。只需要把新增的markdown文档放在相应目录下即可。

2. 博客自动部署

这部分花的时间更多,主要是以下三个原因:

  1. 我要用自己的服务器部署(而不是github pages或者vercel或者OSS,不然租服务器的钱白花了)
  2. 我要用git管理我的所有博客,并且要有一个远程托管平台(随时随地都能敲博客)
  3. 我不想用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

简单描述一下这个仓库:

  1. 文档是最早由AI直接生成的版本,还没来得及更新,与代码实现可能会有一些区别,在我手动修改完文档之前建议忽略(看文档第一句话,没写是AI生成的就说明我改了)。
  2. 使用:可以直接改一些 config 里的 default.json,然后一键 docker compose up
  3. 我向cline(deepseek-chat API)描述了功能和大致框架,几轮交谈后由cline生成了整个代码框架,此后我在这个框架内手动进行缝补。作为参考的工作量:
    1. 从代码行数来说,大致数了下(可能不准确),只考虑 python Dockerfile
      1. cline:+419 -5
      2. 我:+144 -90
    2. 从时间来说,我大约在这个仓库上花了四个半小时(来自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年国庆,有一些闲暇时间,于是干脆租了云服务器、买了域名,准备搞点有意思的实践。也就是现在这个主页了。

不过我有点嫌弃现在的这个域名(因为 brevityd 放在一起太突兀太丑了,我平时会用下划线将两者隔开、并且首字母大写成 Brevity_D。这样泾渭分明好看一些),当时在这个域名和 selenophilia.top 之间犹豫了一阵子。最终还是考虑 selenophilia 这个词没有我的个人色彩,不适合作为个人主页(倒可以用作别的玩意儿)。

2025年10月19日17:00 UTC+8 于USTC东区1958咖啡馆

Licensed under CC BY-NC-SA 4.0
最后更新于 Oct 19, 2025 17:09 UTC+8