关于 Qingmo(轻墨)

关于 Qingmo(轻墨)

一个“数据就是文件”的博客系统:不用数据库、不用框架,解压即用。目前版本 v2.1.1,MIT 协议开源。

它是什么

Qingmo(中文名:轻墨)是一套纯文件博客系统。你写的每篇文章、每一条评论、站点配置,都只是 data/ 目录下的一个 PHP 数组文件;页面渲染由一个手写的、没有依赖的 PHP 运行时完成。

听起来朴素,但这正是它的卖点:

  • 没有数据库要维护,搬家 = 拷贝文件夹;
  • 没有框架升级地狱,一个入口 + 几十个文件,读得完、改得动;
  • 数据天然可备份data/ 里全是文本文件,放进 git 就是版本控制;
  • 任意支持 PHP 的主机都能跑,连老掉牙的虚拟主机也不例外。

它适合把写作当重点、不想被后台和插件生态绑架的人——也适合想看看“一个现代博客系统是怎么用原生 PHP 一点点搭起来的”的开发者。

一页看懂怎么用

  1. 把源码解压上传到网站目录(PHP 8.0+,无需数据库);
  2. 打开首页 → 自动跳转安装页,点一下完成;
  3. 进入 admin/ 写第一篇文章。默认账号 admin,密码 admin,装完记得改。

就这么简单。写作、分类、标签、搜索、归档、评论、RSS,全部开箱即用。

写到 v2.1,它都有什么

写作与内容

  • 三模式文章编辑器:Markdown(实时预览)/ 可视化所见即所得 / HTML 源码,还能切模式;
  • 图片拖拽 / 粘贴 / 点选上传,自动落入 assets/uploads/,仅管理员可用;
  • 分类、标签、搜索、按月归档、分页、文章摘要,阅读/评论计数自动统计;
  • 文章页脚可自定义:标题、链接、作者、使用协议,后台填一次全站生效。

评论这套“社区味”

  • 嵌套回复(楼中楼,最多三层)、表情一键插入;
  • 评论里 @昵称 会高亮成锚点,点一下跳到对方那条评论;
  • 新评论与 @提及都可以发邮件提醒,底层是我们自己写的小型 SMTP 客户端(SSL/STARTTLS 都支持),发信失败有明确提示。

外观与扩展

  • 文件夹式主题:丢一个文件夹进 themes/ 就有新皮肤。内置四款:default(复古经典)、paper(简约淡雅)、modern(轻现代卡片,带深色模式一键切换)、sakura(樱笺,粉彩纸感);
  • 插件机制:plugins/ 下一个文件夹 = 一个插件,支持动作钩子 + 过滤器钩子 + 自带后台设置页。内置四个活教材:页脚备案、文章版权尾巴、侧栏公告、文章置顶;
  • 友链系统:后台增删改,前台卡片墙 + 侧栏小部件。

工程与安全

  • 请求内数据缓存,同一页面反复读的配置/分类/评论文件不再重复解析;
  • CSRF 保护、登录后重置会话防固定、数据目录默认禁止外部访问、上传文件类型白名单 + 真实图片校验;
  • 无障碍依赖极少:自带 mbstring 兼容层,禁了 mbstring 也能跑。

关于“轻”的一些坚持

很多博客系统在“功能多”和“用起来爽”之间选择了前者,于是你得到一整套后台、几十个插件、半张网页的编辑器工具栏。

轻墨的取舍是反过来的:核心只做写作与阅读的必需品,把扩展权交给主题和插件。想让博客长得像 2000 年代的个人主页?一个 style.css 的事。想要评论区百花齐放?写个插件挂钩子上。数据库、消息队列、构建工具链……这些和“一个人安静写字”关系不大的东西,都不在它的菜单里。

当然,“纯文件”也不是没有代价:它天然单机、单作者倾向,评论/计数这类写入不做数据库级并发保障,只适合中小流量。这是定位,不是缺陷——它本来就不是 WordPress。

从零长到现在

  • v1:纯文件骨架,文章/分类/评论/搜索/RSS,复古 UI;
  • v2.0:全新界面、深色模式、Markdown/可视化编辑器、图片上传、评论重构(嵌套回复 / 表情 / @提及 / 邮件通知)、请求内缓存、本地主题插件市场、友链与文章页脚;
  • v2.1:插件后台设置页(页脚备案、侧栏公告可填写)、文章置顶插件;
  • v2.1.1:PHP 8.2 兼容性修复(消除 SMTP 动态属性弃用警告)。

想动手?

主题和插件怎么自己写,本站有专门的两篇教程:

  • 《从零写一个轻墨主题》
  • 《轻墨插件开发指南》

源码开源在 GitHub:https://github.com/muyi3919/Qingmo(MIT)。欢迎 fork、提 issue、或把它拆开看看——几十个 PHP 文件,全都读得完。

标签: Qingmo, 关于, 项目