这个博客的技术架构
搭完博客顺手记录一下整个技术链路,供有同样需求的同学参考。
整体架构
用户浏览器
↓ 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 是一个新选择:编译时生成搜索索引,纯静态,不需要任何后端服务,索引文件直接放在服务器上。
实现方式:
hugo生成静态文件pagefind --site public生成搜索索引- 搜索页面用 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,保持同步。
这套方案的优势:零托管成本、完全可控、无需维护后台。缺点是要接受纯文本写作这件事,但对于技术人来说应该不是问题。