docker系列 使用docker基于wordpress架设博客从站点并实现主从站点配置定期备份
本文最后更新于 103 天前,其中的信息可能已经有所发展或是发生改变,如有失效可到评论区留言。

前言

有这个想法还是因为上次更换了图床的域名,之后在批量修改wordpress数据库里图床地址的时候,因为sql命令在复制粘贴的时候出现了格式问题,导致mariadb里的wordpress数据库崩了,虽然后面靠登录到wordpress里用"WPvivid备份插件"提前做的备份恢复过来了,但是中途博客大概也down了30分钟。。。这还是当时wordpress运气好还能够登录,如果运气不好wordpress都不能登录就要折腾更长时间了,感觉定期使用mysqldump备份mariadb数据库还有有必要的,纳上日程吧(因为源站是架设在macmini上,以前我不太想在macmini上运行脚本)。

考虑了一阵,感觉最稳妥的方式还是架设一个冗余的wordpress站点(可以部署在相同的家庭数据中心,也可以在云主机上或者其他同城(异地)朋友的家里数据中心中),然后通过备份类的插件(例如WPvivid备份插件)定期备份wordpres和数据库的数据到冗余站点上,需要的时候能够立即导入最新的源站备份数据提供服务,结合CDN的热备源站功能后更可以实现:同城(异地)灾备、本地及云的混合部署灾备功能。

创建并初始化mariadb数据库

wordpress需要使用mariadb数据库(mysql也可以,但是有选择的情况下永远优先mariadb),因为我是采用docker run方式部署,所以需要手动创建mariadb数据库并进行初始化配置(如果有现成的mariadb就直接初始化即可),创建新mariadb数据库的流程建议如下:

新建public-net网桥(可选)

docker network create public-net

注:
这一步并不是必须的,但是因为在mariadb容器和wordpress容器里都需要引用public-net这一非默认bridge,从而达到wordpress用容器名直接访问mariadb的目的,所以需要提前创建(如果有现成的其他非默认bridge也可以利旧)。

其实在wordpress里用–link参数直接链接mariadb也能达到一样的目的,但是为了以后容器多了方便管理和运维(例如创建不同的bridge用以连接不同区域的容器),尽量不要使用–link参数,因为容器多了以后到处链接有可能把自己搞晕,不便于运维,所以最好从一开始就养成使用–net参数的良好习惯。

新建mariadb数据库(可选)

如果环境中没有mariadb数据库容器或者不想利旧已有的,则需要新建。

创建宿主机上需要挂载到mariadb容器中的目录

mkdir -p /docker/mariadb/db

创建mariadb容器

docker run格式搭建mariadb数据库的命令如下:

docker run --name=mariadb01 -d --restart=always --net=public-net \
  -p 3306:3306 \ #映射宿主机的3306端口到容器的3306端口
  -v /docker/mariadb/db:/var/lib/mysql \ # 挂载前面创建的宿主机目录到容器内部指定目录
  -e MARIADB_ROOT_PASSWORD=123 \ #指定数据库root用户对应的密码,这个大家自行修改
  mariadb:10.11

初始化mariadb数据库

具体请参考我另一篇文章:奇技淫巧系列 新建空数据库以及给对应用户赋予权限,下文中假定初始化后库名称、对应的用户名和密码均为wordpress。

部署wordpress并初始化

创建宿主机上需要挂载到wordpress容器中的目录

mkdir -p /docker/wordpress/html

部署wordpress

docker run格式搭建wordpress的命令如下:

docker run --name=wordpress -d --restart=always --net=public-net \
    -p 8080:80 \ #映射宿主机8080端口到容器的80端口,请大家根据实际环境选择宿主机端口
    -v /docker/wordpress/html:/var/www/html \ #映射宿主机上创建的目录到容器内指定路径
    wordpress

注:请自行删除#后面的注释

初始化wordpress

使用http://宿主机IP:8080登录,语言选择简体中文以后点击右下角红框中的继续:

image.png

点击下图红框中的"现在就开始"开始初始化:
image.png

按照初始化数据库时候配置的参数进行填写,最后点击做下的"提交"按钮开始初始化wordpress库:
image.png

如果前面配置都这样的话,出现如下成功界面:
image.png

点击右下角红框中的"运行安装程序",就进入wordpress一些关键信息的填写,包括站点标题、用户名密码和管理员邮箱等,填写完毕以后点击左下角红框中的"安装":
image.png

至此,wordpress初始化工作终于完成了,点击左下角红框中的"登录"进入wordpress并开始正式配置。
image.png


注:如果是完全新建的一个站点,之后就进入正式配置wordpress的步骤了,这个我以后会专门用一篇文章来总结入门wordpress的一些经验,包括插件,主题配置等。。。本文中就不涉及了,其实这方面我也只是个半罐水。


如果需要通过反向代理发布到公网上,可以参考我另外的两篇文章:docker系列 使用docker基于NPM搭建自己的反向代理linux面板系列 配置反向代理并使用非443端口进行发布

安装并启用WPvivid备份插件

如红框所示,在"插件"界面点击红框中的"添加新插件":

image.png

在右上方搜索框里搜索WPvivid备份插件,然后点击红框中的"立即安装":
image.png

点击红框中的"启用":
image.png

进入WPvivid配置界面:
image.png

终于进入正题了,之后就需要分别在源站和主站进行WPvivid的配置。

在目标站点安装ftp服务器软件(可选)

源站上的WPvivid备份插件主要的工作就是备份源站的wordpress数据和数据库中的相关库文件到本地或者远程存储。在本文中最佳方式是通过FTP直接备份到目标站点上WPvivid插件的目录中,这样,目标站点可以快速的直接导入信息。当然这个也不是必须的,可以备份到任何远程存储上,如:

image.png

只是用其他远程存储就要多2步操作:自行去远程存储下载备份和上传到目标站点的WPvivid插件的目录中这2步操作,也多花不了多少时间(就是略显low),所以我才说这一节的内容是可选。

在目标站点安装ftp软件的方式跟目标站点操作系统环境有很大关系,我的目标系统是debian12的虚拟机并安装了宝塔linux面板,所以我就以我的环境为例演示ftp的安装,其他环境请大家自行研究了,左右就是装个ftp服务器端而已。

在宝塔面板的"软件商店"中搜索并安装"Pure-Ftpd":

image.png

然后在"FTP"点击"添加FTP"用以添加目标站点上的ftp用户及主目录:
image.png

关键在于红框中用户的根目录指向:
image.png

该路径为:

/docker/wordpress/html/wp-content

为何路径是上面这个,其实在WPvivid的配置界面里就看得出来:

image.png

因为后面在WPvivid通过ftp的方式添加远程存储的时候不能直接用"/"指定根位置,所以这里把FTP用户的根目录指向了/wp-content,方便后面添加的时候用/wpvividbackups的方式指定根目录。

添加FTP用户成功以后,请确认根路径是否正确:

image.png

ftp被动模式连接目标站点,pure ftp的配置需要做如下修改:

image.png

PassivePortRange:
定义ftp服务器端工作在被动模式时告诉源站点ftp客户端建立数据连接可以连的端口范围(请根据实际情况修改),因为需要在目标站点防火墙上进行配置(如果启用了的话),这里比较复杂的是,如果目标站点是架设在云主机上,则需要同时在云主机供应商的安全策略以及云主机本身的安全策略上都允许这些端口,例如,如果是使用腾讯云上的云主机,则先需要在:
image.png

然后在云主机debian系统本身的ufw防火墙允许这些端口的访问。

ForcePassiveIP:
这个非常重要,如果是同一个内网环境,需要指定目标站点wordpress宿主机的内网IP地址;如果是云主机,则直接使用公网IP即可。

配置完以后可以用ftp客户端使用被动模式进行访问确认目标主机上的ftp服务器是否能正常运行。

注:
ftp的主动模式和被动模式其实蛮有意思的,理解了以后很多网络故障都能理解了,建议大家有兴趣的话好好研究下。大家ftp环境可能都不一样,出了问题可能需要自行分析原因,实在不行就只能用其他方式了。

另外,如果结合tailscale之类的虚拟局域网软件提供的ip地址,就可以和同城,异地,甚至和世界上任何地方主机形成灾备、热备的解决方案。

源站WPvivid配置

添加远程存储

根据上一节中目标站点ftp的相关配置信息进行填写:

image.png

路径不是目标站点宿主机的绝对路径,而是相对于ftp用户设置根目录的相对路径,这里很重要,我都被折腾了半天~。

如果连接成功会在下方的存储选项下显示:

image.png

计划备份

根据自己实际需求在计划标签里选择备份频率及备份内容,然后选择"发送文件到远程存储",然后选择左下角红框中的"保存修改":

image.png

默认计划备份会将源站的备份数据上传到目标站点以后删除本地的备份,如果大家想要在源站也保留计划任务生成的备份,需要在设置标签下勾选红框中的选项:
image.png


注:这种方式有诸多限制,虽然可以用,但是已经不是推荐方式了,原因和替代方式放到最后部分讲。


如果想要在计划时间之外手动配置,可在"备份&恢复"标签下进行:

image.png

这里可以先备份一次,方便目标站点上进行查看。

目标站点WPvivid配置

其实目标站点不需要做什么配置,只需要在备份&恢复标签下点击红框中的"扫描已上传备份或接收备份",然后在下方出现的备份中选择点击还原即可,因为我们上面在源站点备份了一次,所以点击下方红框中的"扫描已上传备份或接收备份"按钮,正常应该可以看到上面源站的备份数据:

image.png

总结

其实这种方式的关键就是源站点通过ftp把备份文件直接上传到目标站点的WPvivid插件存放备份的目录中,这样,目标站点只需要扫描一下就可以立刻看到源站点的配置文件并即使进行恢复,就算源站点的wordpress完全打不开了,也可以在极短的时间内恢复wordpress的访问。不过,即使不通过ftp的方式而是其他的远程存储的方式,也就多了一步下载下来然后手动传到目标站点的动作而已,其实时间也多不了多少,但是技术观感方面就不如这种ftp的方式了。

另外,从站点也通过反向代理发布后,可以在CDN上把热备源站指向这个从站点,从而实现wordpress站点的灾备,当然,这样的话,从站点就最好部署在云主机或者异地,像我都部署在家庭数据中心中,一停电就一起over了。。

使用一段时间之后,已经淘汰使用FTP进行远程备份这种方法了,有2个原因:
1、只能设置一个远程节点
我现在除了内网里的一个热备wordpress站点以外,在腾讯云服务器上还有一个镜像站点,以后说不定还有更多,备份一个远程节点可不够。
2、还原的时候需要验证
使用FTP这种方式备份的配置,我在远程站点还原的时候居然要我输入FTP服务器的信息(IP,端口扣,用户名密码),比较让人蛋痛。

所以思路虽然还是一样的,但是我改变了实现的方法,将直接通过ftp将定期备份的配置发送到远程从站点,改为使用syncthing的多点文件夹同步的方式来实现。
将主站点WPvivid定期备份的文件从"发送文件到远程存储"改为"保存备份到本地":

image.png

然后使用syncthing将WPvivid本地目录中定期备份的文件直接同步到其他站点WPvivid插件的的相同目录中,这种方式就非常完美了,详细的syncthing配置方式参见我另一篇文章:docker系列 使用docker基于syncthing实现多点文件夹同步之详细教程

博客内容均系原创,转载请注明出处!更多博客文章,可以移步至网站地图了解。博客的RSS地址为:https://blog.tangwudi.com/feed,欢迎订阅;如有需要,可以加入Telegram群一起讨论问题。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
       

本站已禁用鼠标右键和各种快捷键,代码块内容可以直接在右上角点击复制按钮进行复制

zh_CN