通过 DNMP 搭建的环境建站虽然没有宝塔面板方便但是对系统环境影响最小,可是备份是个问题。如果用的是大厂云服务器可以通过设置定时系统快照任务来备份,但是轻量云却不支持设置定时快照(腾讯云),宝塔面板自带很多易用的备份插件,我常用的是 OneDrive 备份,于是想到可以通过 Rclone 在服务器上挂载 OneDrive,然后编写一个简易备份脚本配合 Cron 任务来实现定时备份。
下载安装
使用脚本(也支持容器,但是我没看懂怎么用)在 Linux/macOS/BSD 系统上安装 rclone,运行:
curl https://rclone.org/install.sh | sudo bash
初始化配置
安装完成后输入:
rclone config
可以看到:
No remotes found, make a new one?n) New remotes) Set configuration passwordq) Quit confign/s/q> nname> onedrive
输入 n
新建一个配置,name
为你的配置名称,可以自定义,这里我输入的是 onedrive
。
然后会出现挂载的服务类型,如下:
Option Storage.Type of storage to configure.Choose a number from below, or type in your own value.1 / 1Fichier\ (fichier)2 / Akamai NetStorage\ (netstorage)3 / Alias for an existing remote\ (alias)4 / Amazon Drive\ (amazon cloud drive)5 / Amazon S3 Compliant Storage Providers including AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Lyve Cloud, Minio, RackCorp, SeaweedFS, and Tencent COS\ (s3)6 / Backblaze B2\ (b2)7 / Better checksums for other remotes\ (hasher)8 / Box\ (box)9 / Cache a remote\ (cache)10 / Citrix Sharefile\ (sharefile)11 / Compress a remote\ (compress)12 / Dropbox\ (dropbox)13 / Encrypt/Decrypt a remote\ (crypt)14 / Enterprise File Fabric\ (filefabric)15 / FTP Connection\ (ftp)16 / Google Cloud Storage (this is not Google Drive)\ (google cloud storage)17 / Google Drive\ (drive)18 / Google Photos\ (google photos)19 / Hadoop distributed file system\ (hdfs)20 / Hubic\ (hubic)21 / In memory object storage system.\ (memory)22 / Jottacloud\ (jottacloud)23 / Koofr, Digi Storage and other Koofr-compatible storage providers\ (koofr)24 / Local Disk\ (local)25 / Mail.ru Cloud\ (mailru)26 / Mega\ (mega)27 / Microsoft Azure Blob Storage\ (azureblob)28 / Microsoft OneDrive\ (onedrive)29 / OpenDrive\ (opendrive)30 / OpenStack Swift (Rackspace Cloud Files, Memset Memstore, OVH)\ (swift)31 / Pcloud\ (pcloud)32 / Put.io\ (putio)33 / QingCloud Object Storage\ (qingstor)34 / SSH/SFTP Connection\ (sftp)35 / Sia Decentralized Cloud\ (sia)36 / Storj Decentralized Cloud Storage\ (storj)37 / Sugarsync\ (sugarsync)38 / Transparently chunk/split large files\ (chunker)39 / Union merges the contents of several upstream fs\ (union)40 / Uptobox\ (uptobox)41 / Webdav\ (webdav)42 / Yandex Disk\ (yandex)43 / Zoho\ (zoho)44 / http Connection\ (http)45 / premiumize.me\ (premiumizeme)46 / seafile\ (seafile)Storage> 28
输入你要挂载的网盘序号,我要挂载的 OneDrive 是 28
,
⚠️注意:序号不固定,请自行确认
client_id
和 client_secret
直接回车默认即可,
然后会出现 OneDrive 区域选择,如下:
Option region.Choose national cloud region for OneDrive.Choose a number from below, or type in your own string value.Press Enter for the default (global).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
根据你自己的 OneDrive 版本来,这里我输入 1
选择全球,
然后是选择是否进行高级配置,保持默认回车即可:
Edit advanced config?y) Yesn) No (default)
接着是自动配置选择,如下:
Use auto config?* Say Y if not sure* Say N if you are working on a remote or headless machiney) Yes (default)n) No
因为你的服务器并没有图形化界面无法使用浏览器打开网页,这里需要选择 n
,
这里需要获取授权码并输入:
Option config_token.For this to work, you will need rclone available on a machine that hasa web browser available.For more help and alternate methods see: https://rclone.org/remote_setup/Execute the following on the machine with the web browser (same rcloneversion recommended):rclone authorize "onedrive"Then paste the result.Enter a value.config_token>
授权码需要在本地电脑上获取,访问 https://rclone.org/downloads/ 根据你的电脑系统版本下载对应的 Rclone,下载完成后解压,进入存放 Rclone 的目录可以看到 rclone.exe
的可执行程序,在空白处按住 shift
键鼠标右击 在 Windows 终端打开
或 在此处打开 PowerShell 窗口
,执行如下命令:
./rclone.exe authorize "onedrive"
浏览器应该会自动打开,如果浏览器没有打开可以根据提示复制地址访问。如果浏览器登录了 OneDrive 的话会直接显示授权确认信息,如果没有登录的话会弹出登录页面,登录 OneDrive 后也会显示授权确认信息。选择 接受
后在本地命令行会显示一串 JSON 格式的授权信息,复制授权信息包括首尾的 {},到 Linux 终端粘贴。
然后设置 OneDrive 的连接类型,如下:
Option config_type.Type of connectionChoose a number from below, or type in an existing string value.Press Enter for the default (onedrive).1 / OneDrive Personal or Business\ (onedrive)2 / Root Sharepoint site\ (sharepoint)/ Sharepoint site name or URL3 | E.g. mysite or https://contoso.sharepoint.com/sites/mysite\ (url)4 / Search for a Sharepoint site\ (search)5 / Type in driveID (advanced)\ (driveid)6 / Type in SiteID (advanced)\ (siteid)/ Sharepoint server-relative path (advanced)7 | E.g. /teams/hr\ (path)config_type> 1
这里输入 1
,
然后会显示找到的 OneDrive 账户,如下:
Drive OK?Found drive "root" of type "business"URL: https://xxxxxx-my.sharepoint.com/personal/xxxxxx/Documentsy) Yes (default)n) Noy/n>
确认无误后输入 y
或者直接回车,接着会显示你选择的配置信息,确认无误后输入 y
保存配置。
挂载
首先安装
fuse
# CentOS/Fedorayum install -y fuse fuse3# Ubuntu/Debianapt install -y fuse fuse3
挂载为本地磁盘
# 新建本地目录,即下面的 LocalFoldermkdir /onedrive# 挂载为磁盘,下面的 DriveName、Folder、LocalFolder 参数根据说明自行替换rclone mount DriveName:Folder LocalFolder --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000
DriveName
为初始化配置填的name
,Folder
为OneDrive
里的文件夹,LocalFolder
为VPS
上的本地文件夹。挂载过程中出现
NOTICE: One drive root '/xxx': --vfs-cache-mode writes or full is recommended for this remot
错误,可以无视。挂载成功后,新建一个 SSH 连接窗口输入
df -h
命令即可查看卸载磁盘
fusermount -qzu LocalFolder
开机自启
使用如下命令新建一个 systemd
配置文件,适用于 CentOS\Debian\Ubuntu
cat > /etc/systemd/system/rclone.service <<EOF[Unit]Description=RcloneAfter=network-online.target[Service]User=rootType=simple# 替换成你的手动运行命令,例:ExecStart=/usr/bin/rclone mount DriveName:Folder LocalFolder --copy-links --allow-other --allow-non-empty --umask 000 --attr-timeout 5m --vfs-cache-mode full --vfs-cache-max-age 24h --vfs-cache-max-size 5G --buffer-size 300MExecStop=fusermount -qzu LocalFolderRestart=always[Install]WantedBy=default.targetEOF
./rclone mount
:"添加网盘时的配置名称":"网盘指定目录" "挂载至本地的目录"[--添加参数]
--allow-other
:允许非当前 rclone 用户外其它用户进行访问--attr-timeout 5m
:文件属性缓存,(大小,修改时间等)的时间。如果 VPS 配置比较低,建议适当提高这个值,避免过多内核交互,降低资源占用。--vfs-cache-mode full
:开启 VFS 文件缓存,可减少 rclone 与 API 交互,同时可提高文件读写效率--vfs-cache-max-age 24h
:VFS 文件缓存时间,这里设置 24 小时,如果文件很少更改,建议设置更长时间--vfs-cache-max-size 5G
:VFS 文件缓存上限大小,请根据服务器剩余磁盘自行调节--vfs-read-chunk-size-limit 300M
:分块读取大小,这里设置的是300M,可以提高文件读取的效率,比如1G的文件,大致分为10个块进行读取,但与此同时 API 请求次数也会增多--buffer-size 300M
:设置内存缓存,请根据服务器内存大小自行设置--daemon
:后台运行程序
然后使用如下命令设置开机自启:
systemctl enable rclone --now# 更多重启:systemctl restart rclone停止:systemctl stop rclone状态:systemctl status rclone
如果你想挂载多个网盘,那么将 systemd
配置文件的 rclone.service
重命名成不冲突的文件名即可,如 rclone1.service
。
使用私有 API
使用 Rclone 给 OneDrive 传输文件时可能会遇到速度非常慢、断联等一些问题,其根源是触发了 OneDrive API 的限制,而默认的 Rclone 内置 API 由于非常多人在同时在使用所以这些问题也就愈发明显。使用自建的私有 API 连接 OneDrive 可大幅改善这些情况,而且对于三个月的 Office 365 E5 开发者试用版,平时偶尔用用 Rclone 还会有自动续订的可能性,比起刻意刷 API 的方式更为安全和稳定。此外自建的 API 还可以给其它的账号和其它应用使用。
API 创建教程请参考:Rclone 进阶使用教程 – 自建私有 API 挂载 OneDrive,同类教程很多,这里不做赘述。
简易备份脚本
一个简易的备份脚本,可以打包备份目录和导出数据库,利用 Cron 定时任务实现定时备份,保存为 backup.sh
执行即可。
#!/bin/bash# 要备份文件目录,绝对路径backpath='/opt'# 备份到哪里,绝对路径savepath='/onedrive'# 备份文件名name="opt"# 时间戳date=`date "+%Y%m%d%H%M%S"`# 拼接文件名filename="${name}_${date}.tgz"cd $backpath# 数据库备份,多个数据库依次类推mkdir databasecd database# 例:docker exec -it {container_name} mysqldump -u{db_user} -p{db_password} {database} > {file_path}docker exec -it mysql mysqldump -uroot -pmy-passwrd mydatabase > mydatabase.sql# 目录打包备份cd ..tar -czf $filename --exclude=containerd $backpath# 设置备份保留几份,这里是7天find $savepath -type f -mtime +7 -exec rm -f {} \;# 移动并清理残留mv $filename $savepathrm -rf databaserm -f $filename
参考
https://www.misterma.com/archives/900/
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/7414.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~