文章摘要(AI生成)
如题,本文就探讨本站点如何实现网站冷备来介绍实现方式。本站的环境为:机器:阿里云ECS站点:博客主站以及众多子站本文中所用的工具为服务端运维工具:宝塔面板文件同步工具:rclone
如题,本文就探讨本站点如何实现网站冷备来介绍实现方式。重点是讨论如何0成本或者低成本的方式来实现(白嫖为主~)
正式开始前,首先介绍下前期背景。
本站的环境为:
机器:阿里云ECS
站点:博客主站以及众多子站
本文中所用的工具为
服务端运维工具:宝塔面板
文件同步工具:rclone
服务冷备的实现思路
通过宝塔将整站备份,最后通过FTP将备份文件同步到异地机器上。
宝塔的备份功能
宝塔默认是开启了站点的数据库、网站静态页、网站日志等信息的,这个过程我们不做过多介绍。相应设置项如下:
这里我们主要讲后续由备份目录同步到ftp的操作。
首先,我们需要从应用商店下载ftp软件:
下载好之后,需要修改ftp的配置文件, 这里需要着重注意以下几个属性:
PassivePortRange 39000 40000
ForcePassiveIP ***.***.***.***
这两个属性解释如下:
PassivePortRange
: 被动连接回复的端口范围,这需要我们该端口范围进行开放,上述配置中即对39000到40000的ip端进行开放:
另外我们也需要在ECS控制台中对相应端口进行开放。或者使用nginx做反向代理,对nginx不了解的可以看上一篇文章: 同一机器,不同端口的泛域名解析如何做到?ForcePassiveIP
: 在 PASV/EPSV/SPSV 回复中强制使用 IP 地址,这里需要注意的是,如果我们想使用ip直连,那就直接填写对应的ECS外网IP;如果是想用nginx反向代理,那就填写我们反向代理的域名
配置好之后我们启动ftp服务,在ftp选项中添加一个新的ftp站点,这个根目录即是我们服务备份需要同步到的目录:
配置之后:
服务端的最后一步操作即是我们添加一个shell指令。将我们网站的备份拷贝到ftp中,以便自己的本地机器或者其他ip去ftp下载。
对应的shell脚本如下:
rm -rf /www/wwwroot/shiker/backup
cp -R /www/backup/. /www/wwwroot/shiker/backup
chmod -R 755 /www/wwwroot/shiker/backup
这里我们拷贝时,需要注意文件的权限必须是755才对ftp用户可读。默认拷贝的文件权限只对root账户可用,我们直接访问ftp是看不到的。保存编辑后,我们手动执行此任务,即可看到ftp文件夹下已有backup备份目录. 此时我们从本地机器上访问远程ftp文件,可以看到我们的备份目录。
本地同步–rclone
接下来,我会介绍本地如何同步我们已经备份的ftp文件。市面上现成的软件大多收费,且破解版或多或少无法正常使用部分功能,有的甚至会导致备份文件缺失。所以我们这里使用的是一个开源的文件同步软件rclone,在github的地址: https://github.com/rclone/rclone,官网地址:https://rclone.org/install/
这个软件安装也非常简单,我们上官网下载安装包即可傻瓜安装。
安装完成之后我们打开cmd使用rclone version
命令测试是否安装完成:
rclone可以从远程服务端复制、同步、剪切到我们本地客户端上。使用rclone sync
即可同步远程文件到本地。我们可以使用如下指令 rclone sync -n --log-file=D:\网站冷备脚本\info.log remote:backup D:\shiker-tech
来看下远程到我们本地文件的变更目录:
PS C:\Users\18846> rclone sync -n remote:backup D:\shiker-tech
2022/10/30 13:02:55 NOTICE: site/web_random.shiker.tech_20220924_013008.tar.gz: Skipped copy as --dry-run is set (size 2.590Ki)
2022/10/30 13:02:55 NOTICE: site/web_博客_20221019_013001.tar.gz: Skipped copy as --dry-run is set (size 83.458Mi)
2022/10/30 13:02:55 NOTICE: site/web_博客_20221020_013001.tar.gz: Skipped copy as --dry-run is set (size 83.458Mi)
2022/10/30 13:02:55 NOTICE: site/web_博客_20221021_013002.tar.gz: Skipped copy as --dry-run is set (size 83.458Mi)
2022/10/30 13:02:55 NOTICE: site/web_博客_20221022_013001.tar.gz: Skipped copy as --dry-run is set (size 83.458Mi)
2022/10/30 13:02:55 NOTICE: site/web_博客_20221024_013001.tar.gz: Skipped copy as --dry-run is set (size 83.458Mi)
2022/10/30 13:02:55 NOTICE: site/web_博客_20221023_013001.tar.gz: Skipped copy as --dry-run is set (size 83.458Mi)
2022/10/30 13:02:55 NOTICE: site/web_博客_20221025_013001.tar.gz: Skipped copy as --dry-run is set (size 83.458Mi)
2022/10/30 13:02:55 NOTICE: site/web_halo-1_20220718_013005.tar.gz: Skipped copy as --dry-run is set (size 80.790Mi)
... ...
2022/10/30 13:03:17 NOTICE:
Transferred: 1.839 GiB / 1.839 GiB, 100%, 29.733 MiB/s, ETA 0s
Checks: 256 / 256, 100%
Deleted: 119 (files), 41 (dirs)
Transferred: 19 / 19, 100%
Elapsed time: 27.0s
由此,我们可以编写本地同步脚本了,由于博主自己用的windows电脑,所以编写bat脚本如下:
@echo off
SET logPath=D:\backup-log
SET logFile=D:\backup-log\info.log
if not exist %logPath% md %logPath%
if exist %logFile% del %logFile%
type nul> %logFile%
rclone sync -n --log-file=%logFile% remote:backup D:\shiker-tech
rclone sync -v --progress --log-file=%logFile% --stats=3m remote:backup D:\shiker-tech
我们的目的是让我们的脚本可以后台启动,所以需要写一个vb脚本:
createobject("wscript.shell").run "D:\backupScript\backup.bat", 0
通过控制面板中的计划任务(具体路径:控制面板\系统和安全\Windows 工具),可以将我们的脚本设置为启动执行:
立即执行后可以在本地看到备份文件:
由此我们便大功告成,整个过程中只有本地同步这里需要因人而异,服务端部署步骤相同。
评论区