如果你打算长期运营网站,那么一定要做好网站数据的备份工作。
数据是无价的,它是你的互联网资产,丢失了就很难找回来。瓦力箱子之前曾写过一篇网站备份教程,但那只是每天将网站和数据库备份的服务器磁盘。如果服务器出了问题,而你又没有将文件下载到本地电脑硬盘,同样会造成数据丢失。
年初买了台RackNerd性价比非常高VPS服务器年付$12美元,于是把网站迁移过去。迁过去后为防止网站数据丢失,我先利用宝塔面板将网站文件和数据库备份到服务器磁盘,然后用rclone挂载OneDrive网盘把备份文件同步过来,实现双重备份。
这篇文章比较长,设置也有点繁琐。但设置成功后就会自动执行,以后就省心了。
1. 准备工作
在教程开始之前,首先要做一些准备工作,主要有三点。
首先就是注册一个OneDrive网盘账号,如果你已经有了可以忽略这点。其次是利用宝塔面板备份网站数据到服务器磁盘。最后是一句话带你认识Rclone这个软件,Rclone是个非常强大的云存储文件管理命令行程序。
2. 安装Rclone
Rclone安装非常简单,远程登录VPS服务器后,只需执行一条命令:
curl https://rclone.org/install.sh | sudo bash
安装成功后的提示如下。
rclone v1.56.0 has successfully installed.
Now run "rclone config" for setup. Check https://rclone.org/docs/ for more details.
3. OneDrive授权
这一步是在本地电脑Windows系统操作,进入Rclone下载页面,点击下载Windows版本的Rclone软件,选择Intel/AMD-64Bit即可。如果是32位操作系统,那么选择32Bit的。
下载后将全部文件解压到D:\rclone文件夹,打开CMD命令窗口,依次输入下面两条命令。
cd /d d:\rclone
rclone authorize "onedrive"
第二条命令输入完回车后会自动打开浏览器,登录你的OneDrive账号,点击“是”按钮同意授权。成功后返回到CMD命令窗口就能看到长串授权码,即花括号以及里面的内容。
将授权码复制下来保存备用,有效期1个小时。
Paste the following into your remote machine --->
{"access_token":"EwCAA8l6BAAUwihrrCrmQ4wuIJX5mbj7rQla6TUAAS7oJFl1pmRc4whIlOj5am6oPQ+zf1kOcygsi5JHL2IgXh55prjh3r6P/fSZr8K9UJ58Pksh1YTJkzL/kHywyZnEvM8kDr55B1J//SXLJ1sGNsNR9vH0Rmz9xMrnl6GFrF8z+UQxi+GL3L3MpBN3NenacA0+pmVXKk8hghj64a8xxEFhlc+b0LJCp4yMg+96548752OPQwLZEPikbJ1zB5Wm5IUzuq03zNKa5lOicGET0l8zWW+itYg2Ca+mCS9DRm5e8NcPL5yiLZmRIm4vCI3pIQGKxEKghQG2lLmjMnWJj8BMotxH9Px2/XWs2TJ3BdLbuX2EjdYy8MNoBbaYXafe3uHx!UpdOwFHCiKnJqYomn*8cCFNP7RM1W8DMzXNBAlgTnuaRo6v7xjxFX3xIrXWonyCk*l1Z7glOXEmRS","expiry":"2021-09-16T15:47:47.8171297+08:00"}
<---End paste
4. 配置Rclone
和安装相同,Rclone配置也只需要一条命令。不同的是后续操作比较繁琐,需要有耐心哈。在配置过程中如果输错字母,可以按Ctrl+Backspace删除。
我们首先在VPS远程登录窗口输入下面命令:
rclone config
新建远程网盘连接,输入字母n回车。
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
给远程网盘起个名字,因为我是RackNerd服务器备份到OneDrive网盘,输入名称rn2od
name> rn2od
接着会出现一系列网盘名字列表,我输入26选择OneDrive网盘。需要注意的是这个序号以后可能会有变动,填写的时候再次确认下。
Storage> 26
Client ID无需设置,直接回车使用默认的。
OAuth Client Id
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_id>
Client Secret也不用填写,回车使用默认值。
OAuth Client Secret
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_secret>
选择OneDrive网盘服务器的区域,我用的是国际版输入1,如果你用的是世纪互联,那就输入4
Choose national cloud region for OneDrive.
Choose a number from below, or type in your own value
1 / Microsoft Cloud Global
\ "global"
2 / Microsoft Cloud for US Government
\ "us"
3 / Microsoft Cloud Germany
\ "de"
4 / Azure and Office 365 operated by 21Vianet in China
\ "cn"
region> 1
不需要设置高级配置,输入n后回车
Edit advanced config? (y/n)
y) Yes
n) No (default)
y/n> n
因为我们是远程连接VPS主机,不能自动配置,填写n回车。
Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine
y) Yes (default)
n) No
y/n> n
这时候将第二步获取的OneDrive授权码粘贴到config_token>后面,回车。
Enter a string value. Press Enter for the default ("").
config_token>
选择OneDrive网盘,输入1
Choose a number from below, or type in an existing value
1 / OneDrive Personal or Business
\ "onedrive"
2 / Root Sharepoint site
\ "sharepoint"
3 / Sharepoint site name or URL (e.g. mysite or https://contoso.sharepoint.com/sites/mysite)
\ "url"
4 / Search for a Sharepoint site
\ "search"
5 / Type in driveID (advanced)
\ "driveid"
config_type> 1
Rclone找到一个OneDrive盘,输入y确定回车。
Drive OK?
Found drive "root" of type "personal"
URL: https://onedrive.live.com/?cid=a40d32de9
y) Yes (default)
n) No
y/n> y
确认OneDrive网盘的所有信息,输入y回车。
[rn2od]
type = onedrive
token = {"access_token":"EwBoA8l6BAAU6k7qJd7*3wELXHy...
drive_id = a40d32de9
drive_type = personal
--------------------
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> y
配置完成后Rclone显示远程网盘列表,至此配置结束,输入q退出。
Current remotes:
Name Type
==== ====
lh2od onedrive
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q
经过上面的设置后,我们就成功地将Rclone连接挂载到OneDrive网盘啦。
5. 编写同步脚本
这个脚本也不算麻烦,首先输入下方命令新建同步脚本。
vi rclone.sh
按Insert键进入编辑模式,粘贴以下三条内容。
#!/bin/bash
rclone sync /www/backup/database rn2od:rnbak/database
rclone sync /www/backup/site rn2od:rnbak/site
然后按Esc键退出编辑模式,输入:wq保存并退出。
脚本首行是注释,上面的脚本只包含两条命令,第二行是将/www/backup/database目录及里面的数据库备份文件,同步到OneDrive的rnbak/database文件夹里。第三行是同步网站备份文件。
接着为新建的脚本增加执行权限。
chmod +x rclone.sh
6. 设置定时任务
脚本编写成功后,需要设置定时任务来运行脚本,才能完成自动备份。
在设置之前,首先将VPS服务器的时区设置为东八区,与我们的作息相同。如果你是国内的VPS或云服务器通常不需要设置。
cp /usr/share/zoneinfo/Asia/Chongqing /etc/localtime
输入y确定。
接下来我们设置定时任务,输入下方命令。
crontab -e
按Insert键进入编辑模式,在尾部添加一行即可。
35 1 * * * /root/rclone.sh >> /root/rclone.log 2>&1
这行内容的意思是,每天凌晨1点35分,运行rclone.sh脚本,将网站和数据库备份文件同步到OneDrive网盘。
然后等到第二天,登录OneDrive盘就能看到备份文件已经同步过来了。
好了以上就是利用Rclone程序,将网站和数据库备份文件同步到OneDrive网盘的教程。这样VPS服务器和网盘都有网站备份,双重备份更安全。如果你不放心,还可以每周将Onedrive网盘里的文件手动下载到本地电脑。
最后再提醒下,建议每隔一段时间去Onedrive盘查看下同步是否正常,因为即使是Rclone程序也有可能出问题的。