我们之前推荐了一种网盘管理程序:rclone,可以管理onedrive,google drive等网盘,对于国外高带宽服务器来说是一种非常好的同步工具,可以实现各个网盘之间内容的自动转存。但是很遗憾的是rclone是国外的大神开发的,对国内的百度网盘不支持。我们这里推荐一套环境,可以让你转存百度网盘的内容到rclone支持的网盘中。

特点

1.使用百度网盘linux官方客户端,不会造成对百度网盘svip的封禁。
2.设置百度网盘自动下载任务后,自动上传、上传完毕自动删除本地文件。不占本地较大内存。
3.实测国外大多地区下载速度2~4M/s,如果不满意出门左拐。

更新说明

2020年3月13日18:56:39:
修补自动脚本周期较短,造成任务叠加,最终导致宕机的问题。详情请看
【五、设置自动转存脚本-4.添加定时任务】

本文推荐环境

1、 环境:宝塔5.9(可不装)+docker+百度网盘linux官方版+vnc+rclone世纪互联版+定时转存脚本
2、 硬件:centos7.x系统+至少1.5G内存+至少10G硬盘+上行至少100M带宽


安装过程

一、安装宝塔

这里为了便于小白写定时转存脚本,所以选择占用内存比较低的宝塔5.9版本,如果你的服务器内存比较大,建议你装更安全的7.x脚本。点我跳转→

Centos安装命令:

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh

Ubuntu/Deepin安装命令:

wget -O install.sh http://download.bt.cn/install/install-ubuntu.sh && sudo bash install.sh

Debian安装命令:

wget -O install.sh http://download.bt.cn/install/install-ubuntu.sh && bash install.sh

记下你面板的用户名和密码

二、安装docker

本教程仅限centos版安装docker

引用来源:https://www.runoob.com/docker/centos-docker-install.html

1、 卸载旧版本

较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。

#centos系统
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2、 安装 Docker Engine-Community
设置仓库

#centos系统
sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
  
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

安装 Docker Engine-Community-18.09.0-3.el7 版

#centos系统
sudo yum install docker-ce-18.09.0-3.el7  docker-ce-cli-18.09.0-3.el7  containerd.io

3、 一些其他的命令

#启动docker
sudo systemctl start docker
#暂停docker
sudo systemctl stop docker
#设置开机启动
sudo systemctl enable docker
#重启docker
sudo systemctl restart docker
#centos版卸载docker
yum remove docker-ce
yum remove containerd.io
rm -rf /var/lib/docker

三、安装百度网盘官方版+VNC的docker镜像

该镜像的作者的github地址:

https://github.com/john-shine/Docker-CodeWeavers_CrossOver-VNC/tree/master/BaiduNetdisk

1、 启动docker

sudo systemctl start docker

2、 拉取镜像

sudo docker pull johnshine/baidunetdisk-crossover-vnc:latest

3、 其他命令

#可以绑定默认下载目录到host的某个目录,会自动创建一个
sudo docker run -d -e vnc_password=your_password -p 5901:5901 -v /path/to/download/folder:/home/baidu/baidunetdiskdownload/ johnshine/baidunetdisk-crossover-vnc:latest
#这解释一下,参数-e vnc_password=your_password 是指VNC viewer访问时待填入的密码
#-p 5901:5901 是指VNC viewer访问时待填入的端口
#-v /path/to/download/folder:/home/baidu/baidunetdiskdownload/
#是指将百度网盘的下载路径映射到冒号前面的你的vps的实际位置
#例如 -v /root/Download:/home/baidu/baidunetdiskdownload/
#即你下载的文件会存到/root/Download下面,PS:冒号后面的不要改、会报错

四、安装rclone世纪互联版

1、 下载rclone世纪互联版至/root/rclone,

这里所说的世纪互联版,是指支持世纪互联版的onedrive。

这里推广一下大佬的世纪互联onedrive->、点我跳转→,使用限时一口价优惠劵NERYEAR2020、50元可购自定义用户名带有API权限的5T世纪互联版onedrive。补满123元可升级至25T。先到先得。

#在root下创建一个文件夹rclone,并将文件下载至/root/rclone里面
mkdir /root/rclone 
cd /root/rclone
wget https://yun.rw/show/1/Files/onedrive%20tools/rclone/rclone-cn2/rclone_linux
#给予权限
chmod 775 rclone_linux

为了节省时间,我们直接拿windows下的onedrive配置文件写入/root/.config/rclone/rclone.conf里。

如果这里比较晕,你可以查看我的另一篇文章

这里再给个windows下的rclone世纪互联版的下载地址->点我跳转→

到这里rclone就搞定了。

五、设置自动转存脚本

自动转存脚本的基本组成为:定时检索文件脚本+一键转存脚本

当设置定时检索文件脚本后、每隔一段时间会检索指定文件目录下的文件及文件夹的名字,并将其调用一键转存脚本。

本脚本包含会自动跳过百度网盘下载临时文件、并会将本地已上传过的文件删除。

1、 创建过滤临时文件的规则列表

#先创建rules.txt文件到/root/rclone/下
touch /root/rclone/rules.txt
vi /root/rclone/rules.txt

2、 写入过滤文件的类型

#百度云的临时文件
#也可以写其他你想过滤掉的文件后缀
*.downloading.cfg
*.downloading

3、 创建一键转存脚本

#先创建一个脚本到/root
cd /root
touch autoUpload.sh
#给予权限
chmod 775 autoUpload.sh
#编辑脚本
vi autoUpload.sh

然后输入i,粘贴以下内容

将前面几行的配置修改为你的配置

#!/bin/bash
#一键转存脚本
#Rclone 上传配置
name='name' #配置Rclone时填写的name
folder='uploadByVPS/' #注意一定要保留最后的/,rclone绑定网盘里的文件夹,留空为整个网盘。
retry_num=3 #上传失败重试次数
rclone='/root/rclone/rclone_linux' #rclone的安装位置

#=================下面的可以默认不变===================
downloadpath='/root/Download' #百度网盘下载目录
rules='/root/rclone/rules.txt' #过滤文件规则
#=================下面不需要修改===================
filepath=$1 #调用ls /home/baidu/baidunetdiskdownload 罗列其下面的文件及文件夹
path="${downloadpath}/${filepath}" #路径转换。添加开头的下载路径

Task_INFO(){
    echo
    echo -e "[\033[1;32mUPLOAD\033[0m] Task information:"
    echo -e "-------------------------- [\033[1;33mINFO\033[0m] --------------------------"
    echo -e "\033[1;35mDownload path:\033[0m${downloadpath}"
    echo -e "\033[1;35mFile path: \033[0m${filepath}"
    echo -e "\033[1;35mUpload path: \033[0m${uploadpath}"
    echo -e "\033[1;35mRemote path:\033[0m${remotepath}"
    echo -e "\033[1;35mpath:\033[0m${path}"
    echo -e "-------------------------- [\033[1;33mINFO\033[0m] --------------------------"
    echo
}

Upload(){
    retry=0
    while [ $retry -le $retry_num -a -e "${uploadpath}" ]; do
        [ $retry != 0 ] && echo && echo -e "Upload failed! Retry ${retry}/${retry_num} ..." && echo
#    ${Uploader} -c "${Config}" -s "${uploadpath}" -r "${RemotetoDIR}"
        $rclone move -v "${uploadpath}" "${remotepath}" --exclude-from $rules # --min-size 1k # --ignore-times
        #跳过规则列表里的内容的文件,跳过小于1k的文件,# 跳过时间不同但名称大小相同的文件
        $rclone rmdirs -v "${downloadpath}" --leave-root
        retry=$(($retry+1))
    done
    [ -e "${uploadpath}" ] && echo && echo -e "Upload failed: ${uploadpath}" && echo
#    [ -e "${path}".aria2 ] && rm -vf "${path}".aria2
#    [ -e "${filepath}".aria2 ] && rm -vf "${filepath}".aria2
}

if [ -d "$path" ]  #如果传来的是文件夹
    then
        uploadpath="${path}/"
        remotepath="${name}:${folder}${filepath}/"
        Task_INFO
        Upload
        exit 0
else #如果是文件
        uploadpath="${path}"
        remotepath="${name}:${folder}"
        Task_INFO
        Upload
        exit 0
fi
Task_INFO

按esc,并输入:wq保存

4、 添加定时任务

然后我们打开宝塔面板

找到计划任务→添加计划任务→任务类型→shell脚本→填入任务名称→执行周期:填入你的周期(国外服务器建议5min以上、国内服务器请自己计算)(填过少会造成任务叠加,很有可能最终造成宕机)

这里的周期这样计算、你的rclone目的网盘的最大上传速度、这里按照10M算(也可以自己手动上传文件测试)计算方法大概如下:

上一周期下载的文件的大小<执行周期T×rclone目的网盘的上传速度<上一周期下载的文件的大小+本周期内百度网盘又下载的文件大小<你的VPS硬盘大小

经测算:国外小鸡百度网盘的下载速度在1~4M波动、国内不限速。

例如:当已下载文件为2G时,rclone目的网盘的上传速度为10M时,2×1024/10/60=3.413分钟。
在此期间不能再给指令让它上传,不然会导致任务叠加,重复上传。
而在这3.413分钟内百度网盘又下载了3.413x60x4=819.2M(以4M算)。
所以在你本地最低要有2.8192G才够你的正常运转。

通常建议、百度网盘下载的内容单个文件比较大的话、将这个周期应设置的大一点。

这里推荐单个文件超过1G的话将时间周期调至10min乃至更长。文件较小可以将时间周期调制5min。

脚本内容粘贴以下脚本→添加任务

upload='/root/autoUpload.sh' #你一键转存脚本的位置
for file in `ls /root/Download` #罗列/root/Download即百度网盘下载位置
do
    $upload $file
done

放行端口:然后找到宝塔面板→安全→放行端口5901

六、测试脚本

1、 创建测试文件

#在/root下创建测试文件
mkdir /root/Download
cd /root/Download
mkdir /root/Download/test
cp /root/.config/rclone/rclone.conf /root/Download/test/test.txt
cp /root/.config/rclone/rclone.conf /root/Download/test.conf

2、 执行测试脚本

#全部复制粘贴
upload='/root/autoUpload.sh'
for file in `ls /root/Download` #罗列/root/Download即百度网盘下载位置
do
    $upload $file
done

等待脚本执行完毕后,检查的网盘里是否有test.conf和test/test.txt就可以了。

七、开始运行

1、 运行docker

sudo systemctl start docker

2、 运行百度网盘+vnc镜像

sudo docker run -d -e vnc_password=your_password -p 5901:5901 -v /root/Download:/home/baidu/baidunetdiskdownload/ johnshine/baidunetdisk-crossover-vnc:latest
#这解释一下,参数-e vnc_password=your_password 是指VNC viewer访问时待填入的密码
#-p 5901:5901 是指VNC viewer访问时待填入的端口
#-v /path/to/download/folder:/home/baidu/baidunetdiskdownload/
#是指将百度网盘的下载路径映射到冒号前面的你的vps的实际位置
#例如 -v /root/Download:/home/baidu/baidunetdiskdownload/
#即你下载的文件会存到/root/Download下面,PS:冒号后面的不要改、会报错

然后你就可以下载vncviewer点我跳转→,输入youip:5901然后输入密码,登录百度网盘了

有时候百度网盘刷新不出来文件,直接重启docker,然后重新运行百度网盘+vnc镜像就可以了

有什么问题可以随时联系我邮箱,欢迎打扰

<wangtaijie@midd.top>

版权所有yoola's Blog

本文链接:https://www.yoola.top/pub/id=4

转载请注明来源

Last modification:March 17th, 2020 at 12:08 pm