这两天续费好VPS之后,就考虑着把旧版博客放回到天天停机的虚拟主机上,维持原来的整体博客结构,然后在腾讯云VPS上部署新版博客,经过两天的折腾,顺利完成,来记录一下操作过程,也给以后万一需要再搬迁留个经验参考。
备份数据库
任何对VPS的操作,都要先把数据库备份好,毕竟博客重要的就是那些文章,而不是博客系统本身。我这里使用了Navicat
,把腾讯云MySQL
内Wordpress
的数据库先用wp-optimize
优化完,然后备份到虚拟主机自带的20M
数据库里,看了一下,467
篇文章加上其他的数据占用了10.898M
,这些数据就封存在这里了。
重置VPS然后安装Halo博客系统
到腾讯云的控制台,选择重装系统,确认之后,VPS就恢复如初了, 然后按照Halo
博客官网在Linux服务器部署Halo的教程安装。除了MySQL
的安装这里没有列出来以外,其他的每个步骤都有。
这里遇到的几个问题如下:
-
根据教程下载回来的单独配置文件
application.yaml
中没有包含如教程中所示的Halo
配置部分,想要自定义管理界面的入口就必须把这个加上去,如果使用MySQL
的话,还需要把H2
数据库配置上边那行连接池也一并注释掉。我这里依然使用默认的8090
端口。 -
配置
nginx
反向代理的时候,一定要跟着教程走到底,不要在监听80端口那里就停下来,现在很多浏览器会自动尝试https
协议,如果失败就访问不了,经过验证,只要按照下边的步骤让certbot
自行修改nginx
配置,就可以使用https
来访问,毫无问题。 -
在初始化
Halo
博客的时候,域名一定要填写正确,这个和Wordpress
类似,填写错误的话会影响所有博客动态地址的解析。这个后边也会提到。之前在安装certbot
里会被询问要为哪个地址安装证书,我选的是为conyli.cc
安装证书(而不是www.conyli.cc
),这里就填入https://conyli.cc
。
经过上述配置之后,就可以正常访问Halo
博客了。
在虚拟主机上重新配置Wordpress
这个时候就发现Wordpress
确实够臃肿。我其实是先在虚拟主机上安装了一个全新的Wordpress
,然后直接把数据从腾讯云传输到数据库中,结果发现无法正常显示。后来思考了一下,可能是因为刚安装的Wordpress
没有采用同样的主题,于是安装了相同的主题Futurio
,发现就可以正常显示了。
我之前由于给朋友帮忙,曾经在阿里云里解析了一个二级域名dessert.conyli.cc
到虚拟主机,现在使用这个地址可以正常显示博客首页,但是点内部的链接,浏览器还是会跳转到以https://conyli.cc
开头的链接,这是因为之前提到过要填写正确的域名,于是登录阿里云控制台,先添加一条新的DNS解析记录:
主机记录 记录类型
archive A
然后删除原来的二级域名dessert
的解析。到虚拟主机的控制界面,为虚拟主机绑定archive.conyli.cc
这个地址,同时也删除其他绑定,仅仅保留绑定这个地址,然后选上开启阿里云提供的免费https
证书,这样这个网址就可以通过https
协议来访问。
修改了绑定的域名之后,就需要修改Wordpress
内部用于动态拼接链接的域名,如果采用正常登录修改的方法,那我得先把conyli.cc
解析回虚拟主机才行,不过可以直接登录进虚拟主机的数据库,找到wp_options
表,将其中的siteurl
和home
字段内容都修改成https://archive.conyli.cc
即可,再通过这个链接访问旧版博客,就可以正常登录了。
之后就是一些收尾工作,比如很多页面的链接依然还是以conyli.cc
开头,都要进行手工修改,文章列表里的链接也需要进行批量修改,原本单独编写的一些后缀名是html
的页面,也需要把页面和对应的css
文件重新上传到虚拟主机的Wordpress
目录下,经过一番修改,基本上都搞好了。
CHROME 81版的图片加载问题
Chrome81
版本默认图片以HTTPS协议加载,如果是HTTP协议就无法正常加载。这个新功能直接导致了Django 2 by example
中图片无法加载。原因是:七牛云的外链是http
协议,我的站点现在使用https
协议,在Chrome81
中直接打开Django 2 by example
的页面,Chrome
会提示说在https
中不能执行http
外链,不过换成其他浏览器都可以。开启七牛云的https
协议需要花钱,想了一想只是为了Chrome81
就算了,大家如果有需要,还是git clone
一下,在本地打开,就可以正常加载图片了。
最后一步就是在旧版博客里为新版博客添加一个顶部菜单导航,在新博客里也同样添加一个导航到旧版博客的菜单,这样就完成了新旧博客并存的工作。
最后还要写一下,certbot
更新证书的操作:
certbot renew --force-renew