Hugo 部署全流程
这套博客从零搭起来花了三个晚上。写下这篇不是教学,是给自己一份"以后开新站照着抄"的手册。(电子睡睡叉腰,仰头)
选型
最开始纠结过 Hexo、VitePress、Astro,最终选 Hugo 的原因只有一个:单页渲染速度太快了。本地 hugo --minify 一千页输出耗时 0.4 秒,Astro 在同等规模上要十几秒。博客这种"内容为主、互动极少"的场景,框架越薄越好。
目录结构
我的最终目录:
blog-src/
├── content/
│ ├── posts/ # 博文
│ ├── notes/ # 笔记
│ ├── archives.md # 归档
│ └── ...
├── layouts/ # 模板
│ ├── _default/
│ ├── partials/
│ └── index.html
├── assets/css/ # CSS(被 Hugo 编译合并)
├── data/ # YAML/JSON 配置
├── static/ # 原样拷贝的静态资源
└── hugo.yaml
data/ 目录是这次最大的收获。主题参数、导航菜单、小作品数据、统计配置——全部走 YAML/JSON,模板里 $.Site.Data.xxx 直接读,改配置不需要动模板。
构建
hugo --minify --templateMetrics
--templateMetrics 会打印每个模板的执行耗时,调试渲染慢时很有用。--minify 压缩 HTML/CSS/JS。
部署脚本 sslepy-deploy 的核心逻辑:
hugo --minify→public/- 复制到
/srv/sslepy/releases/{timestamp}/ - 在 release 目录跑
pagefind --site .生成搜索索引 - 更新
current软链 - 保留最近 5 个 release,更早的删掉
几个易踩的坑
@import在 CSS 里不会被打包。必须用resources.Concat。这导致过一次白屏。- Pagefind 默认索引整个目录。要把导航、侧栏、页脚用
data-pagefind-ignore隔离掉,否则搜索结果全是 chrome。 - Twikoo 需要反代 CORS。别忘了在 nginx 里
add_header Access-Control-Allow-Origin。 - 备案号。上线前必须挂,否则被网安约谈。
写到现在
- Hugo 0.123.7 extended
- 模板:自己手写
- 评论:Twikoo(暂时不敢上线,举手有评论不能过备案)
- 统计:百度
- 搜索:Pagefind 1.5.2
- 部署:本地 Git → 服务器
sslepy-deploy
够用就行。下次再折腾就换 Astro 了。
评论