阿里云盘的webdav协议开源实现(Centos+Docker)

简介

https://www.aliyundrive.com

阿里云盘是一款速度快、不打扰、够安全、易于分享的网盘,你可以在这里存储、管理和探索内容,尽情打造丰富的数字世界。

本项目实现了阿里云盘的webdav协议,只需要简单的配置一下,就可以让阿里云盘变身为webdav协议的文件服务器。 基于此,你可以把阿里云盘挂载为Windows、Linux、Mac系统的磁盘,可以通过NAS系统做文件管理或文件同步,更多玩法等你挖掘。

Github

https://github.com/zxbu/webdav-aliyundriver

开始

创建一台服务器

准备一台Linux服务器,以腾讯云为例;注册|登录腾讯云控制台,创建一个实例;

创建一个竞价实例(1C1G即可)

选择Centos8镜像

配置登录方式

然后开通实例,一台服务器就创建好了

在控制台查看实例的公网IP

放行端口

接下来放行端口避免出现无法访问的情况,在实例的安全组里修改规则即可。

登录服务器

通过SSH登陆服务器,推荐使用 FinalShell 或者 Termius 客户端;也可以通过Windows系统的Terminal登录

ssh root@ip 然后输入密码

环境配置

以此粘贴下面命令配置环境

更新系统

yum -y update

安装EPEL源

yum -y install epel-release

安装开发工具包

yum -y groupinstall "Development Tools"

Docker

curl -fsSL| bash systemctl start docker service docker start systemctl enable docker.service systemctl status docker.service

如图Docker服务已正常运行,Ctrl+C 返回终端

Docker-Compose

sudo curl -L-s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose rm -f `which dc` ln -s /usr/local/bin/docker-compose /usr/bin/dc

查看安装是否成功

docker-compose -v

浏览器获取refreshToken方式

先通过浏览器(建议chrome)打开阿里云盘官网并登录:https://www.aliyundrive.com/drive/登录成功后,按F12打开开发者工具,点击Application,点击Local Storage,点击 Local Storage下的 https://www.aliyundrive.com/,点击右边的token,此时可以看到里面的数据,其中就有refresh_token,把其值复制出来即可。(格式为小写字母和数字,不要复制双引号。例子:ca6bf2175d73as2188efg81f87e55f11)第二步有点繁琐,大家结合下面的截图就看懂了

容器运行

docker run -d --name=webdav-aliyundriver --restart=always -p 8080:8080-v /etc/localtime:/etc/localtime -v /etc/aliyun-driver/:/etc/aliyun-driver/ -e TZ="Asia/Shanghai" -e ALIYUNDRIVE_REFRESH_TOKEN="your refreshToken" -e ALIYUNDRIVE_AUTH_PASSWORD="admin" -e JAVA_OPTS="-Xmx1g" zx5253/webdav-aliyundriver

# 将your refreshToken替换为上面获取的refreshToken# 8080:8080 第一个8080为服务器webdav服务的端口,可修改# /etc/aliyun-driver/ 挂载卷自动维护了最新的refreshToken,建议挂载# ALIYUNDRIVE_AUTH_PASSWORD 是admin账户的密码,建议修改# JAVA_OPTS 可修改最大内存占用,比如 -e JAVA_OPTS="-Xmx512m" 表示最大内存限制为512m

举个例子,假如我的运行端口是8082,refreshToken是,admin账户的密码是E,那么我的命令是

docker run -d --name=webdav-aliyundriver --restart=always -p 8082:8080 -v /etc/localtime:/etc/localtime -v /etc/aliyun-driver/:/etc/aliyun-driver/ -e TZ="Asia/Shanghai" -e ALIYUNDRIVE_REFRESH_TOKEN="" -e ALIYUNDRIVE_AUTH_PASSWORD="E" -e JAVA_OPTS="-Xmx1g" zx5253/webdav-aliyundriver

现在WebDav服务就启动完成了,在浏览器中通过公网ip:服务端口,输入登录密码即可访问。无法访问请检查端口是否放行。

Docker-Compose

如果你使用的是宝塔面板或者通过Finalshell客户端登陆服务器,可以在/opt 目录下创建一个 docker-compose.yml 文件,写入并修改下面内容并保存。

version: "3.0" services: webdav-aliyundriver: image: zx5253/webdav-aliyundriver container_name: aliyundriver environment: - TZ=Asia/Shanghai - ALIYUNDRIVE_REFRESH_TOKEN=refreshToken - ALIYUNDRIVE_AUTH_USER-NAME=admin - ALIYUNDRIVE_AUTH_PASSWORD=admin - JAVA_OPTS=-Xmx1g volumes: - /etc/aliyun-driver/:/etc/aliyun-driver/ ports: - 6666:8080 restart: always # “refreshToken”请根据下文说明自行获取。 # “ALIYUNDRIVE_AUTH_USER-NAME”和“ALIYUNDRIVE_AUTH_PASSWORD”为连接用户名和密码,建议更改。 # “/etc/aliyun-driver/:/etc/aliyun-driver/”,可以把冒号前改为指定目录,比如“/homes/USER/docker/alidriver/:/etc/aliyun-driver/”。 # 删除了“/etc/localtime:/etc/localtime”,如有需要同步时间请自行添加在environment下。 # 端口6666可自行按需更改,此端口为WebDAV连接端口,8080为容器内配置端口,修改请量力而为。 # 建议不要保留这些中文注释,以防报错,比如QNAP。

在 docker-compose.yml 所在路径下执行该命令 Compose 就会自动构建镜像并使用镜像启动容器,在安装docker-compose过程中已经将docker-compose命令替换为dc,所以在命令中docker-compose替换为dc也可执行

cd /opt // 访问/opt目录 docker-compose up // 启动并运行容器 docker-compose up -d// 后台启动并运行容器 或 dc up // 启动并运行容器 dc up -d// 后台启动并运行容器

现在WebDav服务就启动完成了,在浏览器中通过公网ip:服务端口,输入登录密码即可访问。无法访问请检查端口是否放行。

参数说明

--aliyundrive.refresh-token 阿里云盘的refreshToken --server.port 非必填,服务器端口号,默认为8080 --aliyundrive.auth.enable=true 是否开启WebDav账户验证,默认开启 --aliyundrive.auth.user-name=admin WebDav账户,默认admin --aliyundrive.auth.password=admin WebDav密码,默认admin --aliyundrive.work-dir=/etc/aliyun-driver/ token挂载路径(如果多开的话,需修改此配置)

客户端兼容性

各个平台挂载WebDav方法

Linux

Centos & Fedora & RedHat

yum -y install davfs2

其他的比如Ubuntu之类的

apt-get -y install davfs2

安装完davfs2之后执行

sed -i s/# use_locks 1/use_locks 0/g /etc/davfs2/davfs2.conf echo "你的WebDAV地址 用户名 密码" >> /etc/davfs2/secrets #保存用户名密码,以后可以直接免密码挂载 mount.davfs 你的WebDAV地址 你想要挂载到的目录

即可成功挂载注意1:挂载目录必须提前创建好!注意2:如果你不执行第二句保存用户名密码,那么你以后挂载的时候都会要求输入用户名密码!

开机自动挂载

如果想要开机自动挂载,则再执行

echo "mount.davfs 你的WebDAV地址 你想要挂载到的目录" >> /etc/rc.local

执行完此句之后检查一下/etc/rc.local文件,看看是否有exit 0这句。如果有的话,要手动把上面命令添加进去的语句放到exit 0之前。

Windows

启用WebClient服务

唤出"计算机管理"程序窗口。选择"服务和应用程序"项,下步将进行启用WebClient服务的操作。

注册表使得WIN同时支持http和https

定位到 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesWebClientParameters 把BasicAuthLevel 值改成2,即同时支持http和https,默认只支持https

然后管理员Terminal重启webclient服务:

net stop webclient net start webclient

在win10中挂载WebDav

打开"此电脑",在空白处点击右键,然后点击"添加一个网络位置"

接下来,就可以像使用本地硬盘/U 盘一样,向里面存储或者删除数据

Windows RaiDrive

这里推荐使用一款名叫 RaiDrive 的软件,官网地址:www.raidrive.com,RaiDrive 是一款免费的软件,不仅支持 WebDAV 协议,还支持常见的 SFTP、FTP 协议,以及 Google Drive、OneDrive、Dropbox、Nextcloud 等常见网盘的挂载。

进入软件后,点击右上角的添加

在服务类型中选择 NAS,再选择 WebDAV,虚拟驱动器中可以自定义一个未占用的盘符和名称,地址中输入 WebDAV 的地址和路径,最后在账户中输入用户名和密码,点击小箭头就完成挂载了。

最后,打开此电脑,就可以访问网络位置的 WebDAV 了。

建议在软件的设置中勾选添加到启动项,可以在 Windows 开机后自动挂载,如果你的 WebDAV 服务器位于国外,下载速度缓慢,还可以在设置中添加代理,并且为挂载的 WebDAV 勾选代理选项。

Mac OS

在 Finder 中连接到服务器,操作与Windows大同小异,由于我没有Mac所以就不讲了,此处直接给出苹果官方文档。http://support.apple.com/kb/PH3857

Android

因为大部分 Android 手机自带的文件管理器都不支持挂载 WebDAV,所以这里借助第三方文件管理器:ES 文件浏览器来实现该功能,该软件同 RaiDrive 一样,也支持常见协议及网盘的连接。

首先在软件侧栏的网络中选择 FTP,然后点击新建,选择 WebDAV,服务器填写 WebDAV 服务器的 URI,加密协议根据自己情况而定,输入 WebDAV 的用户名和密码,即可完成挂载。

第三方软件

实际上比较推荐使用第三方软件,特别是Windows,资源管理器总有一点科学无法解释的BUG,使用体验不是很好。

功能说明

支持的功能

查看文件夹、查看文件文件移动目录文件重命名文件下载文件删除文件上传(支持大文件自动分批上传)支持超大文件上传(官方限制30G)支持WebDav权限校验(默认账户密码:admin/admin)文件下载断点续传Webdav下的流媒体播放等功能

暂不支持的功能

移动文件到其他目录的同时,修改文件名。比如 /a.zip 移动到 /b/a1.zip,是不支持的文件上传断点续传部分客户端兼容性不好

已知问题

没有做文件sha1校验,不保证上传文件的100%准确性(一般场景下,是没问题的)通过文件名和文件大小判断是否重复。也就是说如果一个文件即使发生了更新,但其大小没有任何改变,是不会自动上传的不支持文件名包含 / 字符

TODO

支持更多登录方式(验证码、账号密码等)

免责声明

本软件为免费开源项目,无任何形式的盈利行为。本软件服务于阿里云盘,旨在让阿里云盘功能更强大。如有侵权,请与我联系,会及时处理。本软件皆调用官方接口实现,无任何“Hack”行为,无破坏官方接口行为。本软件仅做流量转发,不拦截、存储、篡改任何用户数据。严禁使用本软件进行盈利、损坏官方、散落任何违法信息等行为。本软件不作任何稳定性的承诺,如因使用本软件导致的文件丢失、文件破坏等意外情况,均与本软件无关。

关联阅读:

自建阿里云盘分享盘https://www.bijilu.com