用Docker单独安装xiaoya-alist

五一快到了,每到节假日,各个景点就人头攒动,就不出门添堵了,准备在家看看电影、喝喝茶

看电影老苏喜欢用播放器,Native客户端的功能是网页端没法比的,Windows 上用的 PotPlayerMac 上则用 IINAAndroid 上就用 AfuseKt,都是神器

以前都是玩客云下载,局域网 SMB 映射,看完就删,不过玩客云已经终止了服务。现在基本上是通过转存到阿里云盘,用 WebDAV 挂载了再看的

老苏现在的需求是:

  1. 不需要下载,因为浪费时间,也浪费空间
  2. 不需要 Jellyfin 类的媒体服务器,海报墙是可有可无的
  3. 最好也不需要转存,因为活动结束,阿里云盘免费空间越来越小了

找了一圈,能满足需求的只有 xiaoya 了,有个 DDS-Derek/xiaoya-alist 的项目,整合了小雅 Alist 的相关周边的安装脚本,内置所有相关软件的安装

只要一条命令就可以安装你心中所想,不想折腾的可以去看看,项目地址:https://github.com/DDS-Derek/xiaoya-alist

老苏还是一如既往喜欢瞎折腾,继续以 Docker 方案折腾

准备

不管用什么方式安装,都需要先准备好三个文件,否则就是安装完,也还是需要重启容器的

内容 对应文件 获取方式
token mytoken.txt https://aliyuntoken.vercel.app/
https://alist.nn.ci/zh/guide/drivers/aliyundrive.html
open token myopentoken.txt https://alist.nn.ci/tool/aliyundrive/request.html
转存目录的 folder id temp_transfer_folder_id.txt 先转存这个 https://www.aliyundrive.com/s/rP9gP3h9asE 到自己网盘(选择资源盘),然后浏览器打开转存后的目录,浏览器的 url https://www.aliyundrive.com/drive/file/resource/640xxxxxxxxxxxxxxxxxxxca8a 最后一串就是,记得这个目录不要删,里面的内容可以定期删除

下面具体介绍获取方式,切记,token 很重要,一定要保存好

mytoken.txt

刷新令牌是个 32 位长的字符。打开下面👇的网址,然后点 获取Token 按钮

https://alist.nn.ci/zh/guide/drivers/aliyundrive.html#刷新令牌

用阿里云盘手机 APP 扫描二维码

将箭头处出现的 Token,复制到 mytoken.txt文件保存

myopentoken.txt

open token 是一串很长的字符,打开下面👇的网址,然后点 Scan QrCode 按钮

https://alist.nn.ci/tool/aliyundrive/request.html

用阿里云盘手机 APP 扫描二维码,然后点 I have scan

将得到的 Refresh Token ,复制到 myopentoken.txt 文件保存

temp_transfer_folder_id.txt

登陆自己的阿里云盘网页版,在【资源库】里面新建一个文件夹,名字无所谓的,老苏建了个temp

点击 temp 文件夹,可以在浏览器上地址栏看到 resource 后面的一串字符

这串字符就是 folder id ,复制到 temp_transfer_folder_id.txt文件保存

有一点需要注意,这个目录如果删了,哪怕你重建了一个名称一样的目录, folder id 也是不一样的,需要更新temp_transfer_folder_id.txt,否则转存的时候就会出错

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 xiaoyaliu ,选择第一个 xiaoyaliu/alist,版本选择 latest

容器名称

后面还会用到容器的名称,所以这里就叫 xiaoya

docker 文件夹中,创建一个新文件夹 xiaoya,并在其中建一个子文件夹 data,将前面准备的三个文件,放入 data 目录

文件夹 装载路径 说明
docker/xiaoya/data /data 存放配置文件

端口

本地端口不冲突就行,不确定的话可以用命令查一下

1
2
# 查看端口占用
netstat -tunlp | grep 端口号
本地端口 容器端口
8765 80

默认没有暴露端口

需要点 + 号自行添加

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 新建文件夹 xiaoya 和 子目录
mkdir -p /volume1/docker/xiaoya/data

# 进入 xiaoya 目录
cd /volume1/docker/xiaoya

# 将 mytoken.txt 、 myopentoken.txt 、 temp_transfer_folder_id.txt 放入 /data 目录

# 运行容器
docker run -d \
--restart unless-stopped \
--name xiaoya \
-p 8765:80 \
-v $(pwd)/data:/data \
xiaoyaliu/alist

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
version: '3'

services:
xiaoya:
image: xiaoyaliu/alist
container_name: xiaoya
restart: unless-stopped
ports:
- 8765:80
volumes:
- ./data:/data

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
11
12
# 新建文件夹 xiaoya 和 子目录
mkdir -p /volume1/docker/xiaoya/data

# 进入 xiaoya 目录
cd /volume1/docker/xiaoya

# 将 mytoken.txt 、 myopentoken.txt 、 temp_transfer_folder_id.txt 放入 /data 目录

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

查看容器的日志,如果准备的三个文件正确的话,会看到数据同步的信息

这个过程可能会持续几分钟,在浏览器中输入 http://群晖IP:8765 ,如果显示 获取设置失败,那还得再等等

全部元数据加载成功后是下面👇这样的

现在就可以正常看电影了

这个时候看 /data 目录,会多出几个文件

WebDAV 挂载

前面已经交代过,老苏习惯用播放器看电影,所以还需要做 WebDAV 挂载,xiaoya 默认是支持 WebDAV

默认的地址:http://群晖IP:8765/dav
用户:guest
密码:guest_Api789

Windows 平台的 RaiDrive 为例

挂载成功后,就可以在资源管理器中找到文件进行播放了

定时重启

xiaoya 容器重启时,会自动更新数据库及搜索索引文件,所以我们要用群晖的 任务计划 来辅助实现容器的定时重启

创建一个任务

可以设定每天重启一次

脚本直接写 docker restart xiaoya,其中 xiaoya 是容器的名字

清理转存

每一次的播放,xiaoya 都会将文件转存到我们前面建的 temp 目录,随便点点就会发现多了一堆的文件,哪怕是同一个文件,也是会重新转存的

所以清理就很重要,一旦阿里云盘满了,是会报错的。在前面介绍的 DDS-Derek/xiaoya-alist 中,有一个清理脚本

地址:https://github.com/DDS-Derek/xiaoya-alist/tree/master/xiaoyahelper

可以直接运行 bash -c "$(curl -sLk https://xiaoyahelper.ddsrem.com/aliyun_clear.sh | tail -n +2)" -s 3

老苏用的模式 3,只要运行一次,如果看到已启动就表示成功了

也可以下载到本地运行 ./aliyun_clear.sh 3

当看到小雅看护已启动,你会在容器中找到 xiaoyakeeper 容器

清理并不会立即就执行,容器会安装并更新一些东西

网络不好的情况下,还是需要点时间的

每次清理都会有清理记录

按官方说明,模式 3 默认从运行脚本的下一分钟开始,每天运行一次。如果万一不能更新的话,可以参照前面的方法,让 xiaoyakeeper 容器每天定时重启

参考文档

DDS-Derek/xiaoya-alist: 小雅Alist的相关周边
地址:https://github.com/DDS-Derek/xiaoya-alist

Docker Hub
地址:https://hub.docker.com/r/xiaoyaliu/alist

如何设置xiaoya的docker
地址:https://xiaoyaliu.notion.site/xiaoya-docker-69404af849504fa5bcf9f2dd5ecaa75f