记一次博客搬家

记一次博客搬家

最近趁着双11入了阿里云,因为腾讯云当时只买了1年试水,现在续费的话实在是遭不住。

需要说明的是,主机、域名都需要ICP备案,所以新买的阿里云又折腾了一番进行备案,万幸的是如果之前备案过域名和主机,只是要添加一台新的主机到原备案的话,审核速度是非常快的,我这里1个工作日就搞定了。

顺带一提,阿里云会按备案耽搁的天数进行时间补偿,会将你的服务器到期时间顺延相应的天数,腾讯云就没这福利…

VPS准备好后就需要折腾一下,把腾讯云上的服务搬迁到阿里云了,其它服务倒也不重要,主要还是要先把博客搬过来,以下就是博客搬迁记录。

需要说明的是不同的Linux发行版配置很不一样,这里我原来的腾讯云使用的是CentOS 7.9,阿里云使用的是Ubuntu。

准备新环境

在新服务器上搭建环境前,请先确认Linux发行版版本,不同的LInux发行版安装软件的方式略有不同:

root@icexmoon:~# cat /proc/version
Linux version 5.4.0-89-generic (buildd@lgw01-amd64-044) (gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)) #100-Ubuntu SMP Fri Sep 24 14:50:10 UTC 2021

我新的服务器上选择的是Ubuntu 20.04,该版本支持到2025年,应该够用了。

先更新目标服务器上的软件:

apt update
apt upgrade

Apache

安装Apache:

root@icexmoon:~# sudo apt install apache2
Reading package lists... Done
Building dependency tree
...省略

检查Apache运行状态:

root@icexmoon:~# systemctl status apache2
● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2021-11-05 17:03:37 CST; 1min 10s ago
       Docs: https://httpd.apache.org/docs/2.4/
   Main PID: 1533 (apache2)
      Tasks: 55 (limit: 2315)
     Memory: 5.2M
     CGroup: /system.slice/apache2.service
             ├─1533 /usr/sbin/apache2 -k start
             ├─1535 /usr/sbin/apache2 -k start
             └─1536 /usr/sbin/apache2 -k start

Nov 05 17:03:37 icexmoon.xyz systemd[1]: Starting The Apache HTTP Server...
Nov 05 17:03:37 icexmoon.xyz systemd[1]: Started The Apache HTTP Server.

这里Active: active (running)表明已经正常运行,而enabled表明会开机自启动。

安装好Apache后还需要通过ufw程序在防火墙中放行80443端口:

root@icexmoon:~# ufw app list
Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH
root@icexmoon:~# ufw app info "Apache Full"
Profile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web
server.

Ports:
  80,443/tcp
root@icexmoon:~# ufw allow in "Apache Full"
Rules updated
Rules updated (v6)

实际上真正起作用的是ufw allow in "Apache Full"命令,这里是启用了ufw中预设的Apache Full规则,该规则可以放行80443端口,如果只想放行80端口,可以使用Apache这个预设规则。

如果VPS供应商还额外设置了网络安全组策略,则除了设置Linux的软件防火墙,还需要设置VPS的安全组策略,这里我以阿里云为例:

image-20211105171803590

在安全组中选择默认的安全组策略,点击配置规则

image-20211105171948162

在入方向页面,点击手动添加,添加一个TCP协议的80443端口,然后点击保存:

image-20211105172058703

现在你可以直接通过主机的IP访问:

image-20211105172148177

但方便起见还是通过域名解析给新服务器分配一个用来测试的域名:

image-20211105172245456

域名解析的配置方式这里不做赘述,可以参考其他文章。

MySQL

安装MySQL:

root@icexmoon:~# apt install mysql-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
...省略

查看MySQL进程状态:

root@icexmoon:~# systemctl status mysql
● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2021-11-05 17:27:44 CST; 9s ago
   Main PID: 2734 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 2315)
     Memory: 354.5M
     CGroup: /system.slice/mysql.service
             └─2734 /usr/sbin/mysqld

Nov 05 17:27:43 icexmoon.xyz systemd[1]: Starting MySQL Community Server...
Nov 05 17:27:44 icexmoon.xyz systemd[1]: Started MySQL Community Server.

同样的,有activeenabled说明安装好了。

安装好MySQL后还需要设置其主密码:

root@icexmoon:~# mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) :
...省略

运行该脚本后会依次询问是否启用增强密码插件/密码安全级别/输入密码/确认使用该密码为主密码等,剩余选项输入y后回车保持默认选项即可。

现在MySQL默认使用auth_socket验证root用户,这样我们是无法远程连接数据库的,所以还要修改为密码验证的方式。

先查看当前root用户的验证方式:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

输出结果大概是这样的:

image-20211105181918649

可以看到root的验证方式的确是auth_socket

执行以下SQL修改为密码方式:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

需要注意,要将上面的password替换为你将要设置的root用户的密码。

如果成功执行SQL的话执行以下SQL提交变更(如果失败,大概率是密码强度不够,应该尝试添加特殊字符):

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

执行以下SQL查看是否变更成功:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

image-20211105182238782

退出SQL环境:

mysql> exit
Bye

PHP

安装PHP:

root@icexmoon:~# apt install php libapache2-mod-php php-mysql
Reading package lists... Done
Building dependency tree
Reading state information... Done
...省略

为了验证PHP正常安装,可以通过VSCode远程连接主机后在/var/www/html/目录下添加文件index.php

<?php
phpinfo();
?>
  • 关于如何使用VSCode远程连接主机可以阅读VSCode远程开发
  • 当然用shell命令创建该文件也是可以的,比如vimnano

然后用浏览器访问ip/index.php

image-20211105201016734

迁移数据

万幸的是我有在原来的机器上部署每天自动备份,详情见腾讯云博客搭建 V,所以迁移数据只要把备份迁移过来后解压拷贝到相应目录即可。

WordPress

这里通过XShell将原服务器上的WordPress备份和数据库备份转移到新的服务器上。

先查看压缩包的内容:

root@icexmoon:~/tmp# tar -tzvf 20211105_wordpress.tar.gz | less
var/www/blog2/
var/www/blog2/wp-trackback.php
var/www/blog2/wp-admin/
var/www/blog2/wp-admin/privacy.php
var/www/blog2/wp-admin/user-edit.php
...省略

这里是去除根目录符号的完整目录形式,是可以直接解压缩到根目录下的。不过我选择先解压到当前目录下,再将网站目录复制到目标目录:

root@icexmoon:~/tmp# root@icexmoon:~/tmp# tar -xzvf 20211105_wordpress.tar.gz -C .
var/www/blog2/
var/www/blog2/wp-trackback.php
var/www/blog2/wp-admin/
var/www/blog2/wp-admin/privacy.php
...省略
root@icexmoon:~/tmp# cd var
root@icexmoon:~/tmp/var# ll
total 12
drwxr-xr-x 3 root root 4096 Nov  5 20:33 ./
drwxr-xr-x 3 root root 4096 Nov  5 20:33 ../
drwxr-xr-x 3 root root 4096 Nov  5 20:33 www/
root@icexmoon:~/tmp/var# cd www
root@icexmoon:~/tmp/var/www# ll
total 12
drwxr-xr-x 3 root root 4096 Nov  5 20:33 ./
drwxr-xr-x 3 root root 4096 Nov  5 20:33 ../
drwxr-xr-x 5 root root 4096 Nov  5 03:00 blog2/
root@icexmoon:~/tmp/var/www# cp -ar blog2/ /var/www/blog2
root@icexmoon:~/tmp/var/www# cd /var/www
root@icexmoon:/var/www# ll
total 16
drwxr-xr-x  4 root root 4096 Nov  5 20:35 ./
drwxr-xr-x 12 root root 4096 Nov  5 17:03 ../
drwxr-xr-x  5 root root 4096 Nov  5 03:00 blog2/
drwxr-xr-x  2 root root 4096 Nov  5 18:30 html/

数据库

网站数据这里就OK了,剩下的是数据库,这里可以先查看备份的SQL内容:

root@icexmoon:~/tmp# zcat 20211105_wordpress.sql.gz | less

这里只要创建db后,就可以直接执行SQL进行数据恢复。

先解压缩SQL:

root@icexmoon:~/tmp# cp 20211105_wordpress.sql.gz 20211105_wordpress.sql.gz.bak
root@icexmoon:~/tmp# ll
total 48736
drwxr-xr-x 3 root root     4096 Nov  5 20:49 ./
drwx------ 7 root root     4096 Nov  5 20:30 ../
-rw-r--r-- 1 root root  1905892 Nov  5 20:25 20211105_wordpress.sql.gz
-rw-r--r-- 1 root root  1905892 Nov  5 20:49 20211105_wordpress.sql.gz.bak
-rw-r--r-- 1 root root 46074783 Nov  5 20:25 20211105_wordpress.tar.gz
drwxr-xr-x 3 root root     4096 Nov  5 20:33 var/
root@icexmoon:~/tmp# gzip -d 20211105_wordpress.sql.gz
root@icexmoon:~/tmp# ll
total 57220
drwxr-xr-x 3 root root     4096 Nov  5 20:49 ./
drwx------ 7 root root     4096 Nov  5 20:30 ../
-rw-r--r-- 1 root root 10592344 Nov  5 20:25 20211105_wordpress.sql
-rw-r--r-- 1 root root  1905892 Nov  5 20:49 20211105_wordpress.sql.gz.bak
-rw-r--r-- 1 root root 46074783 Nov  5 20:25 20211105_wordpress.tar.gz
drwxr-xr-x 3 root root     4096 Nov  5 20:33 var/

因为使用gzip解压会自动删除原文件,所以在压缩前先备份了一份。

现在登录mysql,并执行SQL文件。先用密码登录:

root@icexmoon:~# mysql --password

查看已有db:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

创建一个和原来服务器上命名相同的db:

mysql> create database wordpress2;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| wordpress2         |
+--------------------+
5 rows in set (0.00 sec)

切换数据库:

mysql> use wordpress2

导入SQL:

mysql> source /root/tmp/20211105_wordpress.sql

退出:

mysql> exit
Bye

Apache

借助工具拷贝Apache的VHost配置文件到新的服务器,Apache2的VHost的配置文件应当存放在/etc/apache2/sites-enabled

开启Apache2的SSL和Rewrite模块:

ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ssl.load
systemctl restart apache2

在DNS解析设置中将原来的域名指向新的服务器。

刷新本地电脑的DNS解析缓存,Windows电脑需要执行ipconfig /flushdns

一切正常的话,通过原来的host就可以访问新的主机了,可以通过F12开发者工具查看IP进行确认。

PHP

登录后台时发现WP的验证码插件不能正常工作,开启Apache日志,发现是因为插件调用的PHP函数报错:

Uncaught Error: Call to undefined function imagecreate() in xxx

Bing了一下问题的原因是缺少相关的PHP扩展php-gd

默认的Ubuntu仓库是没有该PHP扩展的,所以需要安装其它仓库。

先安装add-apt-repository工具以更方便地添加仓库:

apt-get install software-properties-common

添加仓库:

#add-apt-repository ppa:ondrej/php

安装缺失的PHP扩展功能:

#apt-get update
root@icexmoon:/var/logs# apt search php7 | grep gd

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

php7.0-gd/focal 7.0.33-55+ubuntu20.04.1+deb.sury.org+1 amd64
php7.1-gd/focal 7.1.33-42+ubuntu20.04.1+deb.sury.org+1 amd64
php7.2-gd/focal 7.2.34-26+ubuntu20.04.1+deb.sury.org+1 amd64
php7.3-gd/focal 7.3.31-2+ubuntu20.04.1+deb.sury.org+1 amd64
php7.4-gd/focal 7.4.25-1+ubuntu20.04.1+deb.sury.org+1 amd64
root@icexmoon:/var/logs# apt install php7.4-gd
root@icexmoon:/var/logs# systemctl restart apache2

刷新页面后发现可以正常显示验证码了。

证书

虽然直接复制老服务器上的证书过去也是可以暂时使用的,但是还是在新服务器上直接申请比较方便。

同样的,默认的Ubuntu仓库是没有证书申请工具的,需要添加相应仓库:

add-apt-repository ppa:certbot/certbot
apt update

安装证书工具:

apt install python3-certbot-apache

申请证书:

certbot certonly --apache --email icexmoon@qq.com -d www.blog.icexmoon.xyz -d blog.icexmoon.xyz -d icexmoon.xyz -d www.icexmoon.xyz
  • 需要确保申请的证书关联的域名都可以被正确解析到当前的Linux主机,否则会失败。短时间内失败次数过多可能会无法再次尝试,需要等一段时间后再试。

  • 如果一级域名,如icexmoon.xyz申请证书时检测失败,需要在apache2的默认VHost文件/etc/apache2/sites-enabled中添加一级域名信息:

    	ServerName www.icexmoon.xyz
        ServerAlias icexmoon.xyz
    

    如果需要的话,也可以顺便添加上一级域名的404页面:

    	ErrorDocument 404 /404.html
    

添加证书自动更新:

crontab -e命令打开crontab,添加以下自动执行任务:

0 0 1 * * /usr/bin/certbot renew --force-renewal

大功告成!

参考资料

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值