SimpleBlog 系列写到第二篇了。上一篇我们把服务搭起来、把本地环境跑通,今天这篇要聊的是真正决定博客好不好用的部分——文章的发布和日常管理。很多人搭博客有个通病:系统装完就觉得大功告成,结果真到每天要写东西的时候才发现,发布流程不顺、管理功能缺手缺脚,越用越憋屈。这篇内容主要围绕 SimpleBlog 的内容写入、发布上线、分类管理和长期维护这几个环节展开,适合已经完成基础部署、准备正式开始写文章的人,也适合正在调研博客方案、想搞清楚一款轻量博客系统日常维护成本的朋友。我把实际用下来的配置、命令、踩过的坑都放在里面,你照着操作基本能少走一大半弯路。
1. SimpleBlog 的发布体系:先想清楚再动手
1.1 文件即内容:SimpleBlog 的内容组织思路
开始讲发布和管理之前,有必要先把 SimpleBlog 的内容存储方式说清楚,因为你后面所有操作都建立在这个基础上。SimpleBlog 走的是"文件即内容"的路线,也就是每一篇文章就是一个 Markdown 文件,数据不存放在 MySQL、MongoDB 这类数据库里。我第一次用的时候觉得这设计太"原始"了,但用久了之后反而觉得这恰恰是它最聪明的地方。
没有数据库意味着什么?意味着你的博客内容就是一整个目录、一堆可以看到和复制的文件,不需要担心数据库挂了、表结构坏了、导出数据格式对不上这些问题。随便用一个网盘同步工具,或者一条 tar 命令,整个博客的内容就能完整备份一次;想迁移服务器,把目录拷贝过去,SimpleBlog 起来就接着用。
以我当前的部署为例,内容目录的结构大致是这样:
text复制content/
├── posts/
│ ├── 2024-06-01-simpleblog-1-deploy.md
│ ├── 2024-06-10-simpleblog-2-publish.md
│ └── 2024-06-18-nginx-ssl-setup.md
├── pages/
│ ├── about.md
│ └── contact.md
└── drafts/
└── unfinished-idea.md
posts 放正式文章,pages 放静态页面(关于我、联系方式这类),drafts 放草稿。每个文件的名字里带着日期和 slug,slug 会直接成为访问路径的一部分,后面我会专门讲怎么起名。这个结构用了几周之后我最大的感受是:写文章就像在本地文件夹里打字一样,没有"先想好放在哪个分类、填哪些必填字段"这类负担,写完了丢进去就行。
1.2 从 Markdown 到线上页面的完整链路
明白了文件存储之后,再看一次发布要经历什么样的流程。SimpleBlog 在你启动服务之后会开启文件监听机制,一旦检测到 content 目录下的文件发生变化(新增、修改、删除),就会自动触发重新构建。构建过程大致是三步:读取 Markdown 文件并解析正文里的 Markdown 语法;读取文件顶部的元信息,也就是 front matter;最后把正文和元信息注入到对应的模板里,渲染成 HTML 页面。
这三步里最容易忽略的是第二步。很多人以为发布就是"把 Markdown 文件放进去",其实 SimpleBlog 决定"这篇文章要不要显示、显示在哪个列表、用什么标题"都是靠 front matter 里的字段来做判断的。文件放得再对,front matter 写错了,页面照样出不来或者显示得不正常。
这个"监听—解析—渲染"的机制也带来一个操作习惯上的转变:用 SimpleBlog 不需要手动"上传文章"或者点一个后台的"发布"按钮。你做的所有操作最终都会落回"文件系统发生了什么变化"这件事上。本地写作时可以直接预览,服务器部署后也可以把 content 目录交给 Git 去管理,每次提交就是一次发布。理解了这条链路,后面所有操作都不难理解。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 文章写作规范与元信息配置:一篇文章的灵魂在前置数据
2.1 文件命名、存放位置与 Markdown 写作约定
先说文件命名。SimpleBlog 解析文件名时会提取出 slug(即文件名去掉日期和扩展名之后的那部分),这个 slug 直接决定文章访问 URL。比如 2024-06-10-simpleblog-2-publish.md 对应的访问路径通常就是 /posts/simpleblog-2-publish/。我踩过的一个坑是刚开始把中文直接写在文件名里,结果生成的 URL 是一长串百分号编码,又丑又不好记。后来我统一成英文小写加连字符的 slug,标题里的中文照样写在 front matter 的 title 字段里,页面展示完全不受影响。
关于存放位置有一个建议:不要自己随手在 posts 下创建子目录来"分类",比如 posts/tech/、`posts/life
