GitHub

本站博客是怎么搭的:Hugo + 手写主题 + 自建部署

virtualcc.cn 原本只有两个手写的静态页面:首页和软件下载中心。加博客板块时的约束很清楚——不能推倒重来,也不能让新板块看起来像另一个网站

为什么选 Hugo

写文章这件事,如果每篇都要手写一份 HTML、再手动往列表页插一条,几篇之后一定会出现漏改导致的死链。静态生成器解决的正是这个问题:文章是 Markdown,列表页、分页、标签页、RSS 全部由模板自动产出。

Hugo 的额外好处是它就是一个 exe,不需要 Node 依赖树,构建一次不到一秒。

挂在子路径下的做法

关键一步是把 Hugo 的 baseURL 设成带路径的形式:

baseURL = "https://virtualcc.cn/blog/"

这样 Hugo 产出的 public/ 目录和服务器上的 /blog/ 目录是一一对应的,生成的首页文件永远不会覆盖手写的站点 index.html。两套东西各管各的,互不干扰。

视觉一致性

博客页面没有引入任何 CSS 框架,而是直接引用站点已有的样式:

<link rel="stylesheet" href="/css/theme.css">
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/blog/css/blog.css">

前两个是站点原有的主题(顶部导航、页脚、--vcc-* 颜色变量都在里面),第三个才是博客板块自己的样式,只用前两者已经定义好的变量。所以博客的橙色强调色、卡片阴影、圆角、响应式断点,和下载中心是同一套。

部署

服务器上是 Caddy 直接伺服静态目录,没有容器也没有 CI:

  1. 本地 hugo --minify 生成 public/
  2. SFTP 上传到服务器的暂存目录
  3. rsync -a --delete 落到 /opt/virtualcc.cn/blog/,并把属主改回 caddy

--delete 这一步是重点:删掉一篇 Markdown 之后,服务器上对应的页面目录会跟着消失,不会留下孤儿页面。

代价

header 和 footer 的 HTML 现在有两份——手写页面里一份,Hugo 模板里一份。改导航要两边同步。这是当前阶段有意接受的取舍:把手写页面也塞进 Hugo 会让改动面大很多,而导航一年也改不了几次。

← 返回博客列表