Updated!
花了整整一晚上的功夫,把2019年购买VPS之后装的Halo 1.4版成功的升级到了最新的Halo 2.18版,升级之后除了主题和插件更加方便,能兼容后续的升级以外,最重要的就是可以导入WordPress的数据,于是把旧博客的数据全部导了进来,之后发现分类和新博客的分类不同,花了点时间用手工调整完了所有文章的分类,调整了页面和链接,最新的博客呈现在大家面前了。
升级记录
记录一下升级的过程,将来万一有问题还可以回来查查。
1.4 升级至 1.6 版本
查了一下官网从 Halo 1.x 迁移的指南,发现需要迁移到2.x版本,必须先升级到1.5/1.6版本。看来我算是Halo的老用户了,在Halo还没有导出数据的功能时候就用上了。
从1.4升级到1.6版本不需要任何配置上的改变,只需要把原来启动的服务文件中的jar包换成1.6的jar包就可以了,其他数据库链接都不需要动。
成功的升级到1.6之后,我就备份了全部数据然后放在百度网盘里了,备份出来的一个是JSON文件,一个是60多兆的zip文件,未来导入到2.x中的是这个JSON文件。
1.6 升级至 2.18 版
通读了一下文档,最终还是准备采用使用 JAR 文件部署这种方式。搜索了一番,发现有如下几个步骤:
- 先把openjdk升级到17版
- 弄好配置文件,迁移好附件数据
- 用java直接启动jar包来试试
- 配置好服务重新运行
安装 openjdk 17 版
这个过程还比较麻烦,没有yum的包可以直接安装。
需要先手动使用命令查找已经安装的包:
[root@CentOS7-1 ~]``# rpm -qa|grep java
java-1.8.0-openjdk-devel-1.8.0.282.b08-1.el7_9.x86_64
javapackages-tools-3.4.1-11.el7.noarch
java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64
java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64
tzdata-java-2021a-1.el7.noarch
java-1.7.0-openjdk-headless-1.7.0.261-2.6.22.2.el7_8.x86_64
python-javapackages-3.4.1-11.el7.noarch
java-1.8.0-openjdk-headless-1.8.0.282.b08-1.el7_9.x86_64
然后逐个删除带有openjdk字样的包:
[root@CentOS7-1 ~]# rpm -e --nodeps java-1.8.0-openjdk-devel-1.8.0.282.b08-1.el7_9.x86_64
[root@CentOS7-1 ~]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64
[root@CentOS7-1 ~]# rpm -e --nodeps java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64
[root@CentOS7-1 ~]# rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.261-2.6.22.2.el7_8.x86_64
[root@CentOS7-1 ~]# rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.282.b08-1.el7_9.x86_64
删除之后下载openjdk的包,解压放到自己想放的目录里,然后/etc/profile/里配置环境变量就可以了:
export JAVA_HOME=/root/openjdk/jdk-17.0.2
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
之后运行java -version
能正常显示出版本就说明可以了。
更新配置文件和迁移附件数据
根据文档的介绍,Halo 2.x 的工作目录变成了 /.halo2,Halo 1.x的附件数据,需要从 /.halo/upload 目录中把其中所有内容移动到 /.halo2/attachments/migrate-from-1.x 目录中,如果没有的话要自己创建。我就把附件都移动过去了。
之后是更新/.halo2里边的 application.yaml 文件,用来配置端口号,数据库和迁移目录,我的配置如下:
server:
# 运行端口
port: 8090
spring:
# 数据库配置,支持 MySQL、MariaDB、PostgreSQL、H2 Database,具体配置方式可以参考下面的数据库配置
r2dbc:
url: r2dbc:pool:mysql://127.0.0.1:3306/halodb2
username: root
password: *********
sql:
init:
mode: always
# 需要配合 r2dbc 的配置进行改动
platform: mysql
halo:
caches:
page:
# 是否禁用页面缓存
disabled: true
# 工作目录位置
work-dir: ${user.home}/.halo2
# 外部访问地址
external-url: http://localhost:8090
# 附件映射配置,通常用于迁移场景
attachment:
resource-mappings:
- pathPattern: /upload/**
locations:
- migrate-from-1.x
这里要注意的是,数据库的名称不能使用 Halo 1.x 的数据库,因为两者结构不同,而且还不会自动建库,需要先去创建。于是在命令行的MySQL界面里我创建了一个新库 Halodb2,然后在配置文件里指定好,1.x的配置还有一串后缀,我都给删除了,发现不删除有的时候连接不上,就会去启用H2数据库,按官方的说法不够稳定。
直接先行启动
配置好之后,就可以采用官网的启动命令来直接启动:
java -jar halo-2.18.0.jar --spring.config.additional-location=optional:file:$HOME/.halo2/
我这里一开始失败了几次,后来知道需要先把原来的Halo 1.4服务关了才能稳定的连接数据库。之后就启动成功了,通过ip和端口直接访问,初始化了一下,导入了原来的数据,博客正常运行了。到这里我觉得升级应该没什么问题了。
配置服务
和 1.x 一样,配置成服务运行才是最好的。
于是按照官网编辑了 /etc/systemd/system/halo.service,将其中的东西替换掉,然后启动服务。只要端口不变的话,nginx也不用做任何变动。
解决问题
打开 conyli.cc,进去了。但是。。。为什么还让我初始化呢,刚才不应该以及初始化过了吗。初始化过后进到博客的设置页面,发现数据库竟然是H2数据库,不是MySQL。
我百思不得其解,最后想到可能还是 application.yaml 中MySQL连接时候的那串后缀,以及服务配置文件里的目录是不是写死才行。
最后发现halo.service一开始忘记写了一个[Unit],然后把工作目录写成固定的路径,文件内容如下:
[Unit]
Description=Halo Service
Documentation=https://docs.halo.run
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/root/openjdk/jdk-17.0.2/bin/java -server -Xms256m -Xmx256m -jar /root/halo-2.18.0.jar --spring.config.additional-location=optional:file:/root/.halo2/
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandOutput=syslog
StandError=inherit
[Install]
WantedBy=multi-user.target
再次运行,终于成功了,后台概览页面里显示了数据库为MySQL数据库,彻底配置好了。
其实后来想想,也完全可以用Postgresql的,只不过这样就得再重复一次,而且现在FMS也不太运行了,感觉Postgresql数据库可以用来做点别的事情了。
后续的折腾
刚升级完还只是开始,2.x那么多插件和主题得好好用一下。还有最关键的,可以导入WordPress数据!
主题和插件的选择
主题试来试去选择了Theme-Stack,安装的时候感受到了2.x的方便,直接在web页面输入自己的网址就可以后台直接下载。
插件除了必须要装的迁移助手,还装了链接管理、图库管理、瞬间(等于原来的日志,用于快速发布)、StakcEdit、搜索组件、评论组件、代码高亮,基本功能都配齐了。
导入WordPress数据
其实我在上边用Java直接启动之后,装完迁移助手到了迁移页面,才发现可以导入WordPress数据,说实话我如果知道有这个功能,应该不会拖到今天才把Halo升级到2.x版本。
接下来就是最激动人心的时刻,旧博客的全部数据都要回来啦。经过几分钟的等待,果然博客的总文章变成了600出头,原来的文章都回来了。
当然,事情没那么简单,由于新旧博客设置的分类不同,其实大部分时间都花在手工调整分类上,还有些文章的别名太长,要重新生成,大概前后花了一个半小时,终于把这几百篇文章调整完毕。
后记:2024年8月26日,调整了数据库,通过备份的方式,现在把数据库转移到了Postgresql上,方便多了。原来的MySQL可以不用了,而且感觉加载速度还变快了。