WordPress从云虚拟主机搬迁到轻量应用服务器

人们都在玩跨年,我在玩这破烂云虚拟主机搬迁。就因为云虚拟主机真的很烂,响应、速度慢得令人抓鸡!而即将又快到期续费了,不如瞧瞧马云有没有既便宜又好用的小鸡鸡。不瞧不知道,瞧了吓一跳!

轻量应用服务器:1核心1G内存,3M峰值宽带,40G SSD。350元一年,老用户省171元还需969元一年!明摆着坑老用户嘛!实在令人纠结,网页点来点去的发现怎么又变成350元一年的了?马上下单2年 700元,反正之前的云虚拟主机续费还要298元一年呢!下单完成之后,发现服务器地域是华北2(北京)。呆了片刻,联系客服说买错地域了,客服说地域无法更改的,只能退货再买。然后我没有找到怎么退货的,再浏览产品购买页去选地域 华南(深圳),又发现已买完了,再选华北2的有货却涨价为969元一年了!无限的坑!算了,不退了。再咨询客服地域有没有影响速度?客服说:阿里云BGP专线都接入了全国的骨干机房,全国访问流畅均衡,目前您选择国内的哪一个地域节点都是不影响您使用的,请您知悉,谢谢!

所以还是要感谢阿里云,700元两年的轻量应用服务器。需要购买阿里云服务器的,希望能支持我帮阿里云推广,点击下面图片链接领取最高1888元大礼包代金卷

准备搬迁工作

前面的废话有点多,现在进入正题。搬迁工作是一个复杂的、漫长的、痛苦的……过程(仅对我而言(●’◡’●)),事实上除了云虚拟主机,没用过其他的云产品。据了解这个轻量应用服务器简单易用,使用阿里的镜像,几分钟即可搭建好WordPress网站。在购买轻量应用服务器之前,我只是仓促的大概了解了一下,镜像可选很多种类。按理来说,应该不太难,就匆忙的下单了。

到手之后,摆弄了半小时左右,用的是阿里的应用镜像,centOS7.3+WordPress4.8.1没有达到心中的期望。因为这个应用镜像AMP环境版本有点低,貌似是Apache2.4+MySQL5.7+php5.6明显不符合自己的需求。主要是php5.6的版本太低了,我需要php7.1的哟,因为我在本地搭建的虚拟主机里的环境centOS7.3+Apache2.4+MySQL5.7+php7.1速度可以飞起。

决定自己在轻量应用服务器镜像centOS7.3的基础上搭建AMP环境,即Apache2.4+MySQL5.7+php7.1。旧的云虚拟主机服务器备份好网站与数据库,然后导入到新的轻量应用服务器里,达到搬迁目的。心想这经历的步骤并不会太难,但是真正要去实现,却遇到了非常多的问题。

足足花了3天的时间,才基本完美的搬迁完成。连续2个晚上基本算是通宵,白天都没有怎么休息好,到了第二个晚上感冒了,好像整个人都被掏空了!凌晨4点多去冲了个热水凉,再弄了点芋头填了一下饿到哭的肚子,冰冷的打颤匆匆的躺上床去休息了。鼻子被鼻涕塞住,用口来呼吸。暖被的女人,雪中送炭依然无法将这刚从凛冬城出来的解冻。头痛欲裂,随着时间的推移,大概凌晨6点多了,基本的解冻后大概才睡着了。一睡就睡到了第二天的下午4点多,醒来还在温暖的被窝里,这感觉实在是舒服,无法用语言来形容当时的心情。就像小孩回到了温暖的母亲的怀抱,太温暖太幸福了……。充足的睡眠之后感冒缓解了很多,晚饭之后,细细思考了许久。

我们需要有合理的步骤,才能完美的完成任务。

主要是没有经验,造成四处碰壁。因此反复测试,总结经验,通过使用轻量应用服务器的快照功能不断测试实验,最终完美的一步到位完美迁移成功。

总结步骤

一、安装Apache2.4+MySQL5.7设置root密码+php7.1

二、检查配置防火墙、数据库

三、配置SSL、Apache、WordPress

开始折腾

一、安装Apache2.4+MySQL5.7设置root密码+php7.1

1、安装Apache2.4,使用官方控制台里的远程终端,或用PuTTY

[root@iz2zecnv********0sp3z admin]# yum -y install httpd

2、安装MySQL5.7及设置root密码。

###回到根目录############################################
[root@iz2zecnv***0sp3z admin]# cd

###查询系统是否有安装mariadb##############################
[root@iz2zecnv***0sp3z ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.52-1.el7.x86_64

###卸载mariadb,否则会与MySQL冲突#########################
[root@iz2zecnv***0sp3z ~]# rpm -e --nodeps mariadb-libs-5.5.52-1.el7.x86_64

###再次查询,确认是否已卸载mariadb########################
[root@iz2zecnv***0sp3z ~]# rpm -qa | grep mariadb

###下载mysql的repo源#####################################
[root@iz2zecnv***0sp3z ~]# wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
--2018-12-29 03:49:28--  http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
Resolving repo.mysql.com (repo.mysql.com)... 23.218.45.194
Connecting to repo.mysql.com (repo.mysql.com)|23.218.45.194|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9116 (8.9K) [application/x-redhat-package-manager]
Saving to: ‘mysql57-community-release-el7-8.noarch.rpm’

100%[================================================================>] 9,116       --.-K/s   in 0s

2018-12-29 03:49:28 (296 MB/s) - ‘mysql57-community-release-el7-8.noarch.rpm’ saved [9116/9116]

###执行安装MySQL#########################################
[root@iz2zecnv***0sp3z ~]# rpm -ivh mysql57-community-release-el7-8.noarch.rpm
warning: mysql57-community-release-el7-8.noarch.rpm: Header V3 DSA/SHA1 Signature, key ID ***1f5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:mysql57-community-release-el7-8  ################################# [100%]

###上一步到底安装没有?不懂,但步骤不能少。####################
###再次执行yum安装mySQL#####################################
[root@iz2zecnv***0sp3z ~]# yum -y install mysql-community-server
Loaded plugins: fastestmirror
mysql-connectors-community                                                         | 2.5 kB  00:00:00
mysql-tools-community                                                              | 2.5 kB  00:00:00
mysql57-community                                                                  | 2.5 kB  00:00:00
(1/3): mysql-connectors-community/x86_64/primary_db                                |  29 kB  00:00:00
(2/3): mysql-tools-community/x86_64/primary_db                                     |  48 kB  00:00:00
(3/3): mysql57-community/x86_64/primary_db                                         | 162 kB  00:00:00
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package mysql-community-server.x86_64 ...
...
Complete!
###这才确认安装完成了吧##################################

###设置mysql的root用户的密码#############################

###启动mysql############################################
[root@iz2zecnv***0sp3z ~]# systemctl start mysqld

###获取安装时的临时密码##################################
[root@iz2zecnv***0sp3z ~]# grep 'temporary password' /var/log/mysqld.log
2018-12-28T19:59:13.363183Z 1 [Note] A temporary password is generated for root@localhost: p%**-ofw!**v

###使用临时密码登陆mysql的root用户########################
[root@iz2zecnv***0sp3z ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.**

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

###修改mysql root用户密码##############################
mysql> set password=password("**********");
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> \q
Bye

###重启mysql###########################################
[root@iz2zecnv***0sp3z ~]# systemctl restart mysqld

###使用刚修改的root用户的新密码登陆,验证新密码是否成功####
[root@iz2zecnv***0sp3z ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.** MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> \q
Bye
###完成mysql的root用户密码设置###########################

3、安装php7.1

###安装第三方yum源webtatic###############################
[root@iz2zecnv***0sp3z ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
Retrieving https://mirror.webtatic.com/yum/el7/epel-release.rpm
warning: /var/tmp/rpm-tmp.JIyR7c: Header V4 RSA/SHA1 Signature, key ID 62e74ca5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:epel-release-7-5                 warning: /etc/yum.repos.d/epel.repo created as /etc/yum.repos.d/epel.repo.rpmnew
################################# [100%]

###安装第三方yum源webtatic###############################
[root@iz2zecnv***0sp3z ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
Retrieving https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
warning: /var/tmp/rpm-tmp.Z5ivJm: Header V4 RSA/SHA1 Signature, key ID 62e74ca5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:webtatic-release-7-3             ################################# [100%]

###安装php7.1############################################
[root@iz2zecnv***0sp3z ~]# yum install -y php71w-fpm php71w-opcache php71w-cli php71w-gd php71w-mysqlnd php71w-mbstring php71w-mcrypt php71w-pdo php71w-pecl-apcu php71w-pecl-mongodb php71w-pecl-redis php71w-pgsql php71w-xml php71w-xmlrpc php71w-devel mod_php71w

...
...
Complete!
###php7.1完成安装########################################

三件头AMP安装完成之后,先做个快照备份。

二、检查配置防火墙、数据库

1、检查配置防火墙

###查看防火墙运行状态#######################################
[root@iz2zecnv***0sp3z ~]# firewall-cmd --state
not running

###开启防火墙自动运行,心理安慰都是需要的#####################
[root@iz2zecnv***0sp3z ~]# systemctl enable firewalld
Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.
Created symlink from /etc/systemd/system/basic.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.

###重启服务器#############################################
[root@iz2zecnv***0sp3z ~]# systemctl reboot

###再次检查、确认防火墙运行状态##############################
[root@iz2zecnv***0sp3z ~]# firewall-cmd --state
running

###开启防火墙各种需要开启的端口##############################
[root@iz2zecnv***0sp3z ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success
[root@iz2zecnv***0sp3z ~]# firewall-cmd --zone=public --add-port=443/tcp --permanent
success
[root@iz2zecnv***0sp3z ~]# firewall-cmd --reload
success
[root@iz2zecnv***0sp3z ~]#
###完成检查、配置防火墙#####################################

2、检查配置数据库

###查看数据库运行状况###############################################
[root@iz2zecnv***0sp3z ~]# service mysqld status
Redirecting to /bin/systemctl status  mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2018-12-31 14:06:00 CST; 37min ago
......
###Active: active (running)证明正常运行############################

###登陆数据库######################################################
[root@iz2zecnv***0sp3z ~]# mysql -u root -p

###查看数据库字符集#################################################
mysql> show variables like '%character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

###停止数据库,修改数据库字符集为utf8################################
[root@iz2zecnv***0sp3z ~]# systemctl stop mysqld

###数据库配置文件路径###############################################
/etc/my.cnf
###如下,在[mysqld]换行添加如下utf8设置################
[mysqld]
character_set_server = utf8
init_connect = 'SET NAMES utf8'

###启动mysql######################################################
[root@iz2zecnv***0sp3z ~]# systemctl start mysqld

###登陆数据库查看、确认字符集编码#########
[root@iz2zecnv***0sp3z ~]# mysql -u root -p
mysql> show variables like '%character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
###完成字符集编码修改###############################################

###创建数据库、用户###############################################
mysql> create database n***d;
Query OK, 0 rows affected (0.00 sec)

mysql> create user '**user'@'localhost' identified by '***密码**';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all on n***d.* to '**user'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

###查看数据库用户##################################################
mysql> select host,user from mysql.user;
+-----------+---------------+
| host      | user          |
+-----------+---------------+
| localhost | mysql.session |
| localhost | mysql.sys     |
| localhost | root          |
| localhost | **ser         |
+-----------+---------------+
4 rows in set (0.00 sec)
###查看已创建的数据库##############################################
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| n*******d          |
+--------------------+
5 rows in set (0.00 sec)
###完成检查、配置数据库############################################

上面创建的数据库和用户,为稍后的WordPress使用,必须记录好数据库名以及用户密码。

三、配置SSL、Apache、WordPress

1、配置SSL与Apache

###需要安装mod_ssl###############################################
[root@iz2zecnv***0sp3z ~]# yum -y install mod_ssl

安装好mod_ssl之后

在Apache的安装目录下创建cert目录,路径etc/httpd/cert/

然后下载域名免费申请的证书并解压出来。
***.key
***_chain.crt
***_public.crt

上传到此目录:etc/httpd/cert/

修改ssl.conf,路径/etc/httpd/conf.d/ssl.conf

DocumentRoot "/var/www/html"    //*把前面的#符号去掉*//
ServerName www.sg*****.cn:443   //*这里填上自己的域名*//

# 添加 SSL 协议支持协议,去掉不安全的协议
SSLProtocol all -SSLv2 -SSLv3
# 修改加密套件如下
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
# 证书公钥配置
SSLCertificateFile cert/***_public.crt
# 证书私钥配置
SSLCertificateKeyFile cert/***.key
# 证书链配置,如果该属性开头有 '#'字符,请删除掉
SSLCertificateChainFile cert/***_chain.crt

修改Apache配置文件

修改配置文件 /etc/httpd/conf/httpd.conf


#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
#ServerName www.example.com:80
ServerName localhost:80   ### 增加此行代码 ###
### 不然apache日志会出现 #####################
###AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 1*2.*6.*.1*2. Set the 'ServerName' directive globally to suppress this message
#############################################
<Directory "/var/www/html">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks ### 删除Indexes ###

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All ######默认None修改为All#######

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

禁止目录索引,将 Options Indexes FollowSymLinks 修改为 Options FollowSymLinks

不然会出现如下图的目录索引,网站的资源完全暴露出来了,非常坑!

AllowOverride None 修改为 AllowOverride All 不然会出现除了主页之外,所有页面都是404

修改Apache配置文件之后,要重启Apache才能生效。

完成SSL与Apache配置。

我们最好现在重启服务器,然后再次检查防火墙,数据库,各种版本及运行状态。确认无误后,再做一个快照备份。

2、部署WordPress并还原数据库以及文件

首先导入之前备份的数据库到新服务器的空数据库里

###选择刚才创建的数据库########################################
mysql> use n*****d;
Database changed

###导入之前备份的数据库文件####################################
mysql> source /home/1*****z.sql;
Query OK, 433 rows affected (0.01 sec)
Records: 433  Duplicates: 0  Warnings: 0
...
...
###导入完成##################################################

###修改数据,之前http网站改为https############################
mysql> update wp_posts set post_content = REPLACE(post_content,'http://s***z.cn','https://www.s***z.cn');
Query OK, 181 rows affected (0.01 sec)
Rows matched: 869  Changed: 181  Warnings: 0

mysql> update wp_bp_activity set primary_link = REPLACE(primary_link,'http://s***z.cn','https://www.s***z.cn');
Query OK, 712 rows affected (0.01 sec)
Rows matched: 735  Changed: 712  Warnings: 0

mysql> update wp_bp_activity set content = REPLACE(content,'http://s***z.cn','https://www.s***z.cn');
Query OK, 78 rows affected (0.01 sec)
Rows matched: 735  Changed: 78  Warnings: 0

mysql> update wp_bp_activity set action = REPLACE(action,'http://s***z.cn','https://www.s***z.cn');
Query OK, 718 rows affected (0.01 sec)
Rows matched: 735  Changed: 718  Warnings: 0

###还原数据库备份完成###########################################

最后部署WordPress

官网下载最新版本的WordPress5.0.2解压后把wp-config-sample.php更名为wp-config.php并修改

/** WordPress数据库的名称 */
define('DB_NAME', 'n*****d');

/** MySQL数据库用户名 */
define('DB_USER', '**user');

/** MySQL数据库密码 */
define('DB_PASSWORD', '**密码***');

/** MySQL主机 */
define('DB_HOST', 'localhost');

/** 创建数据表时默认的文字编码 */
define('DB_CHARSET', 'utf8');

/** 数据库整理类型。如不确定请勿更改 */
define('DB_COLLATE', '');


/** 添加支持HTTPS */
define('WP_HOME', 'https://'.$_SERVER['HTTP_HOST']);
define('WP_SITEURL', 'https://'.$_SERVER['HTTP_HOST']);
$_SERVER['HTTPS'] = 'ON';
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

然后创建.htaccess文件,内容如下。一同放到WordPress根目录

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

以上是WordPress默认的.htaccess文件,我需要将所有http请求跳转到https,做以下修改

# 301重定向 HTTPS
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.sg*fz.cn/$1 [L,R=301]
</IfModule>

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

上传WordPress根目录所有文件至服务器html目录。

将 .htaccess文件 权限设置为777

然后上传之前旧网站备份的主题及子主题至对应位置,插件及插件语言包到对应位置。注意权限,根据需要设置权限。

最后上传uploads文件夹到对应位置,根据需要设置好权限,不然WordPress上传文件或修改文件时会出错。

最最后,我们终于完成WordPress的搬迁工作了,打开网站测试体验吧!

我经过各种测试之后,回滚快照到AMP阶段,重新配置就一步到位完美完成之后的所有工作。进到网站,仅需调整一下主题的背景图以及网站图标,所有都完美无缺。

不但搬迁累,记录搬迁的过程也不是一件轻松的事情。如果有遗漏或出错的,欢迎指正,以免以后再犯同样的错误。

发表评论