// 2026-10-16 · 812 字 · 2 分钟

这个博客是怎么搭起来的

#折腾#Hugo#运维

为什么是静态站

先看这台机器还剩什么:

磁盘:  50G,已用 15G,剩 33G        ✓ 充裕
CPU:   2 核 Xeon 8255C              ✓ 够用
内存:  available 885 MB
swap:  已用 909 MB / 1987 MB        ✗ 这才是真约束

swap 已经用了将近一半 —— 也就是说这台机器正在拿磁盘当内存用。这种情况下再塞一个常驻进程是很危险的选择:

架构代表常驻内存
纯静态Hugo0
Node 动态Ghost150~250 MB
PHP 动态WordPress250~400 MB

静态站的产物就是一堆 HTML 文件,由已经在跑的 Caddy 直接读磁盘,不新增任何进程。构建时 Hugo 临时占约 50 MB,构建完就退出 —— 实测空站构建 0.091 秒。

为什么是 Hugo

在静态生成器里,Hugo 的定位很清楚:单 Go 二进制,无运行时依赖。

对比另外两个热门选择:

  • Hexo —— 中文社区最大、主题最多,但要 Node + 几百个依赖包,构建峰值内存 300~600 MB。在这台机器上构建期间会把其他服务一起拖进 swap。
  • Astro —— 最现代、产物最小,但依赖链更复杂,构建峰值 400~800 MB。

Hugo 的代价是模板语法(Go template)学习曲线陡一些。但如果只是写博客,日常根本不需要碰模板。

一个容易忽略的坑:外部依赖

很多主题默认引用 Google Fonts 或者公共 CDN。在境内访问这些资源会卡住几秒甚至超时 —— 页面看起来「加载慢」,其实和你的服务器毫无关系。

选主题时我专门检查了这一点:

grep -rniE 'fonts\.googleapis|fonts\.gstatic|cdn\.jsdelivr|unpkg\.com|cdnjs\.cloudflare' \
  themes/PaperMod/layouts themes/PaperMod/assets themes/PaperMod/static

PaperMod 的结果是 零命中 —— 所有资源本地化,这是选它的重要原因之一。

备案要求决定了部署位置

工信部备案的核查维度里有「接入信息」一项:备案域名当前解析的 IP 归属,必须与备案的接入服务商一致。

这意味着不能用 Vercel、GitHub Pages、Netlify 这些「一键托管」—— 域名解析指向境外会让备案失效,甚至被判「空壳网站」注销。

所以这个站点跑在自己的腾讯云 CVM 上,用 blog.vultx.top 子域,同一个主体、同一个接入商,完全合规。

写作流程

内容就是 Markdown 文件,放在 content/posts/ 下:

---
title: "文章标题"
date: 2026-10-16T16:45:00+08:00
draft: false
tags: ["标签"]
---

正文从这里开始。

写完跑一次 hugo 生成,Caddy 立刻就能访问 —— 不需要重启任何服务。


这篇文章本身就是一次渲染测试:中文排版、代码块、表格、列表、引用。