WordPress网站的手动迁移

这是我第一次在外部服务器上写文章,前面所有的文章都是在本地服务器完成的,主要是这几天把博客网站转移到了外部,期间的过程觉得非常有必要做个分享,也写几句心得体会。

很早以前就想把博客放到外面去,但一直是拖延症状态,所以就在内网自言自语了很长一段时间,新的一年都开始了,终于下了决心做这件事。网上百度了一番,wordpress的迁移有很多种方法,用专门的插件简单方便,但觉得我也这样做似乎没有乐趣,同时也想搞清网站运行和设置的一些底层原理,决定还是手动进行迁移,由于能借鉴的信息不多,整个过程花费了不少时间,但收获也不少。

几点感受:

1、手动迁移网站涉及的过程比较复杂,也要求多方面的技术,如果没有一些Linux方面的基础,不建议这样做,另外没有太多时间、不想太麻烦的人也不建议这样做,毕竟这个过程还是比较耗时耗力的。当然如果你有折腾的精神,非常值得,能学到不少东西,也是一个成长的经历。

2、任何时候还是要善于学习,网络上还是有许多有意义的教程,当然更要善于自己分析问题,尝试解决问题,由于系统环境不同,同样的问题别人的答案,你未必有用,其中很多问题主要还是要靠自己摸索,所以经验分享出来,也是对学习别人经验的一种回馈吧。

3、wordpress是一个依靠apache和PHP运行的内容管理系统,因此根本不需要另外安装什么面板之类的东西,环境搭建在一般的Linux发行版上几条命令就可以完成,真正有难度的是网络环境配置和wordpress本身数据的更改。

这里主要谈一些系统迁移的基本要求和思路,注意的问题,不详细讲每一条命令。

一、服务器的选择

操作系统环境建议选比较通行的Linux发行版,因为这样发行版有比较好的包管理,一些基本的系统组件,一条命令就能安装好,也能很方便就在网络上搜索到有用的帮助,我选的是Ubuntu。

新的操作系统运行后,首先是更新源,建议安装防火墙,放行80和443端口,主要是考虑安全问题。

系统建设阶段也可直接用root帐户登录,方便一些,网站运行后再用普通用户身份维护。

二、准备域名和证书

域名一般需要购买,也要做好解释,这是建站的基础设施。

证书可以购买,但最好是直接自己申请免费的证书。

以上要求,网络上教程很多,要完全靠自己准备好,没有经验的人也是要花很大精力的。

三、网络基础环境搭建

1、安装Apache2

apt install apache2

安装完成后,apache默认自动启动,通过以下命令查看 apache 运行状态:

systemctl status apache2

输出类似内容,说明已经安装成功并默认运行。

到这里其实就可以依赖apache运行静态的网站了,在浏览器输入 hhtp://ip(域名),将出现apache的示例页面,表示系统安装成功。

2、安装PHP

apt install php

apt install libapache2-mod-php

apt install php-mysql

其中libapache2-mod-php和php-mysql是支持PHP与apache和数据库运行的扩展。

四、数据库环境

wordpress运行时,很多状态和设置信息都需要储存在数据库中,所以系统正常运行还需要配置好数据库环境。

由于是做wordpress的迁移,这里安装的数据库最好与原网站运行的数据库一致,免去不必要的麻烦,我用的是MariaDB。

1、安装数据库

apt install mariadb

可以用systemctl status mysql命令看数据库是否正确安装:

2、 设置数据库帐户密码

MySQL 安装完成后,为安全起见,建议运行 MySQL 的安全配置,设置 root 密码等:

mysql_secure_installation

设置 root 密码,之后一路提示默认输入 y,回车即可。

3、 创建wordpress数据库以及帐户、密码

mysql

CREATE DATABASE aadb DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

CREATE USER ‘bbuser’@’localhost’ IDENTIFIED BY ‘xxxxxxxx’;

GRANT ALL PRIVILEGES ON *.* TO ‘bbuser’@’localhost’;

使变更生效

FLUSH PRIVILEGES;

这里设置的数据库、用户和密码都在后面wordpress的设置中用到。

五、将原网站文件数据上传到新网站

1、原网站导出数据库

1.1 从原网站导出数据库并保存为本地1234.sql文件

1.2 在原数据库中新建一个数据库,并把上述数据导入

1.3 将1.2新建数据库中的部分字段修改为新网站的链接,并再次导出为5678.sql文件

1.4 将5678.sql文件上传到新网站备用

2、新网站导入数据库

将5678.sql文件导入到新网站的aadb数据库

3、原网站数据打包

将原网站整个主目录用压缩软件压缩为abcd.zip文件,并将abcd.zip文件上传到新网站。

原网站数据一定要进行打包,再在外部服务器解压,因为都是小文件,不打包直接上传可能需要几个小时,而打包再上传可能只要几分钟。

4、新网站主目录解压数据

将abcd.zip文件解压到准备放置新网站的主目录位置,根据apache的文档建议,放置在/var/www目录下比较好,如/var/www/cc 等,如果想放在别的地方也没有问题。

六、设置新网站

原网站数据上传后,数据里面的很多内容还是原有的,并不能在新网站直接使用,比如链接、程序接口等,这些都要进行手工更换。

新网站要运行老网站的内容,新网站的网络门户必须配置好利用原网站的内容,同时原网站中wordpress目录中的基本配置也要修改,使它能正确在新系统环境中运行。

1、wordpress配置数据

进入系统后台,修改主目录下的wp-config.php文件

wordpress启动要连接数据库,以上config文件就配置好了数据库。

2、网络环境配置

涉及修改的文件主要以下几个:

2.1 /etc/apache2/apache2.conf

加入DirectoryIndex index.php index.html语句,因为wordpress直接首页运行php。

加入新网站主目录,并配置好。

2.2 /etc/apache2/mods-available/dir.conf

index.php移动到最前面

2.3 /etc/apache2/sites-available/000-default.conf和/etc/apache2/sites-enlabled/000-default.conf

通过网站环境的配置,就将新网站指向了80端口和自己原数据的主目录

3、验证新网站的运行

浏览器输入 http://域名(ip)将出现wordpress的页面,只是页面上的链接是失效的。

七、为网站使用https连接,并修复链接

到第六步其实已经基本完成网站的迁移,可以在更换链接数据后,从80端口进行访问,但在外网环境这样肯定是不安全的,没有实际意义,所以要为网站设置https访问。

1、修改/etc/apache2/sites-available/default-ssl.conf文件

其中,DirectoryIndex index.php是添加内容,证书位置改为自己上传证书位置

2、 链接上述修改文件到 site-enabled

ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/000-ssl.conf

只要sites-available/default-ssl.conf做了修改之后sites-enabled/000-ssl.conf也会做相应的修改。

3、 上传证书到指定目录

4、 重启apache2服务

systemctl restart apache2

5、验证https浏览,出现登录页面

6、修复网站中的链接

mysql

use aadb

update wp_posts set post_content=replace(post_content,’http://eeeeee’,’https://fffffff’);

此时进入后台,各项功能应该正常,包括跳转到各个栏目以及进入文章的浏览、修改和写文章。

7、 强制开启SSL连接可以提高网站的安全性

修改/var/www/wordpress/wp-config.php

添加以下文本:

define(‘FORCE_SSL_LOGIN’, true);

define(‘FORCE_SSL_ADMIN’, true);

至此,整个迁移工作就完成了,步骤还是比较多的,很多地方只讲到了原理,细节部分都可以从网络上学习到,这里讲的是整个过程,正确完成需要的是耐心。

Docker容器一次更新多个动态域名

动态域名的地址更新要用到客户端,试过多种形式的客户端发现都不好用,总结起来,常用的客户端有以下几个:

1、Linux等系统下的脚本

2、某些系统自带的专有工具、插件等

3、桌面系统的应用程序

这些工具表现的问题主要j :

有的是一次只能更新一个域名,多个域名需要设置多个任务,或者有的工具仅内置了较少的几个DDNS服务商,自己的服务可能不在其中,或者要安装专门的程序,手动运行不方便,自动运行耗资源。特别是多数客户端没有配置的详细说明,设置好运行不起来,无法正常更新。

经过多次比较,采用Docker容器方式能较好地解决以上问题,几乎不需要太多额外的设置,容器以极低的资源消耗常驻后台运行,可以任意设置地址检查和更新时间间隔。

1、从DockerHub中下载镜像

2、创建一个配置文件,按文档说明填入域名更新的配置信息

每个镜像关于配置都有详细的说明和示例,只要认真阅读,非常容易就能正确配置好。

3、启动容器,映射以上配置文件,系统即自动运行,其他参数可以全部默认,如果有需要可以研究一下镜像的说明文档,按要求进行修改即可。

用CNAME记录解决多端口服务访问

我们可能需要部署多个服务,特别是在一些条件限制下,只能用域名后跟端口号来作为服务的入口,如果购买多个域名费用也不少,而且维护起来非常繁琐,其实比较好的是在二级域名下配置多个子域名,这样一个端口就可以接入多个服务,避免一堆端口,怎么也记不住。

子域名可以用A记录,也可以用CNAME记录。A记录指向IP地址,所以需要针对每个地址配置DDNS,这样要配置很多的动态解释,而且有些客户端很不好,不容易连接成功,有些甚至对一个DDNS服务商限制多个动态解释,如群晖。而CNAME是指向域名,只要被指向的域名不变,永远能保证CNAME记录解释到正确的IP,不用进行解释记录的动态更新。

这样利用已有的域名和反向代理,不做DDNS和泛解释,一次性使用多个三级域名代替原来的多端口连接,简单方便且稳定。

一、申请域名

注册域名服务商,申请购买二级域名,如 xxx.com

申请方法网络上很多,有些还比较便宜

二、注册域名解释服务商

在网络找一家比较靠谱的免费域名解释服务商,完成注册,并添加第一步注册的域名。查找到该服务商的域名解释服务器地址,并复制下来。

三、设置域名服务器

登录购买域名的服务商,在相关设置页面,设置Name Server为解释服务商的域名解释服务器地址,将xxx.com域名的解释服务指向域名解释服务商。

以上设置有一个生效时间,有的甚至需要24小时,可能需要等待。

四、在域名解释服务商设置CNAME记录

进入服务商的DNS设置页面,添加CNAME解释,域名如aa.xxx.com bb.xxx.com cc.xxx.com等。

Name填以上aa等,将Hostname填写为你已有的域名,TTL改为600秒,提交。

五、验证以上三级域名的解释

在任意浏览器输入以上aa.xxx.com:1234 bb.xxx.com:1234 cc.xxx.com:1234等地址,应该能正确访问并指向同一个服务。

六、为以上三级域名设置反向代理,将域名指向不同的服务

反向代理的设置需要修改服务器上的网络门户,网络上有大量的教程,通过设置以后,以相同的端口号访问以上不同的域名,将进入不同的服务。

七、为以上域名申请免费SSL证书

用以上域名直接访问,浏览器会提示不安全,因为此时用的是http访问,而浏览器认可的安全访问需要经过认证的https访问。

现在证书的申请可以用acme标准的客户端进行连接,并自动续期,客户端有各证书机构自己开发的,也有第三方开发,第三方客户端有的可以适应多个机构的申请。

1、准备一个linux环境,安装必要的依赖

apt install cron -y && apt install socat -y && apt-get install curl -y

2、下载并安装一个第三方客户端

curl https://get.acme.sh | sh

3、向环境变量中加入申请证书需要的ID和密码

export ID=””
export Secret=””

以上的ID和密码,是以API方式进行域名服务器的登录,用以上方式登录后才能在证书申请中获得DNS的认证,每个DNS解释服务商的ID和密码都不一样,可以在服务商的文档中找到或向客服咨询。

4、申请免费的SSL证书

~/.acme.sh/acme.sh –issue –dns dns_ali -d aa.xxx.com -d bb.xxx.com -d cc.xxx.com –server letsencrypt

–dns dns_ali表示域名解释服务商是阿里,每个服务商的简称不一样,可以在相关文档中查找。–server letsencrypt表示向letsencrypt申请免费的证书,该第三方客户端默认的是向ZeroSSL 申请证书,需要注册和收费。

运行成功后系统会提示证书和密钥存放位置,将两个文件复制并保存。

八、为反向代理使用证书

将证书和密钥导入系统,并为反向代理使用证书,再次在浏览器访问将不再提示安全问题。

参考文献

群晖反代服务器实现外网访问内网服务无需端口号

Let’sEncrypt 免费通配符/泛域名SSL证书添加使用教程