1. 网站搬家
本站的服务器马上就要到期,续费太贵,所以就在某宝上花399新买了一台四年的服务器,这就有了一个网站搬家的问题。

先说一下本站的配置:
域名、解析、SSL证书:阿里云
服务器:腾讯云
图片存储:腾讯云COS
网站加速:腾讯云EdgeOne
新买的服务器是在同一个实名用户下的另一个腾讯云账户里,所以为了以后只管理一个账户,和腾讯云有关的就都要搬家。
2. 开始搬家
1. Halo博客备份
进入Halo博客控制台,创建备份后下载到本地。
2. 用户友好的维护页面
新建一个用户友好的维护页面,在维护期间用户访问本站时,可进行友好提示,一个简单的HTML页面即可。
接下来就要解决这个维护页面怎么能在公网被访问到的问题。
登录腾讯云控制台->EdgeOne->Makers->创建项目(直接上传),上传刚刚新建的维护页面。
上传好之后,配置自定义域名并添加解析,上传SSL证书,就可以使用域名访问这个页面了。

自定义页面有了之后,还要在访问本站域名以及其他任意路径时都显示这个页面。
腾讯云控制台->EdgeOne->站点加速->规则引擎->创建规则,规则详情如下,这样访问本站域名时就会重定向到维护页面了。

3. 创建用于迁移的子用户
为了降低风险,跨账号迁移时避免使用主账号密钥。
创建用于迁移的新旧腾讯云账户的子用户。
登录腾讯云->访问管理->用户列表->自定义创建,创建类型选择可访问资源并接收消息,访问方式勾选编程访问和腾讯云控制台访问,策略选择QcloudMSPFullAccess和QcloudCOSAccessForMSPRole,标签暂时不设定,记住账号ID和用户信息(用户名、密码、密钥)。

4. 停止Docker容器
使用命令停止正在运行Docker容器(本站是使用Docker Compose部署的)。
docker stop 容器id
5. 数据库备份
Halo的备份文件里只包含Halo博客自身的数据,但是数据库里还有别的服务的数据,就需要把整个数据库都备份下来,备份完后保存到本地。
mysqldump -u root -p'密码' --all-databases > all_databases_backup.sql
6. 重要配置文件备份
虽然后面有服务器镜像迁移,但是保险起见,服务器上nginx配置、SSL证书、Halo博客目录等重要的配置文件要独立备份。
7. 服务器关机
关闭云服务器,确保系统完全停止运行,制作出环境完全一致的镜像。
8. 服务器镜像迁移
登录腾讯云服务器控制台,找到已关机的实例,更多操作->制作镜像->制作自定义镜像,输入镜像名称,开始制作。

镜像制作完成后,进入镜像->自定义镜像,找到制作的镜像,点击共享,输入新账号的账号ID,确认共享。

登录新的腾讯云账号,控制台->轻量应用服务器->服务器->更多操作->重装系统->使用自定义镜像->共享镜像(选择其他腾讯云账号),备份选项选择无需备份,直接重装,就得到一个一模一样的服务器了。

9. COS一键迁移
新腾讯云账号登录控制台->云迁移->对象存储迁移->新建任务->新建对象存储迁移任务,输入新旧账号的对象存储信息后,启动迁移任务。
(迁移前要先在新的腾讯云账号开通对象存储COS,并创建存储桶,作为迁移目标。)
腾讯云 COS 间迁移文档如下:
输入任务名称,预估的数量。

输入迁移源的信息。

输入迁移目标的信息,选择迁移模式。

迁移任务创建好,等待迁移任务完成。

注意,对象存储COS的迁移只是把数据复制过去了,存储桶的各种配置仍需手动操作。
10. EdgeOne一键迁移
旧腾讯云账号登录控制台->EdgeOne->服务总览->站点概览->站点管理->导出配置,选择全部模块,导出为JSON文件。
(注意,导出规则引擎时仅包含已启用的规则,未启用的不会被导出。)

新账号登录腾讯云控制台,开通EdgeOne,添加站点。
由于自定义响应页面不会被导出,要先在新账号添加自定义响应页面后,再导入配置。
(导入配置时,规则引擎里的响应页面需要手动选择,不然会导入失败。)

站点概览->域名服务->域名管理,添加域名后,上传SSL证书。
(导入的配置里不包含域名,添加域名前要删除旧腾讯云账号上域名管理里的域名,不然无法添加。)

比较新旧账号下的各种配置,无法导出的部分需手动配置。
11. 域名解析变更
修改解析记录里各种A类型的记录值为新服务器的IP。
COS、EdgeOne由于CNAME解析值不变,因此无需变更。
12. 服务器配置
查看java版本。
java -version
查看docker版本和状态,docker的容器。
docker --version
systemctl status docker
sudo docker ps -a
查看mysql的版本和状态,验证密码。
mysql --version
systemctl status mysql
mysql -u root -p'密码'
查看nginx版本和状态。
nginx -v
systemctl status nginx
腾讯云服务器的防火墙中放行443端口。
(如果回源协议是HTTP,还需要放行80端口)

13. 浏览器访问域名
网站已经可以通过域名访问了,说明搬家成功。接下来再观察48小时,看网站能否稳定运行。
登录新的腾讯云账号,新建只有COS权限的子用户。Halo博客控制台->附件->存储策略,修改腾讯云COS的配置策略。

14. 注销旧账户
等网站能稳定运行后,删除旧腾讯云账户上的COS和EdgeOne配置,服务器到期后再注销掉腾讯云账号。
以上。