利用百度网盘API实现VPS的自动备份

老杨我的百度网盘的容量达到3.3T,而且百度网盘已经开放API,可以通过百度云来备份VPS了。这里使用的是开源工具bpcs_uploader来实现。

一、首先安装bpcs_uploader

1、下载并解压脚本

# wget https://github.com/oott123/bpcs_uploader/zipball/master
# unzip master

文件下载到 ./root 目录,解压之后会生成一个oott123开头的目录,建议改名为baidu_yun

# mv oott123-bpcs_uploader-ecb07c3 baidu_yun

然后进入baidu_yun目录,赋予权限:

# cd baidu_yun
# chmod +x bpcs_uploader.php

2、配置

首先在百度云创建一个 WEB应用

在百度云创建一个应用

在百度云创建一个应用

创建后,复制基本信息里的 API KeySecret Key

接着在管理界面打开API:PCS API,即百度个人云存储PCS,填写要保存的目录名称,此名称填写后不可修改。

打开PCS API

打开PCS API

运行bpcs_uploader配置(假设已经切换到相应目录)

# ./bpcs_uploader.php init

输入y继续,粘贴刚刚复制的API Key,之后输入刚刚设置的PCS目录名,然后会跳出一段提示,有网盘容量等信息,并让你用浏览器打开一个链接:https://openapi.baidu.com/device

用浏览器打开链接

用浏览器打开链接

在打开的浏览器中输入 授权码:

与百度连接

与百度连接

至此配置成功。

二、VPS编写自动备份并上传脚本。

以下脚本适用于LNMP环境的VPS备份,并已经存在/home/backup目录。该脚本将备份网站文件、数据库、nginx配置文件,操作完成后会在百度网盘的“我的应用数据”中找到文件。

#!/bin/sh
tar zcvf /home/backup/file.tar.gz /home/wwwroot #备份网站数据
tar zcvf /home/backup/nginx.tar.gz /usr/local/nginx/conf #备份nginx配置文件
killall nginx #备份mysql
service mysql stop
tar zcvf /home/backup/mysql.tar.gz /usr/local/mysql/var
/usr/local/nginx/sbin/nginx
service mysql start
cd baidu_yun #上传到网盘,以日期格式命名,实现增量上传
./bpcs_uploader.php upload /home/backup/file.tar.gz file_$(date +"%Y%m%d").tar.gz
./bpcs_uploader.php upload /home/backup/nginx.tar.gz nginx_$(date +"%Y%m%d").tar.gz
./bpcs_uploader.php upload /home/backup/mysql.tar.gz mysql_$(date +"%Y%m%d").tar.gz

将以上文本复制到backup.sh,并上传到VPS的root目录下,赋予权限

chmod +x backup.sh

输入sh backup.sh进行一次备份测试,成功后就可以用crontab实现每日自动备份。

crontab -e

输入以下内容

00 00 * * * sh /root/backup.sh

以上内容的意思是每日0点自动执行一次备份脚本。

需要还原的时候,使用以下格式的命令从百度网盘中获取数据,并解压到相应目录即可。

./bpcs_uploader.php download [path_local] [path_remote]

三、写在最后

以上方法的一个明显缺点就是上传慢,大概只有每秒600kb左右,但由于是在凌晨执行,而且全自动,所以这个不是大问题。还有一个是Key的授权时限问题,这个目前还在测试。

注:以上#命令均在 SSH 里执行。

原文:http://sijie.im/2603