从零开始的追番生活
最近觉得为了偶尔看看电影动漫而续费腾讯视频会员太吃亏了,一个月四集的《斗罗大陆》水得不行啊喂!哔哩哔哩大会员也是如此,有的时候我在这头,想看的番剧在那头,每次都要科学上网才能解锁,属实费劲。
想了想自己闲置的服务器和最近开通的 Microsoft 365 E5 开发者订阅,我决定自己动手,部署一套更省钱的追番流程。最初是这样一套笨笨的追番流程:「bangumi.moe 等种子站找资源 -> 服务器 Aria2 下载 -> Rclone + Aria2 联动将内容转移到云盘 -> 云盘网页下载」。但是这样一来科学上网工具的流量开销比较大,而且也完全称不上自动。后来我发现 Windows 系统打开 OneDrive 文件夹同步就可以免去手动登录网页下载,于是我从之前的 Google Drive 迁移到 OneDrive,这样一来流程的后两步就合并了。如何让前两步合并呢?一番搜索之后我找到了 FlexGet 这个 Python 编写的工具,众多插件使得 FlexGet 在 RSS 订阅下载上大放异彩。本文便记录这一部署过程。
Rclone
Rclone 用于网盘挂载,从 官方 下载安装,按照命令行提示输入后得到配置文件 rclone.conf
(后续使用),路径一般为 ~/.config/rclone/rclone.conf
。
注意使用自己的 Secret ID & Key,据说能极大的提高文件传输速率。公用的 API 想想就知道肯定比不过自建。参考文档《GoogleDrive: Making your own client_id - rclone.org》《OneDrive: Getting your own Client ID and Key - rclone.org》创建即可。
Rclone 挂载 OneDrive 时需要在运行图形界面的系统上完成。Linux 服务器由于一般不带图形界面,所以需要配合本地机器:在 Windows 中下载 Rclone 相应版本文件,Power Shell 进入解压后的文件夹中键入下面命令后复制 Paste the following into your remote machine --->
和 <---End paste
之间的 SECRET_TOKEN
到远程服务器命令行中。
.\rclone authorize "onedrive" "Client_ID" "Client_secret"
OneDrive 更详细挂载过程可参考文章《Rclone 进阶使用教程 - 自建私有 API 挂载 OneDrive - P3TERX》。后面均使用 OneDrive 部署。
Aria2
Aria2 是一个强大的下载工具,这里使用 Docker 部署 Aria2 后端服务和 AriaNG 前端页面。参考文章《Aria2 Pro - 更好用的 Aria2 Docker 容器镜像 - P3TERX》。
# 建立 Docker 映射文件夹
mkdir /data /data/ariapro /data/ariapro/config /data/ariapro/downloads
# 复制 Rclone 配置文件
cp ~/.config/rclone/rclone.conf /data/ariapro/config/rclone.conf
# 部署 p3terx/aria2-pro 镜像
# 修改 <TOKEN> 为自定字符串
# 若支持 IPv6 则开启 IPV6_MODE=enable 否则需要关闭
docker run -d \
--name ariapro \
--restart unless-stopped \
--log-opt max-size=1m \
--network host \
-e PUID=$UID \
-e PGID=$GID \
-e RPC_SECRET=<TOKEN> \
-e RPC_PORT=6800 \
-e LISTEN_PORT=6888 \
-e IPV6_MODE=enable \
-e SPECIAL_MODE=rclone \
-v /data/ariapro/config:/config \
-v /data/ariapro/downloads:/downloads \
p3terx/aria2-pro
# 部署 p3terx/ariang 镜像
docker run -d \
--name ariang \
--restart unless-stopped \
--log-opt max-size=1m \
-p 6880:6880 \
p3terx/ariang
# 配置 rclone 自动上传
# 根据实际修改网盘名称 drive-name 和网盘路径 drive-dir
nano /data/ariapro/config/script.conf
# 修改下载完成后执行的命令 on-download-complete 为 /root/.aria2c/upload.sh
nano /data/ariapro/config/aria2.conf
# 重启 Aria2 容器
docker restart ariapro
Nginx
由于使用 IP 登录不太方便,所以继续部署 Nginx 服务反向代理 RPC 端口、绑定自己的域名。简便起见,直接使用 Ubuntu 仓库中的 nginx 包。如果服务器中已安装 Nginx,则直接新建配置文件。
apt install -y nginx
安装好后 Nginx 配置文件位于 /etc/nginx
,于 /etc/nginx/conf.d
文件夹下新建 .conf
文件:
Nginx 配置文件
server {
listen [::]:80; # 若支持 IPv6 则启用
listen 80;
listen [::]:443 ssl http2; # 若支持 IPv6 则启用
listen 443 ssl http2;
ssl_certificate /path/to/.crt; # .crt 证书文件路径
ssl_certificate_key /path/to/.key; # .key 证书文件路径
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security max-age=15768000;
server_name www.example.com; # 域名
access_log off;
if ($ssl_protocol = "") { return 301 https://$host$request_uri; }
location / {
proxy_redirect off;
proxy_pass http://localhost:6880; # 修改为 ariang 端口
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
client_max_body_size 100m;
client_body_buffer_size 128k;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
location ^~ /jsonrpc {
proxy_http_version 1.1;
add_header Front-End-Https on;
proxy_set_header Connection "";
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 修改为 p3terx/aria2-pro 容器 RPC_PORT
proxy_pass http://localhost:6800/jsonrpc;
proxy_pass_header X-Transmission-Session-Id;
}
# 多个 aria2 后端示例
# location ^~ /googlejsonrpc { # 修改
# proxy_http_version 1.1;
# add_header Front-End-Https on;
# proxy_set_header Connection "";
# proxy_set_header Host $http_host;
# proxy_set_header X-NginX-Proxy true;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_pass http://localhost:6802/jsonrpc; # 修改
# proxy_pass_header X-Transmission-Session-Id;
# }
}
修改上方例子中的域名、端口即可。多个 Aria2 RPC 端口时可以参考注释掉的部分。最后重启 Nginx。
service nginx restart
# nginx -s reload
RSS
部署 FlexGet 之前当然是先找支持 RSS 订阅的站点!目前我个人觉得萌番组的体验还不错!萌番组官网 / 萌番组 Lite 版官网 / 萌番组 Material Design 版。点击搜索图标添加 Tags 搜索后 RSS 图标链接地址即为可用订阅地址,切换标题搜索同理。
比如 添加标签「Lilith-Raws」「租借女友」「1080p」和搜索标题「Lilith 賢者時間 1080p」分别可以得到这两种 RSS 订阅地址:
https://bangumi.moe/rss/tags/5d8b3245306f1a0007bd7aca+548ee2ce4ab7379536f56358+5efffb4f3d656e43622cacc9
https://bangumi.moe/rss/search/Lilith%20%E8%B3%A2%E8%80%85%E6%99%82%E9%96%93%201080p
除了 bangumi.moe 之外还有很多平台,部分资源相同,罗列一些包括但不限于二次元的资源站:
-
BT RSS 订阅
-
字幕
- VCB-S 分享论坛 ACG 字幕分享
- SubHD.tv 资源+字幕站,找字幕体验非常好
- 字幕天堂
-
漫画
- Animex 动漫社 最近找进击的巨人漫画发现的
- Māngabz 在线漫画阅读
- 动漫之家
- 木马漫画
FlexGet
以上部分搭建了基础的下载环境,接下来利用 FlexGet 实现 Aria2 的 RSS 订阅下载。
FlexGet is a multipurpose automation tool for all of your media
Support for torrents, nzbs, podcasts, comics, TV, movies, RSS, HTML, CSV, and more. 1
由于是 Python 编写,需要先安装 python3 pip3 包。
apt install python3 python3-pip
pip3 install --upgrade pip setuptools
pip3 install flexget
安装完成后新建 FlexGet 配置文件夹并编写配置文件。
mkdir -p ~/.config/flexget
nano ~/.config/flexget/config.yml
FlexGet 配置文件
schedules:
- tasks: "*"
schedule:
hour: "*/2"
tasks:
KanojoOkarishimasu:
rss: https://bangumi.moe/rss/tags/5d8b3245306f1a0007bd7aca+548ee2ce4ab7379536f56358+5efffb4f3d656e43622cacc9
accept_all: yes
aria2:
server: localhost
port: 6800
secret: <TOKEN>
path: /租借女友/
YahariOrenoSeishunLovecomewaMachigatteIruKan:
rss: https://bangumi.moe/rss/tags/5d8b3245306f1a0007bd7aca+548ee2ce4ab7379536f56358+5e822875657e22f4195cc78c
accept_all: yes
aria2:
server: localhost
port: 6800
secret: <TOKEN>
path: /我的青春恋爱物语果然有问题.完/
DouLuoDaLu:
rss: https://bangumi.moe/rss/search/GM-Team%20%E6%96%97%E7%BD%97%E5%A4%A7%E9%99%86%201080p
accept_all: yes
aria2:
server: localhost
port: 6800
secret: <TOKEN>
path: /斗罗大陆/
Japan4KAnimeYTSMX:
rss: https://yts.mx/rss/0/2160p/animation/0/ja
accept_all: yes
aria2:
server: localhost
port: 6800
secret: <TOKEN>
path: /YTS.MX.Japan4KAnime/
注意修改 Aria2 后端端口和 Secret。保存后手动运行测试一次,选一种模式设置定时任务,查看状态。
flexget --test execute
flexget status
# Daemon 模式定时任务
# -d 后台运行
# --autoreload-config 执行前重新载入配置文件
@reboot /usr/local/bin/flexget daemon start -d --autoreload-config
# Crontab 模式定时任务
# 删掉前面配置文件中的 scheduler 块配置
# 使用偏好的编辑器进入,添加一行
crontab -e
*/30 * * * * /usr/local/bin/flexget --cron execute
关于定时任务,上方示例中开头 L1-4 的配置使用了 scheduler 插件,只有在 Daemon 模式下才可用。使用 crontab 定时任务不需要该配置。
Local
最后一步,在本地登录 OneDrive 账号设置同步文件夹。右键将本地文件夹标记为「始终在此设备上保留」即可,当云端存入新的文件时本地就会自动下载同步。删除本地文件夹时,默认会将 OneDrive 云端文件一同删除,只删除本地需要右键选择「释放空间」。
白嫖的开发者订阅 OneDrive 服务器位于境外,从服务器 Rclone 上传文件速度很好,但是有人说本地下载速度太慢,这无法避免。如果使用世纪互联版 OneDrive 本地下载速度肯定会好很多,但服务器上传想必会慢些,自行权衡吧。我使用几周以来尚且满意,睡一觉起来想要看的东西就会自己出现在那里,宅の生活质量提升了,人也变得精神了呢!
End
关于部署上面流程的服务器强烈推荐使用国外的,国内的服务器网络带宽、Docker 部署、BT 下载环境一言难尽。我用的是 Digital Ocean 新加坡服务器,体验良好。如果就看看新番、一集一集下硬盘需求不是很高,20-40 GB 应该就可以了,要拿来正儿八经下东西硬盘还得越大越好的,这几天下的紫罗兰 4K 版全集就有 43 GB 了。本想着部署「省钱」的追番流程,结果下载服务器一个月就花了几十刀,害,钱还是得花!
另外安利一个微软收购的文件转移工具:Mover 安全、强大、快速的文件转移工具,Microsoft 365 用户福音,可以实现 Box,Dropbox,Google,Amazon,Office 365(原 Microsoft 365) 向 Microsoft 365 转移文件,并且支持定时任务!
Comment on Monstx's Blog
评论发表后 UA 信息、IP
地址会被记录,分别用于评论区展示和垃圾评论拦截。
无特殊原因评论不会被删除,你应该懂得如何发表适当的言论并对其负责。