这篇既是示例文章,也是这个站的使用说明书。半年后忘了怎么发文章,回来翻它就行。

整体结构

本地写 .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                  # 是否在右上角显示目录
---

三个容易踩的点:

  1. draft: true 的文章不会被构建,本地不加 -D 也看不到,容易以为「文章丢了」
  2. 文件名统一用英文短横线格式(redis-persistence.md),中文文件名会让 URL 变成 %E4%B8%AD 这种乱码
  3. summary 值得手动写,它同时用于列表页摘要和分享出去的卡片描述

代码块

技术笔记里最常用的东西,支持文件名标注和指定行高亮:

```go {hl_lines=[3]}
func main() {
    fmt.Println("第 3 行会被高亮")
}
```

下一步想加的东西

  • 标签和分类
  • 站内搜索
  • 每日笔记归档
  • 评论(配好 Giscus 后把 README 里那步删掉)
  • 给文章加封面图

这份清单本身也可以当模板用——每完成一项就打勾,比空想着"以后要做"有用得多。