封面来源:アビ夏! | 荻pote #pixiv https://www.pixiv.net/artworks/110239446
前言
如何优雅地解决个人的看片需求
然而事件总有转折,这天,伴随着在下近两年的网盘索引程序项目 onedrive-vercel-index 发布了停止维护的消息,促使在下不得不寻找新的网盘索引程序,于是已经如日中天的 AList 走进了在下的视野。AList 这个项目也起步已久,在下早有耳闻,只是当时的 AList 似乎没有无服务器部署的选项(也有可能是当时的在下没有好好看文档),而 onedrive-vercel-index 能直接部署至 Vercel,更加方便些,所以才一直没有选择 AList。这回 onedrive-vercel-index 已死,转向 AList 已是板上钉钉,在下又从好友处得知,其完全可以部署在 PaaS 服务上,遂大喜过望,赶忙部署到位。亲自用了一段时间之后,方才得知 AList 的奥妙,于是搭建个人流媒体服务一事被重新提上日程。
经过一段时间的摸索,在下的个人流媒体服务终于完工,它能够做到:
- 索引 OneDrive、Google Drive、百度、阿里等在线网盘内的文件
- 自动下载在蜜柑计划订阅的当季新番,并上传至指定网盘
- 离线下载任意磁力资源,并自动上传至指定网盘
- 在任意支持 WebDAV 的播放器内观看并管理网盘储存的视频资源
而在伟大的 AList 的加持下,运行这一套服务的成本,只需要:
- 一台不需要很大容量和带宽的 VPS(如果不要自动下载新番和离线下载的话,这台 VPS 也可以不要)
在 Fly.io 部署 AList
AList 是一个支持多存储的文件列表和 WebDAV 程序,它在这套方案中要将资源所在的众在线网盘服务和最终的播放终端连接起来,是灵魂与主心骨,当之无愧的最重要存在,因此,首先要部署的就是它。在执行部署时,强烈建议同时参阅 AList 官方文档。
虽然在这套方案中,大多数情况下,最终播放时,AList 是使用 302 重定向调用的网盘的资源,也就是说,播放的加载速度取决于终端与在线网盘服务的连通性。但是,AList 的连通性也是必须要考虑的,因此,如果有连通性好的 VPS 或是 NAS 的话,还是非常建议将其直接部署在 VPS 和 NAS 上面(当然,也要同时保证 VPS 和 NAS 与网盘的连通性,特别是使用一些受到网络干扰的国外网盘服务时)。
由于贪图享受不用维护服务器的快乐,在下选择将 AList 部署到 PaaS 服务上。除了省去维护,PaaS 服务也有不少免费配额,完全可以实现零成本部署运行,另外,在网络方面通常都能提供不错的连通性。虽然部署到 PaaS 服务上大概率用不了 AList 自带的离线下载的功能(珍惜免费配额吧),但是此套方案的离线下载并不仰仗这个功能,因此无脑部署就完事了。
Fly.io 是一家提供 PaaS 服务的美国公司,近年来经营状况可佳,听说最近又获得融资,公司前景乐观,跑路风险非常小。他们免费提供每月 2340 小时的共享 CPU 的 VM 使用额度,3GB 的永久存储以及每月 100GB 的出站流量(在亚太和印度地区则为 30GB),对于运行 AList 来说完全够用。
首先,前往 Fly.io 的官网注册一个账户,可以直接使用 Github 来完成登录注册。
为了防止滥用,Fly.io 账户一般都需要绑定信用卡才能使用免费额度,好在绑卡的限制比较宽松,银联的卡也能绑定,注意卡里至少要有 10 美元额度才能通过验证。
注册完成后,回到本地来,打开命令行工具,安装 Fly.io 的命令行工具 FlyCTL:
1 | #Windows |
安装完成后,完成登录、创建应用等操作:
1 | # 登录,浏览器会打开一个窗口提示登录 |
之后会提示输入要部署的应用的名称,自拟一个即可,随后是选择部署到的机器的区域,这个随便选哪里都可以,都是带 CDN 的,访问效果大同小异。接下来会提示几个选项,包括是否创建 PostgreSQL 数据库,是否立即部署等等,皆输入 N
否决即可,使用 PostgreSQL 会多消耗一个 VM 资源,没有必要,Alist 也支持 Sqlite3 数据库,给应用分配一个 1GB 永久存储即可实现永久化保存:
1 | # 创建一个 1G 的持久存储空间,将 <APP_NAME> 替换为自拟的应用名称 |
完成之后,打开本地的应用文件路径,找到 fly.toml,打开编辑,将对应配置改为:
1 | [http_service] |
编辑完成后,保存,在命令行中键入 flyctl deploy
启动部署,部署完成后会有提示。若要更新 AList,也是重新执行一遍 flyctl deploy
即可。
待部署完成后,前往官网 Dahboard,进入刚刚部署完成的应用中,点击 Monitoring 可以查看日志,找到 Successfully creates user admin and the initial password is: xxxxxxxx 一行,里面记载了管理员账户的密码。
点击应用菜单中的 Overview,找到 Hostname 一栏,记载了应用的访问地址,点击即可访问,使用用户名 admin 即可登录 AList 并启用管理。
Fly.io 支持绑定自有域名,点击应用菜单中的 Certificates,输入要绑定的域名,随后根据提示前往域名管理商处添加 DNS 解析记录即可。
在 AList 挂载相应的网盘
AList 部署完之后就可以进行配置了,登录后,在页面下方有一个管理按钮,点击可以进入管理界面,管理界面功能繁多,主要用到的是储存选项,其余功能请参阅 AList 官方文档。
进入储存后,点击添加,在下拉的选择框中即可选择欲添加的网盘服务,大多数网盘都可根据提示和官方文档轻松添加,需要注意的是百度网盘和阿里云盘的配置。
另外,由于夸克网盘限速问题,夸克网盘现在只能使用本地代理进行传输,也就是说,下载、观看夸克网盘内的视频跑的全是服务器流量,需要慎用!
要点:配置阿里云盘
阿里云盘配置时,建议选择阿里云盘 Open 而不是阿里云盘。
在Oauth 令牌链接一栏,建议部署在大陆的 AList 填入 https://api.xhofe.top/alist/ali_open/token
,部署在大陆以外的 AList 填入 https://api-cf.nn.ci/alist/ali_open/token
。
不建议多个 IP 共同使用 AList 索引的阿里云盘,也不建议使用 AList 对阿里云盘大量上传,此二者操作均有被阿里云盘封号之风险。
要点:配置百度云盘
百度网盘配置时,在下载接口一栏可以选择官方或者非官方的下载接口。官方的口下载速度会慢,除非是百度网盘的超级会员,非官方接口则没有此限,但此接口仅限于仅限于播放/下载视频,不过这也能满足影音流的需求,因此推荐非会员选择非官方的接口。
AList 是提供了网页播放器的,可以直接在网页上看网盘的视频,但是需要特别注意的是,看百度云盘的视频时需要修改浏览器 UA 为 pan.baidu.com
,详见官方文档。不过,使用 WebDAV 播放不受此限,由于此方案均采取 WebDAV 播放,因此不需担心。
在支持 WebDAV 的播放器观看视频
上文提到,AList 提供了网页播放器,可以直接在网页上看网盘的视频,但是网页播放器的功能显然不足,解码完全看系统,显然是不能满足观看需求的。当然,也可以点击 AList 在网页播放器下方提供的快捷跳转到外部播放器的按钮,或者自行复制文件直链到外部播放器播放,不过这样操作起来就比较麻烦了,没有统一感,有时也有可能出现一些局限。
好在 AList 同时也是一个 WebDAV 程序,因此只要是支持挂载 WebDAV 路径的播放器,就都能够愉快地播放。这也是 AList 的强大之处,使得其索引的网盘资源可以在多端都具有观看并管理的能力。
AList 的 WebDAV 配置如下:
Name | Value |
---|---|
Host | 域名 / 服务器 ip:5244 |
路径 | dav |
协议 | http / https |
端口 | 与网页端一致 |
用户名 | 与网页端用户名一致 |
密码 | 与网页端密码一致 |
对应填入相关播放器即可,下文以 PotPlayer 和 Kodi 为例,其余可挂载 WebDav 的播放器推荐,可见 AList 官方文档。
示例:配置 PotPlayer
打开 PotPlayer,看到右侧播放列表处,点击新建专辑;
专辑名称自拟,选择 FTP/WebDAV/HTTP 搜索,在协议一栏选择 WebDAV;
主机(IP)/路径一栏填入 域名/dav
,用户名和密码按实际情况填,如采用 https 访问,则勾选 SSL 复选框即可。没有域名的,填入 服务器 ip:/dav
,在端口处填入 5244
。
最后点击确定,就可在播放列表看到 AList 索引的文件内容了。
示例:配置 Kodi
打开 Kodi,首先可以给 Kodi 设置个中文,左上角前往设置,选择 Interface - Skin - Fonts - Arial based,换字体是为了防止中文显示出现乱码,再前往 Interface - Regional - Language 即可找到 Chinese 的选项。
接着回到设置界面,选择媒体 - 资料库 - 视频… - 添加视频… - 浏览 - 添加网络位置;
在点选协议处,根据实际情况切换协议为 WebDAV 服务器(HTTP)或 WebDAV 服务器(HTTPS),服务器地址处,选了 HTTP 的就写 服务器 IP
,下方的端口填 5244
,选了 HTTPS 的就写 域名
,下方的端口填 443
;
远程路劲填 dav
,用户名和密码按实际情况填即可,随后点击确定便配置完成。
Kodi 还支持对于资源的刮削等等设置,此处就不作赘述了。
到这里,简单的个人流媒体服务实际上已经搭建完成了,它目前能够做到:
- 索引 OneDrive、Google Drive、百度、阿里等在线网盘内的文件
- 在任意支持 WebDAV 的播放器内观看并管理网盘储存的视频资源
在大多数情况下,已经非常够用了,寻找资源 - 转存网盘 - 播放器开看,这三步走可以说相当丝滑。
但是作为一个老二次元,这套流程对在下来说还不够,毕竟新番的字幕组资源,几乎都是通过磁力或种子发布的,因此,必须要在这套方案当中加入磁力下载的部分,才算的上完美。
于是,在下又花了点功夫,通过 AutoBangumi 实现了:
- 自动下载在蜜柑计划订阅的当季新番,并上传至指定网盘
- 离线下载任意磁力资源,并自动上传至指定网盘
其实工作原理和在下之前介绍过的《探索优雅纯粹的追番体验:蜜柑计划 + Resilio Sync》非常像,只不过那套方案还是有点不太聪明,现在看来槽点满满,现在有了 AList,很多问题便迎刃而解了。
从这里开始,就起码需要一台服务器了。在下在之前的文章中数次提到自己有一个甲骨文云的账号,可以最多开三台免费的机子。如今在下很多服务都上了 PaaS,对服务器的需求不多了,甲骨文的机子也空了出来(当然,也有春川连大陆线路不好的原因),这次难得有需求,对线路又没什么要求,就拿那台 4C4G,加了 100GB 储存卷,拥有每月足足 10TB 出站流量的豪华 ARM 小鸡来部署吧。
其实,这部分最好的解决方案是部署在 Seedbox 上。
Extra:利用 AutoBangumi 实现自动追番
AutoBangumi 是一个基于蜜柑计划和 qBittorrent 的全自动追番整理下载工具。它通过将蜜柑计划提供的 RSS 编写成合适的下载规则,并导入 qBittorrent 完成自动化番剧下载。比起直接使用蜜柑计划生成的 RSS 订阅链接,它的优点主要有:
- 使用优美的 WebUI 可视化管理
- 番剧文件整理,自动重命名,方便刮削
- 季中追番可以自动补全当季遗漏的所有剧集
- 无需介入的 RSS 解析器,解析番组信息并且自动生成下载规则
- 内置 TDMB 解析器,可以直接生成完整的 TMDB 格式的文件以及番剧信息
AutoBangumi 利用 qBittorrent 作为 BT 下载器,后者过于著名,在此不做赘述。
在执行部署时,强烈建议同时参阅 AutoBangumi 官方文档,在下这里采用 Docker 部署。
1 | #安装 |
这份 docker-compose.yml 同时安装了 AutoBangumi 和 qBittorrent,一步到位。
部署完成后,浏览器输入 服务器 ip:7892
即可访问 AutoBangumi WebUI,之后所有的配置均可在 WebUI 中进行。另外,浏览器输入 服务器 ip:<YOUR_QB_PORT>
即可访问 qBittorrent WebUI。两者的默认用户名是 admin,默认密码都是 adminadmin,建议第一时间进入 WebUI 修改密码。
AutoBangumi 在右上角圆圈处修改,qBittorrent 在 Web UI - Authentication 处修改。
部署 AutoBangumi
前往蜜柑计划获取自己的 RSS 链接,点击我的字幕组订阅更新右下角的 RSS 订阅图标即可,点开后,复制浏览器地址栏中 token= 后面的一串字符。
登录 AutoBangumi WebUI,在设置的 Parser Setting - Token 一栏填入复制的值。这里的 Exclude 支持设置正则表达式排除不想下的文件,结合蜜柑计划的高级订阅非常好用。
找到 Downloader Setting,在 Host处填入 qBittorrent 地址,由于AutoBangumi 和 qBittorrent 在同一个 docker-compose.yml 内部署,可以自动寻址,直接填入 qb:<YOUR_QB_PORT>
即可,当然,也可填入 服务器 ip:<YOUR_QB_PORT>
。Username 和 Password 分别填入 qBittorrent 的用户名和密码。
下方 Manage Setting 中,Eps complete 是番剧补全的开关,启用则会补全当季番剧,关闭则不会补全当季番剧,若欲启动,记得把最上面的总开关 Enable 也打开。
以上就是必要的一些配置,其他的各项配置,详见官方文档。
全部配置完成后,不要忘记点击右下角的 Apply,应用配置。不出意外的话,AutoBangumi 已经开始运作,将订阅的番剧下载到服务器上了。
到这里,自动追番的部分已经实现,此时已经可以搭配 Jellyfin,愉快地自由看番了。
不过在下的这篇文章主要侧重点在「以 AList 为中心的个人流媒体库」,所以多费了些操作将这些下好的番剧同步到网盘,以便其能被 AList 索引。
利用 Rclone 将番剧同步到网盘
番剧下载到服务器上之后,还不能够被 AList 索引(当然,如果正好 AList 也安装在服务器上的话,就可以通过直接添加本地储存的方式索引番剧的下载文件夹了),因此在下选择通过 Rclone 将其同步上传到网盘。
Rclone 也是相当有名的工具了,在此不做赘述,官方提供了一键安装脚本:
1 | sudo -v ; curl https://rclone.org/install.sh | sudo bash |
安装完成后,执行 rclone config
开始配置,根据命令行提示操作:
- 输入
n
新建一个远端连接 - 自拟一个网盘名字
- 选择网盘服务,这里在下选择了 OneDrive,只要这个网盘被 AList 索引即可
- 根据不同网盘的配置不同,详见 Rclone 官方文档说明
- 询问高级配置时输入
n
否定 - 询问自动设置时输入
n
否定,随后根据命令行提示完成具体操作 - 完成配置,输入
q
退出
网盘添加完毕后,就可以开始同步上传了,首先需要找到 qBittorrent 的下载文件夹的路径,若是参照上文方法部署的,则就是之前设置的 <YOUR_DOWNLOAD_PATH>
的值。
执行以下命令开始测试 Rclone 同步,其中 <DRIVE_PATH>
就填之前在 Rclone 中自拟的网盘名字, <DRIVE_PATH>
则填欲上传到的网盘下的路径。
1 | rclone sync -v <YOUR_DOWNLOAD_PATH> <DRIVE_PATH>:<DRIVE_PATH>" |
若提示开始同步,则说明配置一切正常,稍后在网盘和 AList 中便均可看到同步过来的番剧。
确认无误后,给同步添加一个计划任务,SSH 执行 crontab -e
,在最后一行填入:
1 | 0 * * * * rclone sync -v <YOUR_DOWNLOAD_PATH> <DRIVE_PATH>:<DRIVE_PATH>" |
代表每一小时执行同步一次,可以自行适当修改同步时间。
至此,所有工作正式告结,至于离线下载磁力资源?这点已经在刚刚实现了,直接把磁力链或者种子丢到 qBittorrent WebUI 里去就好了,Rclone 会一起将其同步到网盘,随后即可被 AList 索引。
后记
不过有一点需要注意,这个离线下载可能没有想象中的那么自由。如果服务器在境外,不是专门的 Seedbox,也不是抗 DMCA 的服务器的话,就需要考虑 DMCA 投诉问题,目前国内的番剧字幕组和压制组的 BT 是没人管的,因此下载这些比较安全,若是下载一些热门影视资源,可能就不是这样了,随时都可能产生不可预料的后果。总之,还是要珍惜自己的机子,不要一不小心玩死了。