前言
连接 Dropbox 备份 VPS 可以有两种方法:
-
Dropbox Uploader
开源脚本,命令多,功能丰富。使用 Dropbox API,可以调整权限使之只能访问/Apps/YourApp
下的文件或允许其访问整个 Dropbox,非常适合在 VPS 上使用。 -
Dropbox-CLI (CLI = Command Line Interface)
Linux 上的 Dropbox 客户端,相当于使用命令行操作 PC 上的 Dropbox,稍作熟悉即可通过 Dropbox 提供的 python 脚本轻松实现管理。
所以用它作为 VPS 的备份存在一个很重要的安全隐患。 Dropbox-CLI 有权限操作整个 Dropbox 中的所有文件,而 VPS 的安全风险相比于个人电脑显然高出许多,如果 VPS 被入侵,结果不堪想象。
因此在两种方案都实际使用后,最终老老实实使用 Dropbox Uploader, Dropbox-CLI 只做介绍非常不推荐。
Dropbox Uploader
Dropbox Uploader 是一个开源在 Github 的脚本,项目主页详细说明了脚本的用法。
若要使用 Dropbox Uploader 来备份,可以大致分为三个步骤:
1.到 Dropbox Developers 创建一个新的 App
- 选择 Dropbox API
- 选择 允许访问 App 目录 或 允许访问整个 Dropbox
- 给自己的 App 起个名字,比如
YourApp
- 在 OAuth 2 生成一个 App Access Token
- 配置 Dropbox Uploader
cd
wget https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh
chmod +x dropbox_uploader.sh
./dropbox_uploader.sh info #绑定 Dropbox App
按提示将生成的 Access Token 输入并确认,相关信息保存在 ~/.dropbox_uploader
文件中,如需修改配置可以直接编辑此文件。
再执行
./dropbox_uploader.sh upload /etc/passwd /vps/passwd.old
如果在 Dropbox 的目录 /Apps/YourApp
下看到了 /vps/passwd.old
就说明配置成功了。
题外话:
需要注意的是,根据用户在 Dropbox.com 设置的语言的不同,应用的目录名自动使用的语言也不同。语言是英文这个目录是/Apps
,语言是中文这个目录是/应用
,语言是日文这个目录是/アプリ
,以此类推。
- 配置计划任务:
vi /root/dropbox_uploader_backup.sh
添加如下内容:
#! /bin/bash
LOCAL_BAK_DIR="/root/BAK" #备份文件到指定位置
MYSQL_SERVER="localhost" #MySQL 服务器的地址,一般是本地地址
MYSQL_USER="mysqluser" #MySQL 的用户名名称,一般是 root 或 admin
MYSQL_PASS="mysqlpassword" #MySQL 用户的密码
echo "Start Backup"
# 备份并打包 MySQL 数据库
mysqldump -u $MYSQL_USER -h $MYSQL_SERVER -p $MYSQL_PASS --all-databases > /tmp/dbbak.sql
tar zcvf $LOCAL_BAK_DIR/MySQL.tar.gz -P /tmp/dbbak.sql
rm -f /tmp/dbbak.sql
echo "Database backup success..."
# 备份并打包网站文件
tar zcfP $LOCAL_BAK_DIR/web.tar.gz /var/www/
tar zcfP $LOCAL_BAK_DIR/nginx.tar.gz /etc/nginx/sites-available
#如果安装的是 LNMP 一键包则备份 /usr/local/nginx/conf /home/wwwroot
echo "Web files backup success..."
# 用脚本将备份的目录完整上传到Dropbox
$SCRIPT_DIR/dropbox_uploader.sh upload "$LOCAL_BAK_DIR" "/"
# 备份结束
echo "Backup Done! "$(date +"%Y.%m.%d") >> /root/backup.log
执行
chmod +x ~/dropbox_uploader_backup.sh
crontab -e
再添加
0 3 * * * /bin/bash /root/dropbox_uploader_backup.sh
大功告成。
为什么直接打包成同名文件,而不按日期分别打包呢?理由也很简单, Dropbox 的免费版也提供了 30 天的文件版本记录,可以回滚到这期间的任意时间点,可以节约存储空间。而如果网站备份坏了 30 天都没发现……
另一种选择: Dropbox-CLI
本机环境为 Ubuntu 16.04 x64,使用 PuTTY 连接 VPS。
cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
~/.dropbox-dist/dropboxd #从新建的 .dropbox-dist 文件夹运行 Dropbox 守护程序
如图所示,此时 PuTTY 界面会不断刷出一个 Dropbox 的验证链接,将此链接复制到浏览器打开,按提示登入 Dropbox 账号,即可将 Dropbox 与 VPS 关联, Dropbox 会在主目录中自动创建 Dropbox 文件夹。
curl -LO https://www.dropbox.com/download?dl=packages/dropbox.py #下载 Dropbox 管理脚本
chmod +x ~/dropbox.py
运行./dropbox.py help
可以看到脚本提供的命令,只是做备份的话需要用到的有 start
stop
status
running
exclude
这么几个。
./dropbox.py exclude [list] #列出不同步的 Dropbox 目录
./dropbox.py exclude add [DIRECTORY] [DIRECTORY] #添加不需要同步的目录
./dropbox.py exclude remove [DIRECTORY] [DIRECTORY] #恢复需要同步的目录
./dropbox.py exclude add ~/Dropbox/Pictures #例:不同步 Dropbox 中的 /Pictures 目录
把其他目录都排除掉,只保留用于备份的 Dropbox/VPS
目录, Dropbox-CLI 就配置好了。
需要注意的是不支持目录名字中的空格,建议用_
替换。至于是否支持中文目录没有测试。
使用 Dropbox 备份 VPS
创建备份用的脚本:
vi /root/backup.sh
添加如下内容
#! /bin/bash
LOCAL_BAK_DIR="/root/BAK" #备份文件到指定位置
MYSQL_SERVER="localhost" #MySQL 服务器的地址,一般是本地地址
MYSQL_USER="mysqluser" #MySQL 的用户名名称,一般是 root 或 admin
MYSQL_PASS="mysqlpassword" #MySQL 用户的密码
echo "Start Backup"
# 备份并打包 MySQL 数据库
mysqldump -u $MYSQL_USER -h $MYSQL_SERVER -p $MYSQL_PASS --all-databases > /tmp/dbbak.sql
tar zcvf $LOCAL_BAK_DIR/MySQL.tar.gz -P /tmp/dbbak.sql
rm -f /tmp/dbbak.sql
echo "Database backup success..."
# 备份并打包网站文件
tar zcfP $LOCAL_BAK_DIR/web.tar.gz /var/www/
tar zcfP $LOCAL_BAK_DIR/nginx.tar.gz /etc/nginx/sites-available
#如果安装的是 LNMP 一键包则备份 /usr/local/nginx/conf /home/wwwroot
echo "Web files backup success..."
# 备份结束
echo "Backup Done! "$(date +"%Y.%m.%d") >> /root/backup.log
添加可执行权限
chmod +x ~/backup.sh
再将 VPS 备份的目录连接到 /Dropbox/VPS
目录下:
cd ~/Dropbox/VPS
ln -s ~/BAK
这样 Dropbox 就会自动同步存放备份的目录了。
配置计划任务
由于只需要定时进行备份,没有必要全天运行,因此可以用 cron 来管理。
crontab -e
添加如下内容:
0 3 * * * /bin/bash /root/backup.sh
0 4 * * * /usr/bin/python2.7 /root/dropbox.py start
0 5 * * * /usr/bin/python2.7 /root/dropbox.py stop
这样 VPS 就可以每天定时启动 Dropbox 进行备份,再定时关闭节约系统资源。
参考: