前言

以往来过小站的朋友可能注意到小站的样子有了一些变化,没错,经过一天的试运行,从昨天起(2023/06/24)咱又换博客哩,这话得从这月的 14 号说起,14 号那天准备传一篇新文章上去,结果是怎么都传不上去了

image-20230625135752183

之前的时候虽然也报错,但是是能传的,这没法忍了,加上之前本来就对目前的博客有一些不大满意的地方,于是踏上寻找新博客的旅途

先来找找上传文章失败的原因

在踏上旅途之前,还是想给 plumemo(BlogV2 的博客系统)一些机会的,毕竟已经用了将近一坤年两年半了(2021/02/12-2023/06/24),加上自己对它和它的主题 theme-react-sakura 的各种魔改,已经对它产生了深深的感情,之前还在校的时候,就曾经多次和 W 讨论过这个问题,也多次纠结过要不要换个博客这个问题,但是每次都因为对 plumemo 的感情太深而放弃

因为做了各种各样的魔改(前端、后端、运行环境),其实这个后端现在存在着非常多的问题,包括但不限于(能很快想起来的,实际上可谓非常之多,记得之前和 W 闲聊的时候他有说过我这个看着不错想试试,被我瞬间劝退了,乐)

  • 系统信息显示的是错的,里面的数据是固定的
  • 打开后台弹出的各种错误弹窗(不影响用)
  • 部分信息只能在前端配置,后端无法配置(菜单,站点信息……)
  • Markdown 部分语法解析异常(原生问题)
  • 不能上传图片到本地,只能传到图床
  • 文章 banner 图只能通过写 SQL 修改数据库来修改
  • 后台文章的预览和前端不同,结果只能发布了再看效果
  • 还有其它超多阴间问题!

虽然是有个各种各样的问题,不过在用着的这段时间倒是一点点全克服了,而且外面还挺好看的,里面再多问题别人也看不到(论软件工程之何为封装),加上为了能用舒服在这套东西上面的努力,可以说是痛并快乐着,plumemo 就像一只可爱的病娇娘一样陪伴着我度过了两年半的快乐写作时光,所以是真的不想换掉它,尝试找找不能上传文章的原因

先打开 F12 康康上传的时候发生了什么事情

{"success":0,"resultCode":"00001","message":"操作失败"}

在康康控制台输出了什么

2app.278eb529.js:1 Uncaught (in promise) Error: 操作失败
at app.278eb529.js:1

根据以往的经验,八成又是 Markdown 解析问题导致不能正常入数据库了,以往面对这样的问题,采用了 发布版存档版 文章的策略,在 发布版 中,移除了一些不支持解析的 Markdown 语法,比如下面的一些(应该不止,但是能快速回想起来的是这些,比较后面的文章里面我在写作的时候就会避免使用这些 Markdown 语法)(又不是不能用.jpg)

`` => 会和背景一个颜色而看不到
------ => 无法解析,上传失败
~~1~~文本~~2~~ => 一行中连续的删除线有问题
剩下的暂时没想起来,反正不能写的语法不少

image-20230625143615615

存档版留待未来万一某一天换博客的时候用,而发布版用来给 plumemo 酱食用

经过排查(很费劲,后端什么输出都没有…… nohup.out 干干净净,除了启动之后的欢迎信息啥都没看到),发现还是 Markdown 的问题,但是这次问题比较严重,后端被锁定了一段时间,等待一段时间(一天)或者重启后端之后可以正常上传其它文章,但是我要传的这篇文章有不少华为 CLI 的内容,有很多终端的输出和 Markdown 语法(于是都没法知道是哪些 Markdown 语法要改了)

加上 plumemo 已经不维护了,很是无奈,虽然很不想换,但是这次,真的要和 plumemo 酱说再见了

那种事不要啊_mika

回顾 V1->V2 的选型和迁移过程

在开始选型之前,首先回顾一下 BlogV1 -> BlogV2 更换的原因,选型和迁移过程,希望对本次选型有一些帮助和参考

(BlogV1 采用了 WordPress + Sakura 主题的方案; BlogV2 采用了 plumemo + theme-react-sakura 的方案)

更换原因

  • 运行速度缓慢
  • 环境不稳定(升级 WordPress 后有时对 php 版本有升级要求,但是插件要求的版本并不一致,容易出问题)
  • Markdown 语法支持不佳
  • php 的洞很多
  • Sakura 主题当时停止更新,作者正在向 Sakura2 升级,推荐了 plumemo + theme-react-sakura 的方案(主要原因,主要是喜欢 Sakura 主题)

选型 plumemo 的原因

  • Java 后端,速度比 php 快且漏洞相对较少
  • theme-react-sakura 主题(主要原因)
  • markdown 语法支持
  • 有一键部署脚本,在当时能力范围内能搞定
  • 还算完善的文档

迁移过程

plumemo 提供了 WordPress 数据库迁移脚本,不过当时没有跑成功,于是手动复制粘贴做的迁移,多多少少有点问题,但是能用,能用就行

遇到困难摆大烂

迁移结果

所有文章顺利的迁了过去,但是链接与之前的不兼容,运行速度得到了有效改善,克服了各种小问题用起来还是很舒服的

对新博客的期待和要求

准备寻找新博客,先梳理一下自己的一些要求和期许

要求

  • 轻量。必须轻量,因为服务器现在跑的东西非常之多,虽然已经上了 4 块 SSD 做 ZFS 阵列,但是常常磁盘队列拉的很长(40+ VM,40+ Docker),以至于 plumemo 酱偶尔都会慢起来,所以新博客必须要轻量
  • 对 Markdown 的完整支持。这个应该不难,很多应该都支持
  • 主题要好看。Sakura 和 theme-react-sakura 都是非常好的主题,这方面可不能开倒车
  • MIT 或类 MIT 协议。方便进行二次开发(使用 plumemo 时获得了作者的完整魔改授权)
  • 原生的 darkmode 支持。plumemo 的 darkmode 还是我自己写的,不过稍稍有点问题
  • 动态背景支持。需要像 ハミダシクリエイティブ HP 的背景一样,也就是现在 BlogV2 的背景
  • 动态随机图支持。能够显示自己的随机图片,每次刷新改变
  • 图片压缩 webp 。提升访问速度
  • 所有资源部署在本地。不会因为上游库投毒、跑路、停止维护而无法访问(plumemo 有这个问题,后期部分 JavaScript 文件无法访问,还好当时保留了一份在本地而且早早的换上去了)
  • 文章能够加密。之前开 v6 里站的原因就是这个,plumemo 给提过一次这个需求,但是因为停止维护了所以并没有
  • 免费。这样不会像 W 一样被绑定,未来有更换的余地

期待

  • 希望是 Go 写的后端,这样能够方便自己魔改,而且速度快,或者是纯静态更好,速度应该更快
  • 希望脱离数据库使用,在未来某个时点方便公开文章原件,同时降低对磁盘 I/O 的需求
  • 独立可自建的评论功能,支持通知,免登录评论,与此同时要能够防止垃圾评论
  • 评论支持 markdown 语法,能有一些高级功能就更好了
  • 能放 live2d。ATRI 多可爱
  • 作者长期维护。这样有什么问题能修
  • 发布前能预览效果
  • 在服务端渲染(SSR)。theme-react-sakura 后来更新了一版支持 SSR 的版本,但是我这因为魔改太狠了没法换,SSR 对 SEO 支持很好,而且不会像现在搜索引擎难以收录,虽然是当自己的记事本来用的,但是要是能帮助到别人岂不更好
  • 文章链接和原先保持一致,能够实现平滑过渡,不需要去修改已经发放出去的链接
  • 支持 RSS 订阅。

选择 Hexo + Butterfly 并魔改

经过和 W 的讨论和一天的寻找和纠结,最终选择了 Hexo + Butterfly 魔改的方案,这套方案能够满足我的大部分需求和期待,只有部分功能需要做一点点二次开发工作

  • 纯静态方案,生成静态文件后部署,配合自己的 CI/CD 方案能够轻松自动部署,速度快

  • Markdown 完整支持,官方 Demo 效果很好

  • 主题不能说很惊艳(有个舟游的主题 https://github.com/Yue-plus/hexo-theme-arknights ,真的是打开瞬间就惊到我了,真的不错),但是已经非常不错,看了个别主题更好看但是不大适合我的风格,Butterfly 的界面在众多主题中可以说是相当之优秀

  • Apache License ,可以进行魔改

  • 原生的 darkmode 支持

  • 前端文件可以选择自建或 CDN 加速两种方案,自己先存了一份,CDN 故障时可随时切换回本地

  • 通过 Hexo 插件可实现加密

  • 免费

  • 纯静态博客的评论一直是个问题,Butterfly 支持使用 artalk 自建评论系统解决了这一问题

  • 作者长期维护,GitHub 源非常活跃

  • 可以本地预览效果

  • 纯静态不存在动态渲染的问题

  • 通过插件支持 RSS 订阅

需要自己做二次开发的内容

  • 支持随机图,但是会被写死,每次刷新不会改变,banner 只支持一张图片,需要自己写一个随机图 API 解决(采集器 + API),自己写的原因是考虑到可控和图片质量,同时改善了单页面随机到一张图片的问题(但是由于主题仍然可能在一个页面随机到一个请求 ID ,仍有撞车的可能性)
  • 动态背景:原生只支持固定三种,需要自己改改前端来实现动态背景和切换
  • 图片自动上传压缩 webp ,同样需要自己实现,选择了 Minio + 开发对象存储网关 + 开发对象存储采集&管理器 + 开发 Typora 插件解决
  • live2d 需要自己改前端来做
  • 文章默认链接不一致,通过修改永久链接并正确配置 Nginx 可以实现旧有链接访问
  • 实现 CI/CD 私有化自动部署( Gitea + Drone )

从这月 15 号到 23 号陆陆续续把这些都搞定了,中间家里事情挺多所以进度比较慢

话说我这用法是有点想把静态博客带点儿动态的特性,有点扭曲,可不大好找现成完美的解决方案,如果有类似需求的可以考虑一下这套方案,我认为改完之后用起来还是很舒服的

对于之前博客的一些打算

BlogV2 进行存档,不再更新,可以通过右侧的“前往旧版博客”或访问 https://plumemo.luckykeeper.site:44443/ 前往

v6blog(里站)存档,不再更新,或许某天会撤掉,因为文章加密问题现在解决了,BlogV3 仍然有 ipv6 的站点,不过并不推荐使用

BlogV1 没有存档和保存,停止访问