小Z的个人空间

这个博客的技术架构

HugonginxPageFindSSL腾讯云

这个博客的技术架构

搭完博客顺手记录一下整个技术链路,供有同样需求的同学参考。

整体架构

用户浏览器
    ↓ HTTPS
nginx (服务器)
    ↓ 静态文件
/var/www/aizsx.com
    ↑
Hugo 生成 → /root/blog/public
    ↑
Git 仓库 ← GitHub (代码版本管理)

服务器与域名

服务器是腾讯云的轻量应用服务器,系统 Ubuntu 24.04。域名也是腾讯云买的,解析直接走 DNSPod(腾讯云旗下 DNS 服务商),配置了一条 A 记录指向服务器公网 IP。

nginx 作为 Web 服务器

为什么不用 Caddy?说实话,Caddy 自动 HTTPS 确实香,但 nginx 我更熟,配置起来也更可控。nginx 处理静态文件性能很好,一个简单的配置文件就够了:

server {
    listen 80;
    server_name aizsx.com www.aizsx.com;
    root /var/www/aizsx.com;
    index index.html;
    location / {
        try_files $uri $uri/ =404;
    }
}

后续如果要加缓存规则、反向代理,都在这个基础上改。

HTTPS 证书

证书用 Let’s Encrypt,通过 certbot 自动申请和续期。执行一次命令搞定,90 天后自动续期,不用人工干预:

certbot --nginx -d aizsx.com -d www.aizsx.com

证书有效期到 2026 年 7 月,正常情况下 certbot 会自动续期。

搜索方案:PageFind

静态博客加搜索,以前要么接入 Algolia(要注册账号、有配额限制),要么自己搭 lunr.js(慢、大规模不好用)。PageFind 是一个新选择:编译时生成搜索索引,纯静态,不需要任何后端服务,索引文件直接放在服务器上。

实现方式:

  1. hugo 生成静态文件
  2. pagefind --site public 生成搜索索引
  3. 搜索页面用 PageFind JS API 自己写 UI

索引只包含标记了 data-pagefind-body 的文章内容,其他页面(关于页、搜索页本身)不会被搜到。

发布流程

每次写完文章,只需要:

cd /root/blog
hugo
pagefind --site public
rsync -av --delete public/ /var/www/aizsx.com/
/usr/sbin/nginx -s reload

我把这段写成了 deploy.sh,一键搞定生成、索引、部署、重载。

代码版本管理

博客源文件(Markdown 内容 + Hugo 主题配置 + 部署脚本)全部存在 GitHub 私人仓库,每次改完 git add . && git commit && git push 就提交了。服务器上直接 clone 下来,改完 push,服务器 pull,保持同步。


这套方案的优势:零托管成本、完全可控、无需维护后台。缺点是要接受纯文本写作这件事,但对于技术人来说应该不是问题。