从Halo1.x迁移到Halo2的流程记录
前言
起因是为了建幸福工厂的服务器,不小心把原来一个服务器干爆了,而那个服务器之前又搭载了一个halo博客的服务,所以需要重新搭一次。考虑到那个服务器快要到期了,所以需要把两个halo博客迁移到一个服务器上,顺便做一下halo版本的升级,于是有了这一篇文章。大概要记录的是如何把一个1.x版本的halo博客升级成一个2.x版本,并且如何配置一个服务器上跑多个站点。
准备工作
-
在迁移之前,需要先将原本的1.x版本的halo博客进行备份,原来版本的halo提供了三种备份的方式,分别是整站备份,数据备份和生成markdown文件。这里推荐三种备份都用一次,其中数据备份和整站备份是必须要准备的。
-
准备一个服务器:一般运行一个Halo需要的内存是1GB,要跑两个站点的话相当于要2GB。这里选择的服务器是阿里云的1h2g的一台服务器。
-
准备好可以备案的域名,用于连接服务器。
配置流程
用于演示的服务器是百度云的2h8g的服务器,安装的系统是CentOS / 8 x86_64 (64bit)。
部署服务器
安装宝塔面板
宝塔指令参考地址:https://www.bt.cn/new/btcode.html
- 因为演示用的是CentOS的系统,所以直接复制CentOS的指令进行安装。代码如下:
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
-
等待安装过程,安装初期键入两次
y
确认安装内容即可 -
当看到以下的内容的时候,就说明已经安装成功了,记得保存一下输出的内容,后面登录宝塔面板的时候要用到
==========================
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]的端口
因已开启面板自签证书,访问面板会提示不匹配证书,请参考以下链接配置证书
==========================
-
打开上面给的外网面板地址,输入用户名和密码进行登录,如果面板打不开,检查以下服务器对应的端口是否已经开放。(例子里就需要开放服务器的25803端口)
-
进入宝塔面板并且绑定后,会弹出建议安装的套件,除了Nginx以外的套件全部取消。
安装Nginx和Docker
- 点击确定安装Nginx以后,就会自动弹出以下界面,说明Nginx正在安装,安装的时长比较久,需要稍微等一等。
-
安装完Nginx以后,在宝塔左侧的目录里找到【软件商店】,然后搜索Docker,点击右边的安装即可,都是免费的。
-
检查安装情况,分别查看nginx和Docker的版本号,输入:
docker version
- 如果返回如下安装结果,说明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
- 输入
nginx -v
,如果得到以下结果,说明nginx安装成功:
nginx version: nginx/1.22.1
- 分别输入以下两个命令行,开启Docker服务并且设置开机启动:
systemctl start docker.service
systemctl enable docker.service
配置Docker镜像下载加速
- 如果使用的是阿里云的服务器,搜索“容器镜像加速”并且开通,进去容器镜像加速服务,点击“镜像工具”下面的“镜像加速器”右边就可以查看到加速的地址,将加速的地址复制(每一个人的地址都不一样),例如:
{
"registry-mirrors":["https://f6wpk8m.mirror.aliyuns.com"]
}
- 如果使用的是百度云的服务器,加速地址都是一样的,如下:
{
"registry-mirrors":["https://mirror.baidubce.com"]
}
-
如果使用的是其他服务商的服务器,加速地址可以自己找一下,不设置镜像下载加速也是可以的,直接跳转到下一步的部署容器环节。
-
输入命令,将上面的代码复制进去,然后ESC退出,敲
:wq
回车保存:
vim /etc/docker/daemon.json
- 配置完加速地址后,重新加载配置文件,并且重启Docker服务,敲以下命令:
systemctl daemon-reload
systemctl restart docker.service
部署容器
- 先拉取最新的Halo镜像,敲以下命令(其中2.2.0是版本,可以替换成最新的版本号):
docker pull halohub/halo:2.2.0
- 因为要部署两个站点,所以需要开两个容器,每个容器配置不同的文件地址和不同的端口号,敲如下的命令(其中有参数需要自行修改)
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 | 初始用户密码 | 分别改称自己的密码即可 |
- 开启容器以后,可以在宝塔面板的Docker界面看到两个容器已经在运行了,说明开启容器成功。
- 开放端口:在上一步的操作中,我们开放了两个端口分别是8080和8090,所以要在服务器的安全组或者防火墙中把8080和8090的tcp端口打开。打开之后输入
ip:8080
或者ip:8090
就可以看到博客的页面了。
初始化Halo
-
在打开
ip:8090
之后,点击右上角的小地球,然后选择登录,输入账户名和密码,在这个例子中,8090端口的用户名是admin
,密码是12345678
。进入之后输入自己博客的名字,就可以完成初始化。 -
重新打开
ip:8090
后,如果看到 hello halo 的文章,说明初始化成功。
域名解析
- 登录自己域名的服务商,配置域名的解析。以
test.com
为例,分别添加以下两条解析记录:
记录类型 | 主机记录 | IPv4地址 |
---|---|---|
A | @ | 106.12.171.156(换成自己的ip) |
A | www | 106.12.171.156(换成自己的ip) |
-
上面两条记录可以让
www.test.com
和test.com
都连接到你的ip上。 -
另外一个域名也用相同的操作解析到服务器的ip上。
配置反向代理
-
因为两个域名都解析到了同一个服务器上,所以需要用nginx进行分发和反向代理,确定每一个域名解析到的具体的端口。
-
进入宝塔面板,在左边的目录中找到【网站】,选择【添加站点】,输入自己解析过的站点(两个域名分别添加记录),但一个域名的www和不带www的版本添加到一条记录里面,如下:
- 点击网站名,进入配置界面,在左面的目录里面找到【配置文件】,将以下内容全部注释(用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;
# }
- 然后这段代码后面加入反代理的脚本,以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;
}
- 配置界面的截图如下:
-
配置另一个域名的时候,只需要将
proxy_pass
中的8090改成8080即可。 -
配置SSL密钥:还是同一个目录,在左边找到SSL,然后从自己域名的服务商中,找到自己域名的SSL证书(每年可以免费申请20个),下载下来,然后将KEY和PEM的内容全部粘贴到框里面即可,如下:
小结
到目前为止,服务器的有关配置就已经基本完成了,到此为止,应该能够成功实现用自己的域名打开halo博客了。接下来的内容是如何将原来1.x的halo博客的内容迁移2.x的halo博客中。
迁移流程
迁移之前需要准备好两份之前备份的文件,一个是json格式的数据备份文件,另一个是整站备份得到的附件文件夹,以upload命名(如果之前网站没有附件可以忽略到这一点)。
文章迁移
-
halo2.x版本官方支持的插件和主题列表可以查看网站:https://github.com/halo-sigs/awesome-halo
-
打开网站后找到迁移插件:plugin-migrate,在Releases下载最新的JAR文件,保存到电脑上。
-
登录到halo2的后台中,安装plugin-migrate插件并且开启,开启成功后左边的菜单栏会多出一个【工具】,下面有迁移的子菜单,点击进去以后,选择导入之前保存的json格式的数据文件,确定要导入的内容以后,下拉选择【执行导入】即可,如图:
- 导入成功以后,原来博客的文章等信息就应该能够完全迁移过来了,接下来只需要将原来博客的附件迁移过来即可。
附件迁移
-
附件迁移需要用到宝塔里的【文件】功能,博客的附件内容保存在
/root/.halo2.1/attachments/upload
(.halo2.1是之前第一个站点的文件列表,另一个站点的文件存在.halo2.2中) 中,如果没有这个文件夹,可以自己建一个,或者随便在博客后台上传一个文件就能自动生成了。 -
在
/root/.halo2.1/attachments
目录下,选择【上传】,在左上角选择【上传目录】,然后将整站备份中的upload文件夹选中之后全部上传,上传的内容会直接合并到/root/.halo2.1/attachments/upload
下面。 -
通过上述的步骤就能够完成附件的迁移。但是需要注意的是,虽然文章的附件内容可以正常显示了,但是目前的halo2还不支持在后台对1.x的附件进行管理,所以在后台是看不到以前的附件的,但是他确实是存在并且文章可以正常调取显示的。
小结
这一次的迁移过程总体来说还是比较顺利的,新版的halo2也带来了更多的功能,并且把以前的很多冗余的功能做成了插件的形式,可以大大减少服务器的内存消耗,希望这篇记录贴能够帮助一些需要升级halo版本或者同一个服务器部署双站点的小伙伴。
- 0
-
分享