用过NAS(NetworkAttachedStorage)的朋友都知道可以将本地硬盘转换成局域网中的“网盘”,简单理解就是搭建自己的“私有云”,但是硬件和网络成本太高,有点遥不可及。Alist开源库可以满足我们。可以将公网盘变成联网的本地硬盘,使用网页统一挂载和管理。网盘类型包括但不限于:百度网盘、阿里云盘、迅雷网盘等。Alist挂载网盘还有一个好处就是可以基于WebDav协议直接播放网盘资源。网盘虽然也支持在线播放,但是费用是做会员的。是的,这是符合逻辑的,网盘主机厂也是要盈利的,但是Alist技术可以帮助我们救国救财。另外,使用WebDAV的本质是WebDAV可以挂载为本地(服务器)磁盘。因为WebDAV可以映射为本地目录,所以只需要调用本地播放器或者本地自带的浏览器播放器即可播放。无论是mkv、wmv还是h.265编码方案,都可以通过现代本地播放器完美播放,无需转码。因此,使用WebDAV协议,服务器的负担只是传输数据的任务。Docker部署AlistAlist软件可以通过多种方式安装部署,但是最方便的还是使用Docker,主要是因为各大网盘主机厂商的网盘版本更新比较频繁,所以Alist的版本也会随之而来。更新频繁,而Docker的操作最为简单快捷,只需要简单的命令即可完成部署,比较适合这种更新频繁的情况。关于Docker,请移步一寸宕一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用web集群,这里不再赘述。首先在终端执行命令:dockerrun-d--restart=always-v/etc/alist:/opt/alist/data-p5244:5244-ePUID=0-ePGID=0-eUMASK=022--name="alist"xhofe/alist:latest这个命令会在后台生成一个Alist容器。服务运行在系统的5244端口。如果是第一次运行,会拉取最新的Alist镜像:?interviewgit:(main)dockerrun-d--restart=always-v/etc/alist:/opt/alist/data-p5244:5244-ePUID=0-ePGID=0-eUMASK=022--name="alist"xhofe/alist:latest无法在本地找到图像'xhofe/alist:latest'最新:从xhofe/alistb1101342f8ad拉取:拉取完成d9f5c37d20f9:Pullcomplete5f4a1655e3cc:Pullcompletec1e599f8ce92:Pullcompleted613be??a8ea45:PullcompleteDigest:sha256:520e531ddaf5732c4944d5c35ad4dbb601e2fadae14b99a81e86ea3f7e065173Status:Downloadednewerimageforxhofe/alist:latest7bf1c7f384526bd22aa078223d548ab0c16b79c245919e8a0cf7b439e79f34d6Thenexecutethecommand:dockerpstoseetherunningAlistservicecontainer:?~dockerps容器ID图像命令创建状态PORTSNAMES7bf1c7f38452xhofe/alist:latest"/entrypoint.sh"3小时前Up3小时0.0.0.0:5244->5244/tcpalist?~Alist服务平台是基于Gin和React的前后端分离,所以平台管理页面只需要用户名和密码即可登录。输入命令:dockerexec-italist./alistadmin这条命令会进入容器,显示账号和密码:INFO[2023-02-1322:54:17]adminuser'sinfo:username:adminpassword:8U5js3bH记录一下,注意这里是本地服务,所以外网无法登录。此时Alist本地部署为完全的。如果Alist发布了新版本,也可以通过以下命令进行更新:dockerstopalist#停止alist容器dockerrm-falist#删除alist容器,因为之前映射到本地,所以数据不会被删除cp-r/root/data/docker_data/alist/root/data/docker_data/alist.bak#可以选择,如果不放心可以备份数据dockerpullxhofe/alist:latest#拉取latestalistimagedockerrun-d--restart=always-v/root/data/docker_data/alist:/opt/alist/data-p5244:5244--name="alist"xhofe/alist:latest#运行安装命令,注意-vmount的路径和之前一样,这里不同的是通过mount命令将alist的配置文件挂载到宿主机/root/data/docker_data/alist目录下,方便使用升级后。挂载百度网盘并部署Alist服务后,访问本地网站登录:http://localhost:5244/@manage用户名和密码就是上面Docker中返回的。登录成功后,在左侧菜单中选择存储,添加百度网盘:百度云盘的操作完全基于百度云的开放API,只要授权Alist即可操作接口,进入网址:https://tool.nn.ci/baidu/call...进行授权操作,记录client\_id、client\_secret和refresh\_token,挂载表单中分别填写三个参数,然后填写根目录mounteddirectory:/,注意最好勾选表单中的web代理选项。然后进入Alist服务的首页:http://localhost:5244,就可以在线播放存储在百度云中的资源:非常方便。截至本文2-14日,在挂载阿里云盘的过程中会出现设备ID的bug,但是挂载阿里云盘共享的网盘还是没有问题的。由于阿里云盘运行基于客户端的token,必须先通过手机登录页面获取token:https://passport.aliyundrive....\_login.htm?lang=zh\_cn&appName=aliyun\_drive&appEntrance=web&styleType=auto&bizParams=?LoadSsoView=false?KeepLo??gin=false&isMobile=true&hidePhoneCode=true&rnd=0.9186864872885723登录成功后,通过抓包获取后端login.do接口的返回值:复制bizExt的值,并然后使用Python的Base64模块解码:importbase64coded_string='''Q5YACgA...'''base64.b64decode(coded_string)解码出来的refreshToken就是我们需要的token:"refreshToken":"sdfdsfsdfdsfb9fadd4f62ee4be968e"然后填入token以及后台表单中的sharedid:注意这里的挂载路径不能填根目录/,因为我们之前已经挂载了百度网盘,所以选择一个子目录share。至此,阿里云盘共享就挂载好了,可以坐下来好好犒劳自己了:Python3.10接入除了在线播放,我们还可以使用Python3.10通过WebDav直接操作Alist挂载的网盘协议,可以用Amazing来形容。先安装WebDav库:pip3installwebdavclient3然后写webdav.py文件:fromwebdav3.clientimportClientoptions={'webdav_hostname':"http://localhost:5244/dav",'webdav_login':"admin",'webdav_password':"8U5js3bH"}client=Client(options)client.verify=False#不检查SSL证书(Default=True)files1=client.list()print(files1)这里的webdav\_hostname指的是刚才用docker挂载的webdav服务路径,账号密码上面是docker返回的,不用担心泄露,因为是本地服务。程序返回:?gotest/opt/homebrew/bin/python3.10"/Users/liuyue/wodfan/work/gotest/webdav.py"['dav/','aliyunpan/','The.Last.of.我们.S01E03.1080p.WEB-DL.DDP5.1.Atmos.H.264-Q66.mkv','The.Last.of.Us.S01E05.1080p.WEB-DL.DDP5.1.Atmos.H.264-Q66.mkv','The.Last.of.Us.S01E04.1080p.WEB-DL.DDP5.1.Atmos.H.264-Q66.mkv','house.of.the.dragon.s01e08.1080p.web.h264-cakes.chs.eng.mp4','House.of.the.Dragon.S01E07.Driftmark.1080p.HMAX.WEB-DL.DDP5.1.Atmos.H.264-SMURF.chs。eng.mp4','House.of.the.Dragon.S01E06.The.Princess.and.the.Queen.720p.HMAX.WEB-DL.DDP5.1.H.264-NTb.chs.eng.mp4','House.of.the.Dragon.S01E05.We.Light.the.Way.1080p.HMAX.WEB-DL.DDP5.1.Atmos.H.264-SMURF.chs.eng.mp4','房子。.the.dragon.s01e04.720p.web.h264-cakes.chs.eng.mp4','house.of.the.dragon.s01e03.720p.web.h264-cakes.chs.eng.mp4','share/']可以方便的返回网盘挂后的文件目录。除此以外,我们也可以针对网盘资源进行增量修改的动态操作:#创建目录client.mkdir("dir1/dir2")#删除资源client.clean("dir1/dir2")#复制资源client.copy(remote_path_from="dir1/file1",remote_path_to="dir2/file1")client.copy(remote_path_from="dir2",remote_path_to="dir3")#移动资源client.move(remote_path_from="dir1/file1",remote_path_to="dir2/file1")client.move(remote_path_from="dir2",remote_path_to="dir3")#下载资源client.download_sync(remote_path="dir1/file1",local_path="~/Downloads/file1")client.download_sync(remote_path="dir1/dir2/",local_path="~/Downloads/dir2/")#上传资源client.upload_sync(remote_path="dir1/file1",local_path="~/Documents/file1")client.upload_sync(remote_path="dir1/dir2/",local_path="~/Documents/dir2/")也就是说只要Alist服务挂载了网盘,我们甚至不需要平台接口,只需要写代码就可以从网盘资源中获取我们想要的任何东西。连接互联网的计算机可以实现自己的“私有云”,成本低得离谱,Alist这个新时代的普罗米修斯,为我们带来了网盘自由的火种。
