如何是用PageCMS来管理FireFly博客

1830 字
9 分钟
如何是用PageCMS来管理FireFly博客

给 Firefly 博客加上 Web 管理后台:PageCMS 配置实录#

起因:静态博客的”写作体验”问题#

Firefly 搭博客已经有一段时间了,这套基于 Astro 和 Fuwari 二开的主题颜值真的没话说。但静态博客的问题一直在困扰我:

  • 想写篇文章,得打开电脑 → 拉仓库 → 新建 md → 手写 frontmatter → 提交;
  • frontmatter 字段一多(publishedtagscategoryimage……),手写容易出错;
  • 手机上突然有了灵感?基本没戏。

所以一直在找一款”不给架构添负担”的管理方案。直到遇到了 Pages CMS

Pages CMS 是什么#

Pages CMS 是一个开源的、面向 GitHub 仓库的内容管理系统,它的核心理念非常极客:

你的仓库就是数据库,配置文件就是唯一的配置。

它不依赖任何第三方服务存数据,所有内容最终都以 Markdown 文件的形式存在于你的仓库里。整个系统的核心就是仓库根目录下的一个 .pages.yml 文件。它按仓库、按分支读取这个配置,然后生成对应的管理界面。

对静态博客来说,这几乎是完美方案:

  • ✅ 不改博客架构,不动一行 Firefly 的代码;
  • ✅ 编辑保存就是 git commit,天然有版本记录;
  • ✅ 部署流程完全不变(Cloudflare Pages / Vercel 监听仓库自动构建);
  • ✅ 支持自托管,也可以直接用官方托管版。

准备工作#

开始之前,先确认你的 Firefly 仓库结构(默认安装的话应该长这样):

├── public/
│ └── assets/ # 站点根静态资源,图片放这里
└── src/
├── content/
│ ├── posts/ # 文章(md/mdx,支持子目录)
│ ├── dynamic/ # 动态/碎碎念,文件名如 2026-07-15-010756.md
│ └── spec/ # 独立页面(about、friends、guestbook)
└── config/ # 主题配置(TypeScript)

另外需要准备一个 GitHub 账号,博客仓库在上面就行。

第一步:安装 GitHub App#

  1. 打开 app.pagescms.org,用 GitHub 登录;
  2. 按引导安装 Pages CMS 的 GitHub App,只授权博客这一个仓库就够了,权限最小化比较安心;
  3. 安装完成后,在面板里选择你的仓库和要管理的分支(一般就是 mastermain)。

到这里还没有任何可用内容——因为你还没告诉它内容在哪。接下来就是重头戏。

第二步:编写 .pages.yml#

在仓库根目录新建 .pages.yml。整个文件由几部分组成:media(媒体)、content(内容定义)、可选的 settingsactions

下面是我按 Firefly 实际结构写好的完整配置,可以直接抄:

media:
input: public/assets/images # CMS 上传的图片存到仓库这个目录
output: /assets/images # 写入文章中的 URL 前缀
content:
# ============ 内容 ============
- name: blog
label: 内容
type: group
items:
# ---- 文章 ----
- name: posts
label: 文章
type: collection
path: src/content/posts
subfolders: true # Firefly 允许子目录
view:
primary: title
sort: published
order: desc
filename:
template: "{primary}.md"
field: create # 新建时显示文件名输入框,方便改成英文 slug
fields:
- name: title
type: string
required: true
- name: published
type: date
required: true
options:
format: yyyy-MM-dd
- name: updated
type: date
options:
format: yyyy-MM-dd
- name: description
type: text
label: 摘要
- name: image
type: image
label: 封面图
- name: tags
type: string
list: true
- name: category
type: string
- name: draft
type: boolean
label: 草稿
- name: pinned
type: boolean
label: 置顶
- name: slug
type: string
pattern: "^[a-z0-9-]*$"
- name: password
type: string
label: 加密密码
- name: passwordHint
type: string
label: 密码提示
- name: body
type: rich-text
label: 正文
# ---- 动态 ----
- name: dynamic
label: 动态
type: collection
path: src/content/dynamic
filename: "{year}-{month}-{day}-{hour}{minute}{second}.md"
view:
sort: published
order: desc
fields:
- name: published
type: date
required: true
options:
time: true
format: yyyy-MM-dd HH:mm:ss
- name: body
type: rich-text
label: 内容
# ---- 独立页面 ----
- name: spec
label: 独立页面
type: collection
path: src/content/spec
exclude: ["friends.mdx"] # 友链页是 MDX,不适合结构化编辑
fields:
- name: title
type: string
- name: description
type: string
- name: body
type: rich-text

提交这个文件后,回到 Pages CMS 面板刷新,左侧就能看到”文章 / 动态 / 独立页面”三个栏目了。

关键配置逐条解释#

1. 媒体:media#

Firefly 的封面图支持三种写法:https:// 外链、/ 开头的 public 目录路径、相对 md 文件的本地路径。CMS 上传走的是第二种——图片存到 public/assets/images/,文章里写入 /assets/images/xxx.png,正好能被 Astro 识别。

⚠️ 注意:已有文章里 ./images/xxx.avif 这种相对路径引用不受影响,但那些图片不在 public/ 里,CMS 管理不到,这是正常的。

2. 文章集合:字段与 Firefly frontmatter 一一对应#

.md 文件默认按 yaml-frontmatter 格式解析,所以不用写 format。有个特殊字段 name: body,它自动对应 frontmatter 之后的正文部分,富文本编辑器的内容就写进去。

tags 用了 list: true,表示数组字段,对应 Firefly 的 tags: [前端, 开发] 写法。slug 加了正则 ^[a-z0-9-]*$,防止手滑输入大写和空格,毕竟它直接决定文章 URL。

3. 动态:文件名模板的巧思#

Firefly 的动态文件名格式是 2026-07-15-010756.md。Pages CMS 的文件名支持时间 token,一行就还原了这个规则:

filename: "{year}-{month}-{day}-{hour}{minute}{second}.md"

4. 独立页面:记得排除 MDX#

friends.mdx 里包含 JSX 代码,结构化编辑器搞不定它,用 exclude 排除掉就好。about、guestbook 这类纯 Markdown 页面可以正常编辑。

踩过的坑#

坑一:想管理 src/config/*.ts 主题配置。

Firefly 的站点设置是 TypeScript 代码,不是数据文件。Pages CMS 确实可以用 format: code 把它作为纯代码文件打开:

- name: site-config
label: 站点设置
type: file
path: src/config/siteConfig.ts
format: code

但改错一个逗号构建就挂了,我最后还是把这段删了。主题配置还是在 IDE 里改比较稳。

坑二:中文标题直接当文件名。

filename 里的 {primary} 默认取标题,中文标题会生成中文文件名。所以我给文章集合用了:

filename:
template: "{primary}.md"
field: create # 新建时显示文件名输入框

这样新建文章时会弹出文件名输入框,手动填英文 slug 即可。

坑三:忘记提交到正确的分支。

.pages.yml 是按仓库和分支读取的。如果你的面板连的是 master,配置却提交到了别的分支,面板是认不出来的。

实际体验#

配置完成后的写作流程变成了:

  1. 打开 Pages CMS → 点”新建”;
  2. 填标题、日期、标签,正文在富文本编辑器里写,图片直接从媒体库选或上传;
  3. 点保存。

然后仓库里就多了一次 commit,部署流水线自动跑,几分钟后文章就上线了。手机上也能完成同样的操作——这就是我一直想要的。

而且因为所有变更都是 git commit,手滑删错了也能从历史记录里找回来,这种安全感是很多 SaaS 型 CMS 给不了的。

总结#

  • Pages CMS 通过一个 .pages.yml 文件就能给任意 GitHub 仓库套上管理界面,零侵入、数据完全自主;
  • 对 Firefly 这类 Fuwari 系 Astro 博客,文章、动态、独立页面都能被很好地管理;
  • 媒体建议统一走 public/ 目录;TypeScript 主题配置不建议交给 CMS;
  • 如果你也在用 Firefly,上面那份配置拿走改改就能用。

折腾的意义不就在于此嘛:花一个下午配置好工具,换来以后每一次写作的心流💗


参考链接:

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

如何是用PageCMS来管理FireFly博客
https://blog-as.kira.uno/posts/pagecms-to-firefly/fireflypagecms/
作者
森绫
发布于
2026-08-07
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
森绫
云深不知处,听雪落凡尘
公告
欢迎来到我的博客!这是一则示例公告。
分类
标签
最新动态
站点统计
文章
3
分类
2
标签
8
总字数
4,087
运行时长
0
最后活动
0 天前
站点信息
构建平台
Render
博客版本
Firefly v6.15.6
文章许可
CC BY-NC-SA 4.0