临安市建设局网站,设计类专业学校有哪些,wordpress开发框架,wordpress 产品货号使用过NAS(Network Attached Storage)的朋友都知道#xff0c;它可以通过局域网将本地硬盘转换为局域网内的“网盘”#xff0c;简单理解就是搭建自己的“私有云”#xff0c;但是硬件和网络成本都太高了#xff0c;有点可望而不可及的意思。Alist开源库则可以满足我们它可以通过局域网将本地硬盘转换为局域网内的“网盘”简单理解就是搭建自己的“私有云”但是硬件和网络成本都太高了有点可望而不可及的意思。Alist开源库则可以满足我们它能将公共网盘反过来变成一种联网的本地硬盘使用Web页面来统一挂载和管理网盘类型包含但不限于百度网盘、阿里云盘、迅雷网盘等等。
Alist挂载网盘的另外一个好处是可以基于WebDav协议直接播放网盘资源虽然说网盘也支持在线播放功能但是代价就是得充会员没错这符合逻辑网盘主机厂也得盈利但Alist技术可以帮助我们曲线救国节省一笔开支。
此外使用WebDAV的精髓在于WebDAV可以被挂载为一个本地(服务器)磁盘正因为WebDAV可以被映射为一个本地目录所以只需要调用本地播放器或者本地搭载的浏览器播放器进行播放。无论是mkv、wmv或是h.265编码方案通过一个现代的本地播放器都能完美的播放不存在需要转码的情况所以使用WebDAV协议服务器的负担只有传输数据这一个任务。
Docker部署Alist
Alist软件可以通过多种方式进行安装和部署但最方便的还是通过Docker主要是因为由于各大网盘主机厂的网盘版本更新频率很快所以Alist的版本也会随之频繁更新而Docker的操作最简单快捷只需要简单的命令就可以完成部署更适合这种频繁更新的情况。
关于Docker请移玉步至一寸宕机一寸血十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建GunicornFlask高可用Web集群这里不作过多赘述。
首先在终端执行命令
docker run -d --restartalways -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID0 -e PGID0 -e UMASK022 --namealist xhofe/alist:latest该命令会在后台生成一个Alist容器服务运行在系统的5244端口如果是首次运行会拉取最新的Alist镜像
➜ interview git:(main) docker run -d --restartalways -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID0 -e PGID0 -e UMASK022 --namealist xhofe/alist:latest
Unable to find image xhofe/alist:latest locally
latest: Pulling from xhofe/alist
b1101342f8ad: Pull complete
d9f5c37d20f9: Pull complete
5f4a1655e3cc: Pull complete
c1e599f8ce92: Pull complete
d613bea8ea45: Pull complete
Digest: sha256:520e531ddaf5732c4944d5c35ad4dbb601e2fadae14b99a81e86ea3f7e065173
Status: Downloaded newer image for xhofe/alist:latest
7bf1c7f384526bd22aa078223d548ab0c16b79c245919e8a0cf7b439e79f34d6随后执行命令:
docker ps就可以看到正在运行的Alist服务容器
➜ ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7bf1c7f38452 xhofe/alist:latest /entrypoint.sh 3 hours ago Up 3 hours 0.0.0.0:5244-5244/tcp alist
➜ ~Alist服务平台基于前后端分离的Gin和React所以平台管理页面需要用户名和密码才能登入输入命令
docker exec -it alist ./alist admin该命令会进入容器并展示账号和密码
INFO[2023-02-13 22:54:17] admin users info:
username: admin
password: 8U5js3bH记录下来注意这是本地的服务所以外网是无法进行登录的。
至此Alist的本地部署就完成了假如Alist发了新的版本也可以通过下面的命令进行更新操作
docker stop alist #停止alist容器 docker rm -f alist #删除alist容器因为之前映射到了本地所以数据不会被删除 cp -r /root/data/docker_data/alist /root/data/docker_data/alist.bak #可选如果不放心可以备份一下数据 docker pull xhofe/alist:latest #拉取最新的alist镜像 docker run -d --restartalways -v /root/data/docker_data/alist:/opt/alist/data -p 5244:5244 --namealist xhofe/alist:latest #运行安装命令注意-v挂载的路径与原来相同这里的区别就是通过挂载命令将alist的配置文件挂载到宿主机的/root/data/docker_data/alist目录方便升级后进行使用。
挂载百度网盘
部署好Alist服务后访问本地网址进行登录http://localhost:5244/manage
用户名和密码就是上文中Docker中返回的登录成功后选择左侧菜单中的存储添加百度网盘 百度云盘的操作完全基于百度云的开放API只要给Alist授权操作接口的权限即可进入网址https://tool.nn.ci/baidu/callback?code288faa8f669a3d174ea9af0bd1d72ab5 进行授权操作记录client_id、client_secret和refresh_token分别将三个参数填入挂载的表单中然后挂载目录填入根目录:/注意表单中最好把web代理选项勾选。
随后进入Alist服务首页http://localhost:5244就可以在线播放百度云内存储的资源 非常方便。
挂载阿里云盘
截止到本文发布的2-14号阿里云盘目前挂载过程中会出现设备id的bug但是挂载阿里云盘分享的网盘还是没问题的由于阿里云盘操作基于客户端的token所以必须先通过移动端登录页面来获取token:
https://passport.aliyundrive.com/mini_login.htm?langzh_cnappNamealiyun_driveappEntrancewebstyleTypeautobizParams¬LoadSsoViewfalse¬KeepLoginfalseisMobiletruehidePhoneCodetruernd0.9186864872885723
登录成功后通过抓包获取后端login.do接口的返回值 将bizExt的值复制出来然后利用Python的Base64模块进行解码操作
import base64
coded_string Q5YACgA...
base64.b64decode(coded_string)解码出来的refreshToken就是我们需要的令牌
refreshToken:sdfdsfsdfdsfb9fadd4f62ee4be968e随后在后台将token和分享的id填入表单即可 注意这里挂载路径不能填入根目录/因为之前我们已经挂载了百度网盘了所以选择一个子目录share。
至此阿里云盘分享就挂载好了可以坐下来犒劳自己了 Python3.10接入
除了在线播放我们还可以使用Python3.10直接通过WebDav协议操作Alist挂载的网盘可谓是神乎其技了。
首先安装WebDav库
pip3 install webdavclient3随后编写webdav.py文件
from webdav3.client import Client options { webdav_hostname: http://localhost:5244/dav, webdav_login: admin, webdav_password: 8U5js3bH
}
client Client(options) client.verify False # To not check SSL certificates (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.Us.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, house.of.the.dragon.s01e04.720p.web.h264-cakes.chs.eng.mp4, house.of.the.dragon.s01e03.720p.web.h264-cakes.chs.eng.mp4, share/]可以很方便的将挂在后的网盘文件目录进行返回。
除此之外我们也可以针对网盘资源进行增删改查的动态操作
# Create directory client.mkdir(dir1/dir2)
# Delete resource client.clean(dir1/dir2)
# Copy resource client.copy(remote_path_fromdir1/file1, remote_path_todir2/file1)
client.copy(remote_path_fromdir2, remote_path_todir3)
# Move resource client.move(remote_path_fromdir1/file1, remote_path_todir2/file1)
client.move(remote_path_fromdir2, remote_path_todir3)
# Download a resource client.download_sync(remote_pathdir1/file1, local_path~/Downloads/file1)
client.download_sync(remote_pathdir1/dir2/, local_path~/Downloads/dir2/)
# Upload resource client.upload_sync(remote_pathdir1/file1, local_path~/Documents/file1)
client.upload_sync(remote_pathdir1/dir2/, local_path~/Documents/dir2/)也就是说只要Alist服务已经挂载好网盘我们甚至不需要平台界面只编写代码就可以对网盘资源予取予求。
结语
旧时王谢堂前燕飞入寻常百姓家。只要一台联网的电脑就可以实现自己的“私有云”成本低到令人发指Alist新时代的普罗米修斯为我们带来了网盘自由的火种。