小站架构升级完成,说说对新博客的选型与思考
前言
以往来过小站的朋友可能注意到小站的样子有了一些变化,没错,经过一天的试运行,从昨天起(2023/06/24)咱又换博客哩,这话得从这月的 14 号说起,14 号那天准备传一篇新文章上去,结果是怎么都传不上去了
之前的时候虽然也报错,但是是能传的,这没法忍了,加上之前本来就对目前的博客有一些不大满意的地方,于是踏上寻找新博客的旅途
先来找找上传文章失败的原因
在踏上旅途之前,还是想给 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: 操作失败 |
根据以往的经验,八成又是 Markdown 解析问题导致不能正常入数据库了,以往面对这样的问题,采用了 发布版
和 存档版
文章的策略,在 发布版
中,移除了一些不支持解析的 Markdown 语法,比如下面的一些(应该不止,但是能快速回想起来的是这些,比较后面的文章里面我在写作的时候就会避免使用这些 Markdown 语法)(又不是不能用.jpg)
`` => 会和背景一个颜色而看不到 |
存档版留待未来万一某一天换博客的时候用,而发布版用来给 plumemo 酱食用
经过排查(很费劲,后端什么输出都没有…… nohup.out
干干净净,除了启动之后的欢迎信息啥都没看到),发现还是 Markdown 的问题,但是这次问题比较严重,后端被锁定了一段时间,等待一段时间(一天)或者重启后端之后可以正常上传其它文章,但是我要传的这篇文章有不少华为 CLI 的内容,有很多终端的输出和 Markdown 语法(于是都没法知道是哪些 Markdown 语法要改了)
加上 plumemo 已经不维护了,很是无奈,虽然很不想换,但是这次,真的要和 plumemo 酱说再见了
回顾 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 没有存档和保存,停止访问