前言

本来入手树莓派的初衷就是用来做VPS的异地备份系统,经过一(ji)段(tian)时间的测试,总算是比较正常的工作了。

于是放出来给想用的朋友玩玩,如果遇到什么问题可以在本文评论。

整套系统基于Linux+Crontab+vsftp+lftp来构建。

注:本文脚本内包含大量压缩、下载、删除、计算MD5等操作,若您使用的VPS对CPU占用、磁盘占用、网络占用有要求,请酌情使用。

另注:建议在不了解Shell的情况下谨慎修改,以防数据丢失。在您使用前,大D建议您备份好VPS/云主机及运行本文所提到的脚本的所有主机,以免由于环境差异导致数据丢失/数据被意外删除等情况。若出现问题,一切后果与责任自行承担,大D不承担任何相关责任。

本文所用代码,除本文外,均在Github开源。项目地址:https://github.com/derek-s/VPSBackup-Shell

正文

0.简述工作原理

先对数据库和全站数据进行压缩,每周一全站压缩时会创建一个快照,周二会根据周一快照压缩新文件,以此类推。

压缩完毕之后,会向网站所在目录写入一个可访问文件,用于树莓派联网检测压缩数据是否压缩完毕可以下载。

当运行在树莓派上的定时任务检测到网站网页上的信息之后,则启动下载,下载完成之后比对MD5值,比对成功则删除VPS上的对应文件,当全部文件下载完毕,比对正确后向VPS主机上传文件,VPS主机上另外开一个定时任务,检测标志着树莓派下载完毕的文件是否存在,存在时则将显示压缩状态的网页重置,则下载脚本检测不到,不会重复下载,也不会重复运行lftp进行连接,最大程度节省资源。

如果您有其他更简便的备份思路,欢迎本页评论区留言。

1.环境搭建

由于树莓派是在家中内网放置,没有固定IP,思来想去,还是把ftp架在服务器上。

加密ftp搭建可以参考大D以前写的文章  Vsftpd搭建SSL/TLS安全FTP

2.配置VPS端备份脚本

搭建完毕之后,将备份脚本根据自己的实际情况进行修改,同时加入Crontab定时任务。

简单说明:

1.该脚本会导出并压缩数据库数据,网站文件数据是每周一进行全体备份,周二-周日增量备份。网站文件备份会分卷,以避免网络波动下载失败长时间重复下载占用带宽。

2.数据库及网站文件数据均在压缩后计算MD5,下载到树莓派挂载硬盘上后也对文件计算MD5,以确定文件是否损坏。如遇损坏,则重新下载(损坏下载重试限制为10次)。

3.由于目前大D自己的VPS数据库压缩体积过大,不适用邮箱备份,就没有添加将数据库文件发送到邮箱的功能。

4.有排除目录压缩,如果不需要对缓存目录等进行排除,需要注意修改备份脚本的代码。

5.其他修改的地方都备注在脚本内了。

VPS端脚本修改完之后,增加计划任务。

终端下执行:crontab -e

根据脚本位置自行修改。

3.配置树莓派

在测试脚本的过程中,经常出现lftp在下载到100%且文件实际已经下载完成之后,仍然持续连接且在debug 3模式下持续报错,为了解决这个问题花了一点时间。

最后发现,是树莓派上运行的OMV的软件源内lftp 4.6.0的bug,这个bug在lftp的github上也找到了相关的issues,就不具体贴出来了。

首先第一点就是要确定你使用的lftp的版本,请安装新版。

如何检查lftp版本

3.1 编译安装新版lftp

大D自用的树莓派安装了OpenMediaVault(以下简称OMV),如果也是使用OMV的,则需要自行编译安装新版本的lftp,且在配置过程中,使用apt进行软件包安装时,一定要注意是否由于包关联而导致OMV被自动卸载。

下载新版lftp源码

可能遇到的错误:configure: error: No terminfo, termcap or curses library found. Install ncurses-devel.

解决方法:

可能遇到的错误:configure: error: cannot find readline library, install readline-devel package
The following packages have unmet dependencies:
libreadline6-dev : Depends: libreadline6 (= 6.3-8) but 6.3-8+b3 is to be installed
E: Unable to correct problems, you have held broken packages.

这个需要注意看一下具体的报错信息,可能会跟环境不同而需要不同的版本。
解决方法:

可能遇到的错误:configure: error: Package requirements (gnutls >= 1.0.0) were not met:
No package 'gnutls' found

解决方法:

配置lftp

这里需要更改的只有第一项关于限速的。

3.2安装mutt及mstmp并配置邮件

安装mutt+mstmp

第一次直接使用apt安装mutt的时候,导致OMV被apt自动卸载。

所以如果你也使用OMV,则需要注意是否会导致自动卸载。

配置msmtp

大D使用了一个新注册的阿里邮箱来发送,一开始是使用QQ邮箱来发送的,极有可能会因为是代发邮件/邮件内容问题导致卡在QQ邮箱的草稿箱内无法发送。

由于密码明文保存,所以msmtp.msmtprc文件权限有要求,所以编辑完之后,将文件权限修改为600 chmod 600 .msmtprc

配置完成之后,继续配置mutt

配置mutt

mutt需要配置的地方不多,只需要配置一个代发服务器即可。

这个配置文件需要解释和修改的地方不多,一个是realname随便改一个名字,editor就是编辑器,根据个人喜好来修改即可。

3.3配置客户端脚本

下载脚本

根据注释内容修改即可。

启动脚本

由于下载脚本依赖系统计划任务,所以可能会出现下载较大备份文件超过计划任务间隔时间,导致重复启动脚本下载文件,VPS带宽被占满这种情况。

所以需要加一个启动脚本来使下载脚本始终是单例运行。

配置计划任务

每间隔一小时运行一次。

结语

到这里就可以正常运行每天自动下载备份了。

邮件内包含部分节点操作的内容,同时还增加了备份路径所在磁盘的使用情况报告,可以根据情况来选择手动删除老旧备份或刻录光盘等方式来进行数据备份。

版本信息

2018-03-09 1.0版

2018-03-10 测试中发现频繁发送邮件,对发送邮件部分做了修改。1.1版

版权声明
转载保留版权: 大D技研室 | 《利用树莓派搭建VPS异地备份系统(18/03/10更新修复Bug)》
本文链接地址:https://www.dadclab.com/archives/7064.jiecao
转载须知:如果您需要转载本文,请将版权信息,版权授权方式,以及本文的链接地址注明,谢谢合作。
本文被贴上了: , , , , 标签