这篇既是示例文章,也是这个站的使用说明书。半年后忘了怎么发文章,回来翻它就行。
整体结构
本地写 .md → git push → Cloudflare 检测到推送
→ 自动跑 hugo 构建
→ 产物推上全球 CDN
→ 几十秒后线上更新
几个关键点:
- 仓库是私有的,源码、草稿、提交历史只有自己能看到
- 只有构建产物是公开的,访客拿到的是渲染好的 HTML
- 没有服务器、没有数据库、没有 SSL 证书要续期,因为这些 Cloudflare 全包了
目录约定
只有两个地方需要记住:
| 路径 | 放什么 | 什么时候写 |
|---|---|---|
content/posts/ | 成篇的技术梳理 | 想清楚一个问题时 |
content/notes/ | 当天的碎片记录 | 每天,有就记 |
剩下的 layouts/(模板)、assets/(样式)都是配置好就不动的东西。
发一篇新文章
# 长期文章(draft 默认 true,写完了改 false)
hugo new content posts/redis-persistence.md
# 每日笔记(今天日期自动做标题,默认直接发布)
hugo new content notes/2026-10-29.md
本地预览:
hugo server -D
# 打开 http://localhost:1313 ,-D 表示连草稿一起预览
确认没问题就推上去:
git add .
git commit -m "post: Redis 持久化机制"
git push
等 Cloudflare 构建完成,线上就有了。整个流程里唯一需要动脑的部分是写内容本身。
front matter 怎么写
每篇文章开头这段 YAML 就是 front matter,决定它怎么被展示:
---
title: "Redis 持久化机制"
date: 2026-10-29
draft: false
tags: ["redis", "数据库"] # 技术栈级别的标签,会出现在 /tags/ 页面
categories: ["后端"] # 大类,一篇只给一个
summary: "RDB 和 AOF 的取舍,以及为什么生产环境通常两个都开。"
ShowToc: true # 是否在右上角显示目录
---
三个容易踩的点:
draft: true的文章不会被构建,本地不加-D也看不到,容易以为「文章丢了」- 文件名统一用英文短横线格式(
redis-persistence.md),中文文件名会让 URL 变成%E4%B8%AD这种乱码 summary值得手动写,它同时用于列表页摘要和分享出去的卡片描述
代码块
技术笔记里最常用的东西,支持文件名标注和指定行高亮:
```go {hl_lines=[3]}
func main() {
fmt.Println("第 3 行会被高亮")
}
```
下一步想加的东西
- 标签和分类
- 站内搜索
- 每日笔记归档
- 评论(配好 Giscus 后把 README 里那步删掉)
- 给文章加封面图
这份清单本身也可以当模板用——每完成一项就打勾,比空想着"以后要做"有用得多。