由于Typecho已经年久失修…基本上已经属于好多年都没有实质性更新的状态(上一个Release在Jun 6, 2023),而且平时我blog的习惯是先在typecho写好,再粘贴到typecho后台发布(没错我现在就在Typecho中写下这篇文章),多少有点别扭——再加上最近折腾心四起啊!于是就下定决心把这个迁移做了吧!

其实博客当初(18年左右)是有尝试使用过一阵子的hexo的…不过当时对Markdown认识还不多,更喜欢在typecho的编辑器里写写写,所以就选择了typecho,7年过去了,除了用的主题换了之外,对typecho更新毫无感知….

那就开始吧!

首先我们需要把博客的文章从Typecho中导出来,值得庆幸的是,Typecho存储文章也是以md格式存在数据库的,所以给迁移大大降低了难度,我使用的是TypechoToHexo这个工具。

首先将脚本Clone到运行Typecho的主机/或者任意一个可以连接到你的数据库,且安装了Python的地方,然后安装一些这个脚本所需要的依赖

pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/simple #如果你的服务器在国内,可能需要使用国内镜像源加速pip下载
pip3 install pymysql==0.9.3 torndb arrow

然后编辑TypechoToHexo.py的第65行,将数据库连接信息改成自己的

db = torndb.Connection(host="localhost", database="****", user="***", password="***")

修改完成后直接执行脚本!然后你就在./data中得到了一份你的博客导出。脚本会将Typecho中的文章转换为Markdown文件存放在这个data目录中。

接下来来安装一下Hexo,你可以把它安装在本地Windows,然后通过hexo deploy->push到server上(这种方式需要在Hexo的 _config.yml 文件中配置 deploy 部分,例如使用 hexo-deployer-git 插件,具体可以参考Hexo官方部署文档),也可以在服务器安装,用nodemon来监控文件变化自动部署(但是这种办法可能要起多一个服务)

nodemon --watch source/ --watch themes/ --ext md,yml,njk,swig,ejs,css,js,styl,less,scss --exec "hexo generate"

或者手动执行hexo deploy,将nginx root指向public目录。

我选的是最后一个。

Linux以openEuler/Centos为例,我们需要先安装nodejs和git,然后通过npm安装hexo-cli。

openEuler较老的仓库(22.03-LTS-SP4)里的nodejs还停留在12…于是趁机把系统也升级了一下!升级到了25.03。

yum install nodejs git -y
npm config set registry http://mirrors.cloud.tencent.com/npm/  #设置国内源
npm install -g hexo-cli
chmod u+x /usr/local/bin/hexo

创建一个用于存放hexo文件的地方

mkdir /opt/hexo
cd /opt/hexo
hexo init #初始化hexo
cp -r ~/data/* /opt/hexo/source/_posts/ #将前面导出的数据(data目录下的.md文件)复制到source/_posts/文件夹
hexo clean && hexo server #运行临时服务器,确认文章有没有正常导入。server

至此,执行deploy,hexo的前端页面就生成好了,默认会生成在./public目录下,我们只需要配置好这个目录的权限,将原有typecho的nginx root指向这里就好

hexo deploy
chown nginx:nginx ./public
chmod g+s ./public -R

至此,typecho->hexo的迁移就大致完成了,再调整一下主题 换成自己想要的样子就好了—— 你可以在Hexo的 _config.yml 文件中修改站点的基本信息(如标题、作者、URL等),并通过下载和配置主题来美化博客。