[更新公告]轻墨 v2.2 → v2.7.0 更新总结:从“能用”到“好用”怎么样

轻墨 v2.2 → v2.7.0 更新总结:从“能用”到“好用”

好久没认真写更新公告了。上次系统性的介绍还停在 v2.1,后来轻墨陆续攒了不少东西:评论提醒、反垃圾、SEO、在线更新、内置 B站表情、图片灯箱,还有免刷新实时评论。

最近又把安装、登录和数据保存重新梳理了一遍。这篇一次性补上,从 v2.2 讲到现在的 v2.7.0

v2.2:在线更新来了,评论开始“认识”你

在线更新:后台「系统更新」可以检查 GitHub 最新提交,下载并覆盖程序文件,自动跳过 data/ 和上传目录;也支持自定义 ZIP 直链。更新终于不用每次手工搬文件了。

这一版还引入了版本常量 QM_VERSION,方便显示和维护系统版本。

评论归属地插件也来了:记录评论 IP,在线查询归属地并进行本地缓存,在评论旁展示地区等信息。

为了让这类功能更容易扩展,核心新增了两个评论钩子:qm_comment_data 负责写入前过滤,qm_comment_meta 负责渲染时补充信息。归属地、反垃圾等插件就通过这些入口接进来。

v2.3:评论提醒、反垃圾和 SEO

这一阶段主要围绕评论体验和站点功能做补充:

  • 邮箱必填与访客记忆:提交评论需要填写昵称、邮箱和内容,邮箱用于通知;浏览器会记住昵称、邮箱和主页,下次不用重新输入。
  • @提及与回复提醒:被提到或收到回复时,可以通过邮件接收提醒。
  • 反垃圾评论插件:支持提交间隔、IP 限频、链接数量限制,以及关键词、邮箱和昵称黑名单,拦截时会说明原因。
  • SEO 插件:补充 canonical、Open Graph、Twitter Card 和文章 JSON-LD,并支持生成 sitemap.xml
  • RSS 增强与 Atom 订阅:补充全文、作者、分类、标签和更新时间,增加 Atom 订阅入口。
  • 页脚自定义:站点设置支持填写 HTML,备案链接、版权声明和统计代码都可以放进去。
  • 后台侧边栏布局:左侧菜单、当前页面高亮,窄屏时调整布局。
  • 按日归档与侧栏公告:可以查看某一天发布的文章,公告支持设置标题和显示位置。

这期间也修了在线更新的下载地址、临时目录和错误提示等问题,出错时能更清楚地知道卡在哪里。

v2.4:补一些细节和“人情味”

邮件失败原因更明确了:连接失败、登录失败、服务器拒绝,或者 PHP mail() 不可用,会给出具体提示,测试邮件也有明确结果。

友链支持分类和图标,页面按分类展示,排序可以选择按名称或每次刷新随机。

评论增加头像,通过邮箱哈希生成 Cravatar / Gravatar 地址。

楼中楼回复取消固定层数限制,子回复默认折叠,想看时再点「展开回复」。评论多的时候,页面也不会一下拉得太长。

v2.5:表情自由,图片也能放大看

这一版主要折腾评论区。

内置了 194 枚 B站小黄脸表情,图片随系统发布,表情面板新增「B站」分组,也可以直接输入 :doge::huaji: 等表情码。

表情面板改成顶部分类 Tab,颜文字、Emoji、B站表情分组展示,不再横向铺一大排。

评论支持 Markdown:加粗、链接、行内代码和图片都能用。评论图片限制显示宽度,正文和评论中的图片可以点击进入灯箱,支持左右切换、Esc 关闭。

登录页也换了新样式,评论框增加随机占位提示,每次聚焦换一句俏皮话。

后续的小版本继续补细节:修复长串颜文字和图片混排撑破页面的问题,为样式表加上版本号,减少浏览器旧缓存带来的显示异常。

还修了一个很烦的情况:评论没保存成功,却收到了通知邮件。写入失败后不再假装成功,也不再发送这类“幽灵邮件”。

v2.6.0:不用刷新,也能接上话

这一版加入了 AJAX 自动刷新

  • 文章页每隔约 12秒检查评论,有变化时更新评论区和数量。
  • 已经展开的回复层级会尽量保留,不用重新点开。
  • 首页和归档列表每隔约 45秒检查文章变化。
  • 页面切到后台标签时暂停轮询,减少无用请求。
  • 回复按钮改为事件委托,新刷出来的评论也能直接回复。

虽然还不是即时通信,但看文章、聊评论时,终于不用一直按刷新了。

v2.7.0:把安装和数据保存重新捋一遍

前面加了不少功能,这一版主要补基础,也处理几个实际使用中会遇到的问题。

安装有正式界面了

取消安装时自动创建的 admin/admin,改成自行设置管理员用户名和密码

安装表单、错误提示、安装成功页和已安装提示页都有了完整样式,也照顾了手机布局。

新建和修改密码统一为至少6个字符,提示也换成正常人能看懂的话。之前那个“12至72字节”,确实太像写给程序看的了。

安装流程还调整了完成顺序:初始数据全部保存成功后,才写入配置文件,标记安装完成。

第一篇文章,Hello world!

新安装的博客会生成一篇 Hello world!,介绍 Qingmo 和基本使用方式。

第一条评论来自 Qingmo:

感谢使用 Qingmo,愿每一笔墨都轻而不浮,重而不滞。好好书写吧。 —— Qingmo 团队

已有站点的文章和评论不会因此被替换。这是送给新博客的一句开场白。

数据保存更稳一点

轻墨用文件保存数据,部署简单,但并发读写也得认真处理。

这次加入完整请求锁,保护读取、修改和保存,避免多个请求拿着旧数据互相覆盖。文件先写入临时文件,完整写入后再替换目标。

保存失败会直接报错,不再出现“提示成功,实际没存进去”的情况。

本地进行了 12 个独立 PHP 进程并发写入测试,文章 ID 没有重复,评论没有丢失。

这版的做法也有取舍:为了数据一致,所有写入都会经过同一把存储锁排队——如果某个请求特别慢(比如写盘变慢、或正在做解压覆盖类的大操作),后面的写入就得等它一会儿。备份依然要做,目前没有内置一键备份功能。

登录、更新和邮件补上检查

同一个 IP 在 15 分钟内连续登录失败满 5 次,会被临时挡下并提示稍后再试。修改密码后,其他设备上旧的登录会话会在下次访问时失效。

SMTP 邮件与在线更新连接都开启证书校验,更新地址只接受 HTTPS。更新包会逐项检查:HTTP 状态与最小体积、zip 内的路径(防目录穿越)、解压总体积与文件数上限、是否为单一顶层目录,并确认包含 index.phpincludes/functions.php 核心文件;覆盖前逐文件备份,写入失败会尝试自动恢复原文件。

这部分还没有做到终点:更新包签名尚未实现,断电或进程被强制终止时的中途状态没有自动恢复保证——所以每次更新前,还是手动把 data/ 备份一份更稳妥。

几个容易忽略的小坑

  • 编辑文章后,置顶状态和插件扩展字段会保留
  • 待审核评论不再提前向访客发邮件,首次审核通过后再发送提醒。
  • 评论审核后重新统计数量。
  • 评论增加长度、主页协议和回复对象校验。
  • 自动刷新遇到网络失败或页面隐藏后,可以继续后续轮询,不会一直卡住。

少一个重复插件

「页脚备案信息」插件移除了。

站点设置已经有页脚自定义,而且支持 HTML,备案链接和版权声明统一放在那里就好。

旧版正在使用这个插件的朋友,先把文字迁移过去,再停用插件。覆盖升级不会自动删除旧插件文件。

现在的轻墨,有些什么?

写文章可以用 Markdown 或可视化编辑器,主题和插件可以按自己的习惯选择。

评论区有头像、Markdown、内置表情、折叠回复和自动刷新,图片可以点击放大;需要的话,还能开启归属地、反垃圾和邮件提醒。

站点方面有友链分类、全文订阅、SEO 插件、在线更新和页脚自定义。功能慢慢补,但还是想保留轻量、简单的感觉。

升级前记得这几件事

先备份,尤其是 data/assets/uploads/。当前在线更新会跳过这两个目录,手动覆盖程序文件时也要保留它们。

旧账号和密码继续有效,不需要重新安装。升级到 v2.7.0 后需要重新登录一次;如果还在用默认密码,顺便改掉吧。

当前版本:v2.7.0。完整更新日志、安装说明和主题插件开发说明都在 GitHub 仓库

攒了这么久,总算把公告补上了。

好好书写吧,留言区见~

标签: Qingmo, 更新