不知不觉中博客已经一周年了,准确的说已经一年半了(这篇文章躺了一段时间了 )。WordPress 博客的管理比较省心,该有的功能都有,不折腾能写就行!博客环境配置基本和刚搭建时差不多,博客备份严重依赖 vultr 的快照备份。因为搭建博客的 vps 用的是 vultr,在一些特殊月份会被大规模墙 ip ,不过域名没墙,一直靠 Cloudflare 的 CDN 苟。最近给谷歌账号绑上了外币银行卡,又遇上 rmb 美元汇率破 7 ,囊中羞涩,准备把博客从 vultr 迁移到送 300 美元赠金免费一年的谷歌云(Google Cloud Platform)。
文章目录
博客备份——Rsync 同步
使用 tar 和 mysqldump 备份
因为 vps 上没啥别的东西,过去就直接上 vultr 网页进行快照备份了。博客内容越来越多,这么不怎么保险,是应该单独备份博客内容了。了解了下 WordPress 博客备份,还不算麻烦,不外乎备份博客目录文件和备份数据库。博客是使用 LNMP 一键包安装的,其实作者是有给备份脚本的,在 LNMP 安装包下的 tools 目录里,其中的 backup.sh 就是备份脚本,脚本不复杂,主要就是使用 tar
打包压缩博客目录文件,使用 mysqldump
导出备份数据库。可以自己手动尝试一下。
1 2 3 4 5 6 7 8 |
mkdir -p /home/backup # 建立备份存放的目录 # 博客目录备份压缩文件名 博客目录父目录 博客目录 tar -Jcv -f /home/backup/wp-starrycat.me-$(date +"%Y%m%d%H%M").tar.xz -C /home/wwwroot/ starrycat.me # 数据库名 数据库备份文件名 /usr/local/mysql/bin/mysqldump -uroot -p db_sc > /home/backup/wpdb-db_sc-$(date +"%Y%m%d%H%M").sql # 备份全部数据库 /usr/local/mysql/bin/mysqldump -uroot -p --all-databases > /home/backup/all-$(date +"%Y%m%d%H%M").sql ls -alh /home/backup # 可以查看一下备份文件大小 |
使用 Rsync 同步
Rsync 是一款强大的同步备份软件,支持增量备份。支持本地备份和远程备份(shell 模式和 daemon 模式)[1]。daemon 模式分服务端 Server 和客户端 Client,这里我们的 vps 是服务端,客户端是我们本地计算机,都需要安装 rsync。
1 |
apt install rsync |
配置 Rsync 服务端
服务端需要常驻服务,默认监听 TCP 端口 873,需要额外配置一下(不是很麻烦)。
1 2 3 4 5 6 7 8 |
# 查看一下 rsync 的配置文件模板 cat /usr/share/doc/rsync/examples/rsyncd.conf # 创建配置文件 touch /etc/rsyncd.conf # 创建密码文件 touch /etc/rsyncd.secrets # 修改密码文件权限 chmod 600 /etc/rsyncd.secrets |
以下是我的 rsyncd.conf
,仅供参考哈。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# GLOBAL OPTIONS log file=/var/log/rsyncd pid file=/var/run/rsyncd.pid # MODULE OPTIONS [wordpress] # 模块名 客户端会用到 comment = WordPress Backup # 模块描述 path = /home/backup # 备份目录 use chroot = yes # rsync 服务器传输文件前先 chroot 到 path 参数指定的目录,实现额外的安全防护 max connections=2 # 最大连接数 lock file = /var/lock/rsyncd # 指定锁文件 read only = yes # 禁止客户端上传文件 list = yes # 显示文件列表 uid = root # 指定 rsync 守护进程的 uid gid = root # 指定 rsync 守护进程的 gid auth users = starrycat # 指定允许连接该模块的用户,客户端会用到,与系统用户无关 secrets file = /etc/rsyncd.secrets # 指定密码文件 strict modes = yes # 检查密码文件的权限 ignore errors = no # 忽略 delete 操作的 I/O 错误 ignore nonreadable = yes # 忽略没有访问文件权限的用户 transfer logging = no # 使用 ftp 格式的文件来记录下载和上载日志 log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes. # 设定日志格式 timeout = 600 # 超时设置(秒) refuse options = checksum dry-run # 不允许客户端对该模块使用的命令列表 dont compress = *.xz *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz # 压缩传输时不再压缩的文件 |
密码文件 rsyncd.secrets
的格式:username:passwd
。其中 username 为配置文件 rsyncd.conf
中 auth users 设定的用户名,多个 username 分多行写,示例:
1 |
starrycat:123 |
启动 rsync 服务端:
1 2 3 4 5 6 7 8 |
# 修改 /etc/default/rsync 文件,将 RSYNC_ENABLE 从 false 改为 true vim /etc/default/rsync RSYNC_ENABLE=true # 启动 rsync 服务 /etc/init.d/rsync start # 查看 rsync 服务状态 systemctl status rsync.service netstat -a | grep rsync |
Rsync 命令的使用
在客户端我们使用 rsync 命令进行同步服务端备份,基本语法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 本地同步备份 # 源目录 目标目录 rsync [OPTION...] SRC... [DEST] # rsync 遵循 BSD cp 的约定, 源目录后面带有一个斜杠“/”有着特定的处理 # 不以斜杠结尾:目录 DEST 里面有【目录 SRC 本身】 # 以斜杠结尾:目录 DEST 里面有【目录 SRC 里面的文件】,目录属性为目录 SRC 的 # 远程 shell 模式 Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST:DEST # 远程 daemon 模式 Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST::DEST rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST |
常用选项:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
-v, --verbose 详细模式输出 -P 等同于 --partial 保留因故没有完全传输的文件,实现断点续传 --progress 显示同步进度 -H, --hard-links 保留硬链接 --password-file=FILE 从 FILE 文件中得到密码 -a, --archive 归档模式,等同于 -rlptgoD -r, --recursive 对目录递归处理 -l, --links 保留软链接 -p, --perms 保持文件权限 -t, --times 保持文件时间信息 -g, --group 保持文件属组信息 -o, --owner 保持文件属主信息 -D, --devices 保持设备文件信息 |
现在我们来试试!
1 2 |
# 用户名 vps ip 地址 模块名 本地备份目录 rsync -avPH starrycat@ip::wordpress /mnt/f/wordpressbackup |
rsync 还有众多功能选项,可自行 man rsync
。
博客迁移——GCP 试用
GCP(Google Cloud Platform),也就是谷歌云啦,由谷歌推出的云端服务平台。之前听说到谷歌云,听到的最多就是谷歌送你 300 美元免费用一年。谷歌的这个推广真是大方,不过也得到了想要效果,更多人了解到了谷歌的云端平台,并去尝试谷歌云,毕竟免费一年,不用白不用 。这个活动已经有好几年了,现在申请的条件就是要有一个没有用过谷歌云,且绑定了外币银行卡的谷歌账号,然后就是到这里申请:https://cloud.google.com。
和 vultr 对比
谷歌云最低配为台湾节点的机器,机房在台湾彰化县,作为对比的是 vultr 日本东京机房。
对比项 | GCP 台湾彰化 | vultr 日本东京 |
---|---|---|
价格 | $5/mo | $5/mo(不包括流量费) |
CPU核心 | 1 | 1 |
内存 | 0.6GB | 1GB |
磁盘 | 10G HDD(可以换 SSD 和大小,费用会有所增加) | 25G SSD |
流量 | 出站流量中国大陆 $0.23/GB,入站流量免费 | 1T |
快照 | 支持增量备份,5GB/mo(仅个别地区有) | 完全备份,限制在同等容量及以上的机器上恢复 |
为了更全面对比,找了个系统测试脚本[2]跑了下:
1 2 |
# 测试脚本 wget -qO- https://raw.githubusercontent.com/oooldking/script/master/superbench.sh | bash |
从上表和上面两张测试结果图可以看出,GCP 的配置和性能被同价位的 vultr 秒杀 ,更直观的感受就是安装 LNMP 的时间了,谷歌云要两个多小时,vultr 只要四十分钟。不过谷歌云也不是没有优点的,那就是谷歌云免费一年嘿嘿 。以每月最低配 5 美元来算,一年 12 个月,折算下来每月可用流量 80 多GB,还要啥自行车。还有一个优点就是谷歌云有台湾和香港节点,国内访问有很大优势。就我使用的台湾节点,电信联通基本走香港中转,而且香港到台湾这段走的谷歌自己的骨干网,延迟也不过多个十几毫秒;不过移动就不能看了,基本绕美。 下面是用站长工具进行测延迟:
嗯,谷歌绿油油的一片,除开移动,平均延迟基本在 70 毫秒内,这图总算能看了。
创建实例
点击左上角三道杠导航菜单,选择计算里的 Compute Engine,点击第一项 VM 实例,然后点击创建:
区域可选择的就比较多了,建议选 asia 开头的,机器类型最低配就是 0.6GB 的了。启动磁盘点更改可以选 SSD 和调整大小,价格也会增加:
身份和 API 访问权限默认,作为 web 服务器,需要防火墙允许 HTTP 和 HTTPS 流量。下面的更多选项可以根据自己需要选择,大部分后面都能再改:
安全里可以填后面连接实例需要的 SSH 公钥,网络里分配外部静态 IP。
SSH 密钥可以使用 ssh-keygen
生成,比如:
1 |
ssh-keygen -t rsa -f ~/.ssh/test -C root |
在 ~/.ssh
目录生成私钥 test
文件,公钥 test.pub
文件,使用 root 用户名。把公钥 test.pub
文件里的内容填入下图的位置:
然后就是网络部分,主要就是分配一个固定 IP,其余部分默认。外部 IP 里选择创建 IP 地址,输入名称后点击保留就能分配一个 vultr 里熟悉的 IP 地址了:
连接实例
谷歌云的实例远程连接默认使用 ssh 密钥登录,比如使用上面生成的 root 用户登录:
1 |
ssh -i ~/.ssh/test root@ip |
如果你习惯用密码登录,则需要修改配置文件:
1 2 3 4 |
vim /etc/ssh/sshd_config PermitRootLogin prohibit-password # 改为 yes PasswordAuthentication no # 改为 yes /etc/init.d/ssh restart # 重启 ssh 服务生效 |
下次登陆就能够使用密码登录了,当然你要设置了密码。
谷歌云的 Debian 系统镜像相对纯净,加了谷歌云相关的 SDK 包,在测试安装 LNMP 过程中可以看到连系统的 locale 也没有设置,我们可以先设置下:
1 2 3 4 5 |
apt update apt upgrade echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen echo "LANG=en_US.UTF-8" >> /etc/locale.conf locale-gen # 如果找不到命令就 apt install locales 安装一下就好了 |
防火墙规则
谷歌云还有个优点,那就是作为云端服务平台,提供了更多服务和功能,还有丰富的 API 和完善的文档。这里的防火墙就是其中一点,支持设置复杂网络和防火墙规则。谷歌云的 Compute Engine 默认设置了两条隐式规则,即一条允许大部分出站流量和一条禁止大部分入站流量。在上面创建实例的过程中我们已经允许了 HTTP 和 HTTPS 流量了,所以我们搭建博客就不用再设置防火墙规则了。上面我们使用的 rsync 同步备份软件,如果要在谷歌云上也使用,我们需要允许 rsync 协议的流量,放行默认的 873 端口,所以我们要再添加一个防火墙规则。
点击左上角三道杠导航菜单,选择网络里的 VPC 网络,点击第三项防火墙规则:
可以看到默认已经有几条规则了,点击创建防火墙规则:
填写规则名称,优先级,数字越小应用的优先级越高,填写目标标记,可以让我们只应用到指定的实例。0.0.0.0/0 表示所有 IP 地址,rsync 协议为默认端口为 tcp:873。点击创建就能看到规则添加到列表里了。
最后我们还要再给实例添加标记以应用防火墙规则,选择我们的 test 实例,点击修改,然后找到网络标记,输入 rsync 回车后保存即可应用防火墙规则到实例:
博客备份恢复
博客环境搭建依旧选择 LNMP 一键包,不过由于选择了谷歌云最低配的机器,内存只有 0.6GB,从源码编译安装 MySQL 8.0 不能通过,所以自己 fork 了一个版本,添加了在内存低于 1GB 以下可选择通过二进制安装。(我蠢了,这里可以先开一个高于 1GB 内存的机器,编译安装完后可以停止实例,然后修改机器配置为最低配再启动实例。)
1 2 3 4 5 6 7 |
apt install git screen screen -S lnmp git clone -b mysql-binary-install-support https://github.com/StarryLeo/lnmp.git cd lnmp # 修改 MySQL 8.0 的版本为最新的版本 vim include/version.sh ./install.sh |
现在使用 redis 加 WordPress 插件代替了之前的 memcached 扩展了,安装完后还是按以前的方法添加虚拟主机。 解压 WordPress 的网站备份压缩文件,移动到添加的虚拟主机的目录,修改目录权限,导入数据库:
1 2 3 4 5 6 7 8 9 10 11 12 |
./addons.sh install redis mkdir -p /home/backup rsync -avPH starrycat@ip::wordpress /home/backup cd /home/backup tar -Jxv -f wp-starrycat.me-201908311640.tar.xz mv starrycat.me/* /home/wwwroot/starrycat.me chown -R www:www /home/wwwroot/starrycat.me mysql -uroot -p db_sc < wpdb-db_sc-201908311644.sql # 检查 redis 是否生效,看到 wordpress 相关内容即为生效 /usr/local/redis/bin/redis-cli keys * exit |
如果 WordPress 数据库信息有更动,则需要编辑 wp-config.php
,修改数据库名称、用户名、密码为新的。
(迁移完后完美打开网站,但一些文章页打不开,显示“此站点正遇到技术问题。”,倒腾了半天,最后一个个停用插件检查,发现是 Crayon Syntax Highlighter 这个代码高亮插件的问题,上次也遇到类似的问题,我居然忘了,也忘记后来怎么解决的了 。这个插件原作者已经两年没开发了,在新版本的 WordPress 上问题很多。最后找了个 fork 版本https://github.com/dalu/crayon-syntax-highlighter,可以打开文章页了,但是大部分语言高亮不能解析成功,算了凑合着用吧。)
References
发表评论