前言
wordpress是支持多站点功能的,但是一直以来我感觉并没有很迫切的多站点的需求,并且也不想用正常运行站点的设备做实验,所以一直没去折腾。
前几天为了写wordpress多站点的解决方案(参见文章:家庭数据中心系列 活用cloudflare tunnel实现wordpress主站点故障时灾备站点自动接管),又99元撸了一个阿里云的云服务器,现在方案写完了,云服务器空闲了下来,就想着干脆趁这个机会把wordpress多站点的功能熟悉一下,以后有需要的时候也可以马上用起来。
不过照着网上的各种教程折腾了半天,发现对于已经运行了很久的站点而言,直接开启多站点功能有太多不方便的地方:
1、不能使用子目录的部署方式
对于已经运行超过1个月的站点,子目录部署的方式就无法选择了(虽然我用不上),不过我相信对很多朋友而言这是一种方便的部署方式。
2、子域名模式会有些莫名其妙的问题
启用了基于子域名的多站点模式之后,根据wordpress站点以前的域名访问方式设置(参见文章:奇技淫巧系列 wordpress支持多域名访问功能简易设置教程),会出现不同的莫名其妙的问题,最后还是修改了wordpress数据库的wp_options表中的site url和home才解决,不过能访问之后感觉也不太对,在控制台中时而会遇到打不开页面需要重新刷新的情况,总之就是不太爽。
最终,决定采用重新部署新站,开启多站点之后,再恢复其他设置的方式来进行,本文中假定将我的域名”blog.tangwudi.com”对应的wordpress的内容迁移到域名为”test.tangwudi.com”的全新的并开启了多站点wordpress上。
重新部署wordpress
这里不多说,可以参看以前的文章:docker系列 使用docker基于wordpress架设博客从站点并实现主从站点配置定期备份。
开启多站点
编辑wp-config.php文件,找到如下描述:
/* That's all, stop editing! Happy publishing. */
然后在这行上面添加代码并保存:
define( 'WP_ALLOW_MULTISITE', true );
如下图:
然后进入仪表盘,在工具菜单下多了一个配置网络的选项:
如果出现下图的警告,是因为没有配置*.test.tangwudi.com的泛域名解析指向该站点,这个不用管,之后只要正确配置子域名即可:
根据下图红框中的提示正确配置站点网络:
![image.png](https://image.tangwudi.com/images/2024/06/06/202406061855380.png)
保存完后重新登录,可以看到多出来一个”我的站点”的选项,里面的”管理网络”就是添加新站点的关键了。
具体如何添加新站点、如果添加某个站点的管理员这些我就不多讲了,网上的教程很多,也没有啥难度,这并不是本文要讲的重点。
迁移老站点数据到新站点
其实,网上很多开启wordpress多站点的教程到了上一节就结束了,如果是全新站点很正常,不过我们是运行了很久的、有很多内容的老站点开启多站点,就还需要迁移数据,当然,这个迁移也分为wordpress程序数据和数据库里内容。
迁移老站点wordpress程序数据
前置知识:wordpress程序有3个目录,分别是”wp-admin”、”wp-incloudes”、”wp-content”。
“wp-admin”目录:包含了控制 WordPress 仪表板的管理文件;”wp-incloudes”:包含了存储管理 WordPress 外观的文件;”wp-content”:包含网站使用的所有主题、插件、升级或上传的文件夹。
为了尽量不影响新站的配置文件,我直接把老站的3个目录:”wp-admin”、”wp-content”、”wp-incloudes”拷贝到新站上,然后访问出现如下报错:
理论上这个时候最佳方式应该是找到哪个配置文件里指定了twentytwentyfour这个主题,然后修改为指向已有的主题,但是我大概看了一下,没找到。。懒得折腾,直接把现有的主题,如下图红框的文件夹”twentytwentytwo”的名字,改成了”twentytwentyfour”,
然后就可以访问了:
使用
https://test.tangwudi.com/wp-admin/my-sites.php
进行访问,可以看到插件这些都过来了:![image.png](https://image.tangwudi.com/images/2024/06/07/202406071553366.png)
主题也过来了,不过老站使用的agron主题不是默认主题,并且也没有启用:
将argon主题改为在所有站点中启用:
![image.png](https://image.tangwudi.com/images/2024/06/07/202406071613017.png)
注1:启用多站点之后,直接使用https://test.tangwudi.com/wp-admin
访问的只是主站点”test.tangwudi.com”的仪表盘(后续其他的子站点都是类似的),要全局控制所有站点的插件、主题、文章等内容,需要访问https://test.tangwudi.com/wp-admin/my-sites.php
:
注2:倒腾了很久,最后发现”wp-content”目录下的”plugins”目录,就是原本插件的安装目录,最好还是清空比较好,因为有些插件不支持多站点(或者收费版才支持多站点),直接考过去会引起一堆问题,还是在新站点上根据实际情况重新安装的好,这个问题浪费了我起码一天的时间。
迁移老站点文章等数据到新站点的主站点上
原本这里我想着很简单:要么直接把老站点的wordpress数据库导到新站点上,或者使用WPvivid备份插件把数据库内容直接恢复,但是发现不行,直接导入老站点导出的sql文件之后站点都可能打不开了。。,我想是因为单站点和多站点的数据库一些格式不一样,而WPvivid备份插件干脆说免费版不支持多站点,要升级pro~~~。所以我就采用比较原始的方式:在老站点上导出所有数据为xml文件,然后在新站点的主站点上进行导入:
![image.png](https://image.tangwudi.com/images/2024/06/08/202406081611307.png)
docker部署的wordpress默认有最大上传文件1兆的限制,如果老站点导出的xml文件不超过1兆直接导入即可,但是我的是2.7兆,远大于1兆,所以需要修改wordpress容器中的php.ini。
因为我习惯使用vim,所以需要使用apt安装,但是,默认的wordpress容器里没有”/etc/apt/sources.list”文件,所以无法使用apt,所以我使用如下命令生成了sources.list:
cat <<EOF >/etc/apt/sources.list
deb http://deb.debian.org/debian/ bookworm main contrib non-free-firmware
deb http://deb.debian.org/debian/ bookworm-updates main contrib non-free-firmware
deb http://deb.debian.org/debian/ bookworm-backports main contrib non-free-firmware
deb http://deb.debian.org/debian-security/ bookworm-security main contrib non-free-firmware
EOF
然后就可以运行如下命令安装vim:
apt update
apt install vim
最后使用如下命令编辑php.ini:
cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini
vim /usr/local/etc/php/php.ini
一般修改如下2个参数即可:
upload_max_filesize = 20M #按自己实际需求修改
post_max_size = 30M #按自己实际需求修改,一般这个的数值要大于上面的upload_max_filesize
在主站点里导入老站点导出的xml文件:
然后在外观之中启动argon的主题:
最后访问主站点,这时候基本框架就已经好了:
![image.png](https://image.tangwudi.com/images/2024/06/08/202406081949443.png)
剩下的就是重新安装插件,顺便看看哪些插件支持多站点模式,不支持的还要寻找替代方案,还要设置插件,如果真要弄的话还要花些时间,这里我就不多说了。
总结
其实吧,这么折腾了一圈下来,发现多站点模式在运维上的确没有单一站点模式方便,从单一站点迁移到多站点模式也还是比较折腾的,如果多站点模式其中一个站点的重要性远高于其他站点,我觉得还是不要搞多站点模式为好,不然如果其中一个不重要的站点被攻击出了问题,还要连累重要的站点一起倒霉。
另外,我觉得,如果要使用多站点模式,最好从一开始就规划好,就从一个全新的站点开始设置,一来子目录模式还是很实用的,不用折腾子域名,如果部署群站并且有详细的规划,子目录模式会非常适合;二来,运行了一个月就只能设置子域名模式了,而如果已经运行了这么久,估计插件这些都已经配置磨合好了,再来搞基于子域名的多站点模式,就插件这里就会很折腾,有点事倍功半的感觉。
使用子域名模式,如果能使用二级域名作为主域名是最好的,比如我这里就是”tangwudi.com”,这样在后续添加其他站点的时候,解析会比较容易添加,按照我文章的”test.tangwudi.com”,如果要添加子域的话,就是”site1.test.tangwudi.com”,这样会比较难看,当然,这个可以使用cname来解决,比如”abc.tangwudi.com cname site1.test.tangwudi.com”,这样访问也没问题,只是配置反向代理的时候访问host做好正确的设置即可。
综上所述,默认的单一站点模式和多站点模式各有各的好处,最好在建站的时候就做好规划,选择其中最适合自己的建站方式,一旦站点运行起来之后,最好就不要再折腾了。