曲水的博客

曲水的博客

从Halo1.x迁移到Halo2的流程记录

467
2023-02-17

前言

起因是为了建幸福工厂的服务器,不小心把原来一个服务器干爆了,而那个服务器之前又搭载了一个halo博客的服务,所以需要重新搭一次。考虑到那个服务器快要到期了,所以需要把两个halo博客迁移到一个服务器上,顺便做一下halo版本的升级,于是有了这一篇文章。大概要记录的是如何把一个1.x版本的halo博客升级成一个2.x版本,并且如何配置一个服务器上跑多个站点。

准备工作

  1. 在迁移之前,需要先将原本的1.x版本的halo博客进行备份,原来版本的halo提供了三种备份的方式,分别是整站备份,数据备份和生成markdown文件。这里推荐三种备份都用一次,其中数据备份和整站备份是必须要准备的。

  2. 准备一个服务器:一般运行一个Halo需要的内存是1GB,要跑两个站点的话相当于要2GB。这里选择的服务器是阿里云的1h2g的一台服务器。

  3. 准备好可以备案的域名,用于连接服务器。

配置流程

用于演示的服务器是百度云的2h8g的服务器,安装的系统是CentOS / 8 x86_64 (64bit)。

部署服务器

安装宝塔面板

宝塔指令参考地址:https://www.bt.cn/new/btcode.html

  1. 因为演示用的是CentOS的系统,所以直接复制CentOS的指令进行安装。代码如下:
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
  1. 等待安装过程,安装初期键入两次y确认安装内容即可

  2. 当看到以下的内容的时候,就说明已经安装成功了,记得保存一下输出的内容,后面登录宝塔面板的时候要用到

==========================
Congratulations! Installed successfully!
==========================
外网面板地址:https://106.12.171.156:25803/1612ddd6
内网面板地址:https://192.168.64.4:25803/1612ddd6
username:ubczgnxh
password:474e7374
If you cannot access the panel,
release the following panel port [25803] in the security group
若无法访问面板,请检查防火墙/安全组是否放行面板[25803]的端口
因已开启面板自签证书,访问面板会提示不匹配证书,请参考以下链接配置证书
==========================
  1. 打开上面给的外网面板地址,输入用户名和密码进行登录,如果面板打不开,检查以下服务器对应的端口是否已经开放。(例子里就需要开放服务器的25803端口)

  2. 进入宝塔面板并且绑定后,会弹出建议安装的套件,除了Nginx以外的套件全部取消。

安装Nginx和Docker

  1. 点击确定安装Nginx以后,就会自动弹出以下界面,说明Nginx正在安装,安装的时长比较久,需要稍微等一等。

  1. 安装完Nginx以后,在宝塔左侧的目录里找到【软件商店】,然后搜索Docker,点击右边的安装即可,都是免费的。

  2. 检查安装情况,分别查看nginx和Docker的版本号,输入:

docker version
  1. 如果返回如下安装结果,说明Docker安装成功:
Client: Docker Engine - Community
 Version:           23.0.1
 API version:       1.42
 Go version:        go1.19.5
 Git commit:        a5ee5b1
 Built:             Thu Feb  9 19:49:07 2023
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          23.0.1
  API version:      1.42 (minimum version 1.12)
  Go version:       go1.19.5
  Git commit:       bc3805a
  Built:            Thu Feb  9 19:46:47 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.18
  GitCommit:        2456e983eb9e37e47538f59ea18f2043c9a73640
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
  1. 输入 nginx -v ,如果得到以下结果,说明nginx安装成功:
nginx version: nginx/1.22.1
  1. 分别输入以下两个命令行,开启Docker服务并且设置开机启动:
systemctl start docker.service
systemctl enable docker.service

配置Docker镜像下载加速

  1. 如果使用的是阿里云的服务器,搜索“容器镜像加速”并且开通,进去容器镜像加速服务,点击“镜像工具”下面的“镜像加速器”右边就可以查看到加速的地址,将加速的地址复制(每一个人的地址都不一样),例如:
{
    "registry-mirrors":["https://f6wpk8m.mirror.aliyuns.com"]
}
  1. 如果使用的是百度云的服务器,加速地址都是一样的,如下:
{
    "registry-mirrors":["https://mirror.baidubce.com"]
}
  1. 如果使用的是其他服务商的服务器,加速地址可以自己找一下,不设置镜像下载加速也是可以的,直接跳转到下一步的部署容器环节。

  2. 输入命令,将上面的代码复制进去,然后ESC退出,敲:wq回车保存:

vim /etc/docker/daemon.json
  1. 配置完加速地址后,重新加载配置文件,并且重启Docker服务,敲以下命令:
systemctl daemon-reload
systemctl restart docker.service

部署容器

  1. 先拉取最新的Halo镜像,敲以下命令(其中2.2.0是版本,可以替换成最新的版本号):
docker pull halohub/halo:2.2.0
  1. 因为要部署两个站点,所以需要开两个容器,每个容器配置不同的文件地址和不同的端口号,敲如下的命令(其中有参数需要自行修改)
docker run \
  -it -d \
  --name halo-1 \
  -p 8090:8090 \
  -v ~/.halo2.1:/root/.halo2 \
  -e HALO_EXTERNAL_URL=https://www.test1.com/ \
  -e HALO_SECURITY_INITIALIZER_SUPERAMINUSER=admin \
  -e HALO_SECURITY_INITIALIZER_SUPERADMINPASSWORD=12345678 \
  halohub/halo:2.2.0

docker run \
  -it -d \
  --name halo-2 \
  -p 8080:8090 \
  -v ~/.halo2.2:/root/.halo2 \
  -e HALO_EXTERNAL_URL=https://www.test2.com/ \
  -e HALO_SECURITY_INITIALIZER_SUPERAMINUSER=admin \
  -e HALO_SECURITY_INITIALIZER_SUPERADMINPASSWORD=87654321 \
  halohub/halo:2.2.0
参数名参数含义备注
name容器的名字可以改成自己想要的
p端口名这里两个容器分别开在8080和8090端口,分别连接两个站点,只需要该前面的那个端口(主机端口即可),后面的8090是halo的默认端口
-v容器的保存地址这里分别建立了两个文件夹.halo2.1和.halo2.2,用来储存不同站点的文件
HALO_EXTERNAL_URL外部链接地址需要将两个数据分别改成你要连接的域名的具体信息
HALO_SECURITY_INITIALIZER_SUPERAMINUSER初始用户名不要修改,不要修改,不要修改
HALO_SECURITY_INITIALIZER_SUPERADMINPASSWORD初始用户密码分别改称自己的密码即可
  1. 开启容器以后,可以在宝塔面板的Docker界面看到两个容器已经在运行了,说明开启容器成功。

  1. 开放端口:在上一步的操作中,我们开放了两个端口分别是8080和8090,所以要在服务器的安全组或者防火墙中把8080和8090的tcp端口打开。打开之后输入 ip:8080 或者 ip:8090 就可以看到博客的页面了。

初始化Halo

  1. 在打开 ip:8090 之后,点击右上角的小地球,然后选择登录,输入账户名和密码,在这个例子中,8090端口的用户名是 admin,密码是 12345678。进入之后输入自己博客的名字,就可以完成初始化。

  2. 重新打开 ip:8090 后,如果看到 hello halo 的文章,说明初始化成功。

域名解析

  1. 登录自己域名的服务商,配置域名的解析。以 test.com 为例,分别添加以下两条解析记录:
记录类型主机记录IPv4地址
A@106.12.171.156(换成自己的ip)
Awww106.12.171.156(换成自己的ip)
  1. 上面两条记录可以让www.test.comtest.com都连接到你的ip上。

  2. 另外一个域名也用相同的操作解析到服务器的ip上。

配置反向代理

  1. 因为两个域名都解析到了同一个服务器上,所以需要用nginx进行分发和反向代理,确定每一个域名解析到的具体的端口。

  2. 进入宝塔面板,在左边的目录中找到【网站】,选择【添加站点】,输入自己解析过的站点(两个域名分别添加记录),但一个域名的www和不带www的版本添加到一条记录里面,如下:

  1. 点击网站名,进入配置界面,在左面的目录里面找到【配置文件】,将以下内容全部注释(用Ctrl+/)即可:
    # location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    # {
    #     expires      30d;
    #     error_log /dev/null;
    #     access_log /dev/null;
    # }

    # location ~ .*\.(js|css)?$
    # {
    #     expires      12h;
    #     error_log /dev/null;
    #     access_log /dev/null;
    # }
  1. 然后这段代码后面加入反代理的脚本,以8090端口对应的网站为例,加入:
    # 反代脚本:
    location / {
         proxy_pass http://127.0.0.1:8090/;
         rewrite ^/(.*)$ /$1 break;
         proxy_redirect off;
         proxy_set_header Host $host;
         proxy_set_header X-Forwarded-Proto $scheme;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header Upgrade-Insecure-Requests 1;
         proxy_set_header X-Forwarded-Proto https;
    }
  1. 配置界面的截图如下:

  1. 配置另一个域名的时候,只需要将 proxy_pass 中的8090改成8080即可。

  2. 配置SSL密钥:还是同一个目录,在左边找到SSL,然后从自己域名的服务商中,找到自己域名的SSL证书(每年可以免费申请20个),下载下来,然后将KEY和PEM的内容全部粘贴到框里面即可,如下:

小结

到目前为止,服务器的有关配置就已经基本完成了,到此为止,应该能够成功实现用自己的域名打开halo博客了。接下来的内容是如何将原来1.x的halo博客的内容迁移2.x的halo博客中。

迁移流程

迁移之前需要准备好两份之前备份的文件,一个是json格式的数据备份文件,另一个是整站备份得到的附件文件夹,以upload命名(如果之前网站没有附件可以忽略到这一点)。

文章迁移

  1. halo2.x版本官方支持的插件和主题列表可以查看网站:https://github.com/halo-sigs/awesome-halo

  2. 打开网站后找到迁移插件:plugin-migrate,在Releases下载最新的JAR文件,保存到电脑上。

  3. 登录到halo2的后台中,安装plugin-migrate插件并且开启,开启成功后左边的菜单栏会多出一个【工具】,下面有迁移的子菜单,点击进去以后,选择导入之前保存的json格式的数据文件,确定要导入的内容以后,下拉选择【执行导入】即可,如图:

  1. 导入成功以后,原来博客的文章等信息就应该能够完全迁移过来了,接下来只需要将原来博客的附件迁移过来即可。

附件迁移

  1. 附件迁移需要用到宝塔里的【文件】功能,博客的附件内容保存在 /root/.halo2.1/attachments/upload (.halo2.1是之前第一个站点的文件列表,另一个站点的文件存在.halo2.2中) 中,如果没有这个文件夹,可以自己建一个,或者随便在博客后台上传一个文件就能自动生成了。

  2. /root/.halo2.1/attachments 目录下,选择【上传】,在左上角选择【上传目录】,然后将整站备份中的upload文件夹选中之后全部上传,上传的内容会直接合并到/root/.halo2.1/attachments/upload下面。

  3. 通过上述的步骤就能够完成附件的迁移。但是需要注意的是,虽然文章的附件内容可以正常显示了,但是目前的halo2还不支持在后台对1.x的附件进行管理,所以在后台是看不到以前的附件的,但是他确实是存在并且文章可以正常调取显示的。

小结

这一次的迁移过程总体来说还是比较顺利的,新版的halo2也带来了更多的功能,并且把以前的很多冗余的功能做成了插件的形式,可以大大减少服务器的内存消耗,希望这篇记录贴能够帮助一些需要升级halo版本或者同一个服务器部署双站点的小伙伴。

  • 0