背景
时隔多年,终于下定决心把博客从老旧的 lnmp + typecho 迁移到更现代的 docker + halo 方案了。
原博客中文章、回复、附件的迁移一直是之前比较苦恼的问题,halo官方提供的插件并不好用,很久没有更新了,而且不能迁移附件(本来想手动搞,结果我用的时候还报错了)
今天无意中发现了一个大佬的项目:typecho_to_halo
主要是通过 使用gorm获取typecho数据库中的原始数据,通过openapi接口创建对应的halo记录。
看描述感觉非常靠谱,于是下载尝试了一下,中间遇到一些小问题,但最终还是顺利的迁移成功了,现在把需要注意的点分享出来。
基本情况
为了能丝滑迁移,避免原博客长期404之类的问题,我搞了个新的域名做中转
原域名: lzskyline.com (typecho)
临时新域名: halo.lzskyline.com (halo)
操作步骤
直接下载typecho_to_halo,按照readme完成配置运行迁移就行,这部分没什么坑。
迁移后的文章保留了发布时间、评论的引用关系也很完整,图片也能正常加载,不过在这里我发现了两个问题:
文章里面的图片地址使用的还是原域名的URL(而非halo本身的图片附件地址)
我手动检查了halo后台的附件内容,发现上传的图片全部都是原域名首页的源码(文件名都是lzskyline.com),而非真实的附件图片。
我猜测,可能跟我的typecho配置有关,我在typecho中设置的帖子图片链接是绝对路径而非相对路径。
我的解决方案:
去typecho服务器上把upload文件夹完整复制到halo attachment/upload目录下,随手改名为tc
在halo的mysql表中执行:
UPDATE extensions SET data = REPLACE(data, 'http[s]://域名地址/usr/uploads/', '/upload/tc/') WHERE name LIKE '/registry/content.halo.run/snapshots/%';
注意执行前先在宿主机上备份原表:docker exec -i halo-db mysql -u root -p halo_替换为实际表名 < extensions_backup.sql
最后,非常感谢该工具的作者,丝滑迁移使我心情愉悦。