小东西
浮光 (The History) · …◁◁ ▷ ▷▷
原站音乐由外部服务提供,音源尚未迁移。

博客搬家:从 Typecho 到 Astro,把旧故事留下来

这个博客已经写了很多年。页面上的文章、零零散散的动态,以及评论里几句简单的交流,慢慢变成了生活的一部分。这次搬家,希望它们都能继续留下来。

原站用的是 Typecho 和 Handsome 主题,背后是 PHP、MySQL 和一台服务器。新版改成了 Astro、Markdown 和 Cloudflare:文章在构建时生成静态页面,评论、浏览次数和点赞仍然由服务端保存。

目前新版发布在 Cloudflare 测试站。正式域名还没有切换,所以两个站暂时会有差异。这篇文章先记下这次迁移,也给以后维护留个说明。

先留下原来的内容

迁移时,最先处理的是文章和旧链接。已有的 33 篇文章、9 个独立页面转换到了工程里,原来的 /archives/数字/ 和 .html 页面地址继续保留。分类、标签、归档、搜索和 RSS 会根据内容自动生成。

相册、文章图片、视频、字体和 Live2D 资源也一并保留。旧文章里的播放器写法,包括 vplayer,新版可以继续转换为视频播放器,不必为了搬家逐篇重写正文。

时光机里保留了 42 条历史动态。图片、时间、设备说明和点赞数据都尽量沿用原来的内容。看着那些几年前随手写下的话,才发现这个页面也存了不少回忆。

页面还是熟悉的样子

原版 Handsome 的三栏布局、红色顶栏和头像一直很顺眼,因此这次主要是沿着原来的样子调整。

手机菜单打开时,页面整体向右推开;头像和侧栏缩略图带着白色圆角外框,鼠标停在头像区域才旋转整个框;文章目录在滚动时保持可用,小屏幕上可以从侧边展开。文章底部的最后修改时间、转载说明和上一篇、下一篇入口也保留下来了。

页面之间加了过渡动画。站内导航会尽量保留音乐、看板娘和通用布局的状态,看板娘的首页入口也改成站内跳转。简介的逐字切换、离开和返回标签页时的标题提示、深色模式、灯箱和代码复制,这些小交互也重新接了起来。

有些地方还需要继续磨。以后会以现在的页面和反馈为基础调整,不再从旧数据库反复生成一遍。

评论也一起搬过来

文章可以复制,评论的关系却需要仔细处理:谁回复了谁、哪条属于哪篇文章、动态回复对应哪条动态,都不能只按时间堆在一起。

这次保留了 220 条历史记录,其中包含原来的待审核内容。确认的垃圾记录移到了可恢复的已删除分类,真实留言和回复关系继续保留。另有 9 条原待审核记录,暂时放进了“已隐藏”,只在后台查看,正文没有删除。

新评论使用 Cloudflare Worker 和 D1 保存。访客填过的昵称、邮箱和网站会在当前浏览器记住;站长登录也可以保持会话。普通访客提交后等待审核,站长登录后发表的评论直接通过。

私密评论沿用了原版的斜纹提示。正文只会返回给站长和有访问权限的评论双方,私密属性不会因为审核通过而消失。切换回复对象时会取消上一个回复,取消按钮也会把表单放回原位。

动态下面可以直接展开回复,分页样式与首页保持一致。点赞支持取消,重新打开页面后也会保留当前浏览器的状态。

以后直接写 Markdown

从现在开始,文章文件就是内容的来源。普通文章放在 src/content/posts/,用 VS Code 打开对应的 Markdown 修改;标题、日期、分类和封面写在文件顶部。

受密码保护的文章,密文也放在对应的 Markdown 里。通过本机加密编辑器输入密码后编辑,保存时重新加密。较早的密文如果只保存了 HTML,编辑器就从解密后的正文打开,保留为可编辑的 HTML 内容块,不需要再去旧 MySQL 找正文。

修改完,先停止本地预览,再运行:

npm run build
npm run check
npm test
npm run preview

本地确认后再部署。文章页面、搜索索引、分类和 RSS 都会随构建更新。评论与点赞则继续使用现用服务的数据,不会因为重新编译文章而清空。

旧程序留作参考

旧的 PHP 程序保留在工程里,用来查看以前的样式和实现。MySQL 备份也继续保留在本地,但后续编辑、构建、测试和评论初始化都不再读取它。

以后要恢复评论,就使用当前 D1 的备份;要恢复文章,就使用 Markdown 的版本记录。旧数据库属于迁移时的存档,再拿它覆盖新版,会把后来修改的文章和审核状态一起退回去。

博客程序、文章和公开资源会一起提交版本管理。密码、会话、数据库备份以及私密内容的明文留在公开源码之外。

搬家到这里算是有了一个新的起点。希望以后可以少折腾一点环境,多留下一些值得写的事。

最后修改:© 允许规范转载

0 条评论

    发表评论

    评论审核后显示,邮箱不会公开。