200字
typecho内容完整迁移halo方案
2026-02-04
2026-02-04

背景

时隔多年,终于下定决心把博客从老旧的 lnmp + typecho 迁移到更现代的 docker + halo 方案了。

原博客中文章、回复、附件的迁移一直是之前比较苦恼的问题,halo官方提供的插件并不好用,很久没有更新了,而且不能迁移附件(本来想手动搞,结果我用的时候还报错了)

今天无意中发现了一个大佬的项目:typecho_to_halo

主要是通过 使用gorm获取typecho数据库中的原始数据,通过openapi接口创建对应的halo记录。

看描述感觉非常靠谱,于是下载尝试了一下,中间遇到一些小问题,但最终还是顺利的迁移成功了,现在把需要注意的点分享出来。

基本情况

为了能丝滑迁移,避免原博客长期404之类的问题,我搞了个新的域名做中转

  • 原域名: lzskyline.com (typecho)

  • 临时新域名: halo.lzskyline.com (halo)

操作步骤

直接下载typecho_to_halo,按照readme完成配置运行迁移就行,这部分没什么坑。

迁移后的文章保留了发布时间、评论的引用关系也很完整,图片也能正常加载,不过在这里我发现了两个问题:

  1. 文章里面的图片地址使用的还是原域名的URL(而非halo本身的图片附件地址)

  2. 我手动检查了halo后台的附件内容,发现上传的图片全部都是原域名首页的源码(文件名都是lzskyline.com),而非真实的附件图片。

我猜测,可能跟我的typecho配置有关,我在typecho中设置的帖子图片链接是绝对路径而非相对路径。

我的解决方案:

  1. 去typecho服务器上把upload文件夹完整复制到halo attachment/upload目录下,随手改名为tc

  2. 在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

最后,非常感谢该工具的作者,丝滑迁移使我心情愉悦。

typecho内容完整迁移halo方案
作者
LzSkyline
发表于
2026-02-04
License
CC BY-NC-SA 4.0

评论