Træfik(Traefik)是云原生的反向代理和负载均衡器,比Nginx更适用于云环境,可以与各种容器编排和集群结合,并且支持动态配置。除此之外还提供诸如证书管理等许多功能以及支持各种插件。
AutoBangumi是从蜜柑计划的RSS订阅链接中抓取下载链接并通过qBittorrent进行下载和重命名的工具。和使用Jackett+Sonarr的方案相比,AutoBangumi几乎只有蜜柑计划一个来源可用,这意味着只能用于下载当季的新动画,此外过滤功能也不够完善,不过其使用也更为简单。
本次使用Docker Compose来进行配置。
准备
首先注册蜜柑计划的账号,注册完成后点击账号设置,打开高级订阅选项并保存。回到蜜柑计划的主页。此时不要点击动画右下的订阅按钮,如果直接点击该订阅按钮,则会直接将所有字幕组的下载地址都加入下载列表。为了避免重续下载,应点击动画的图片,会弹出选择字幕组的选项。然后选择想要订阅的字幕组并点击右侧的订字,在打开高级订阅后,此时会弹出选择字幕语言的选项,选择需要的语言并点击订阅即可。
除此之外,也可以点击动画的名字进入详细界面,可以进一步看到更新时间、大小、以及字幕组的命名规范。
在订阅后,点击最上方的订阅,进入已订阅的列表,在上方会有订阅更新列表,点击右下角的RSS订阅即可得到已订阅动画的RSS链接。由于只有在有更新的情况下才会显示RSS订阅按钮,所以如果没看到RSS订阅按钮,可能需要在上面选择不同的时间范围才会出现。
由于蜜柑计划现在只提供简繁字幕的选项,并不提供诸如清晰度/内封内嵌等选项,所以需要在订阅后通过AutoBangumi和qBittorrent来进一步过滤。
部署
首先确保系统内安装了docker和docker-compose-plugin。
新建一个文件夹,并在其中创建docker-compose.yml文件。
配置Traefik
在docker-compose.yml文件中填入如下内容:
version: '3'
services:
reverse_proxy:
image: traefik
container_name: reverse_proxy
command:
- --providers.docker=true
#监听80端口
- --entrypoints.web.address=:80
#将http重定向至https
- --entrypoints.web.http.redirections.entryPoint.to=websecure
- --entrypoints.web.http.redirections.entryPoint.scheme=https
#监听443端口
- --entrypoints.websecure.address=:443
#配置证书信息,如联络邮箱、储存路径、挑战类型、服务器等
#其中ab为证书解析器的名称,可以任取
#如果需要通过不同方式取得不同证书时,可以设置多个证书解析器,这里只用一个
- [email protected]
- --certificatesresolvers.ab.acme.storage=/letsencrypt/acme.json
- --certificatesresolvers.ab.acme.tlschallenge=true
- --certificatesresolvers.ab.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory
#上面的服务器为测试服务器,测试无误后,将其更换为https://acme-v02.api.letsencrypt.org/directory
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
#挂载证书保存路径,如果不挂载,重启traefik后会申请新证书
- ./letsencrypt:/letsencrypt
networks:
- auto_bangumi
restart: unless-stopped
配置qBittorrent
AutoBangumi使用的下载器为qBittorrent,如果已经安装了,可以跳过。
在docker-compose.yml中继续填入如下内容:
downloader:
image: lscr.io/linuxserver/qbittorrent
container_name: downloader
environment:
- TA=Asia/Shanghai
- TemPath=/downloads
- SavePath=/downloads
#若不想配置.env文件,以下也可以直接填内容,例如GID和UID填1000,QB_PORT填8080
- PGID=${GID}
- PUID=${UID}
- QB_WEBUI_PORT=${QB_PORT}
volumes:
#冒号前为本地路径,可直接填写,支持相对路径,如./downloads
#冒号后为容器内路径,不要修改
- ${DOWNLOAD_PATH}:/downloads
- ./qb:/config
ports:
#默认的Torrent通信端口,一般不用改
- 6881:6881
- 6881:6881/udp
labels:
#以下填写域名、证书解析器和端口,如果上面端口写的数字,下面也写数字
- traefik.http.routers.downloader.rule=Host(`qb.example.com`)
- traefik.http.routers.downloader.tls.certresolver=ab
- traefik.http.services.downloader.loadbalancer.server.port=${QB_PORT}
networks:
- auto_bangumi
restart: unless-stopped
配置AutoBangumi
由于AutoBangumi的面板没有认证,这里使用Traefik的BasicAuth添加一个认证功能。
由于BasicAuth需要使用MD5、SHA1和BCrypt散列后的密码,有许多种工具可以将密码散列,但在docker-compose.yml文件中,还需要对散列后的结果转义,所以这里直接生成转义后的结果。
首先在一台电脑中安装apache2-utils,然后执行如下命令:
echo $(htpasswd -nb username password) | sed -e s/\\$/\\$\\$/g
其中username和password分别为用户名和密码,执行后记下结果备用
继续在docker-compose.yml中填写如下内容:
auto_bangumi:
image: estrellaxd/auto_bangumi
container_name: AutoBangumi
environment:
- TZ=Asia/Shanghai
- AB_INTERVAL_TIME=1800
#下面填qbittorrent的容器名和端口,以及用户名和密码,这里已填写默认密码
- AB_DOWNLOADER_HOST=downloader:${QB_PORT}
- AB_DOWNLOADER_USERNAME=admin
- AB_DOWNLOADER_PASSWORD=adminadmin
- AB_METHOD=pn
- AB_GROUP_TAG=True
#适用于整个订阅的正则表达式,符合条件的将被排除
- AB_NOT_CONTAIN=720
#下载路径,Shin_Bangumi的名字也可以改为其他名称
- AB_DOWNLOAD_PATH=/downloads/Shin_Bangumi
#可以直接填下蜜柑计划的RSS订阅地址,也可以使用.env文件
- AB_RSS=${RSS}
- AB_DEBUG_MODE=False
- AB_EP_COMPLETE=False
- AB_SEASON_ONE=True
volumes:
- ./autoBangumi:/config
labels:
#由于该容器内只监听一个端口,可以省略对端口的指定
- traefik.http.routers.auto_bangumi.=Host(`ab.example.com`)
- traefik.http.routers.auto_bangumi.tls.certresolver=ab
#启用BasicAuth并配置密码,user:hash_password替换为之前生成的散列并转义的结果
- traefik.http.routers.auto_bangumi.middlewares=auth
- traefik.http.middlewares.auth.basicauth.users=user:hash_password
networks:
- auto_bangumi
restart: unless-stopped
depends_on
#位于qBittorrent之后启动
- downloader
其中环境变量可参考AutoBangumi的使用说明来修改。
配置媒体服务器
常用的媒体服务器有Plex、Emby、Jellyfin、Synology Video Station等,其中Plex对于动画效果较差,Sinology Video Station只能用于群晖NAS,剩下的Jellyfin为Emby的开源分支,这里先给出Emby的配置:
media_server
image: emby/embyserver
environment:
- TZ=Asia/Shanghai
volumes:
- ./emby:/config
- ${DOWNLOAD_PATH}/Shin_Bangumi:/media/Shin_Bangumi
labels:
- traefik.http.routers.media_server.rule=Host(`anime.example.com`)
- traefik.http.routers.media_server.tls.certresolver=ab
- traefik.http.services.media_server.loadbalancer.server.port=8096
networks:
- auto_bangumi
restart: unless-stopped
如果打算使用Jellyfin的话,可以使用如下配置:
media_server:
image: jellyfin/jellyfin
container_name: media_server
#Jellyfin需要填写UID和GID,可填写数字如1000:1000
user uid:gid
environment:
- TZ=Asia/Shanghai
volumes:
- ./jellyfin:/config
#jellyfin缓存,这里装入持久卷中
- media_server_cache:/cache
- ${DOWNLOAD_PATH}/Shin_Bangumi:/media/Shin_Bangumi
labels:
- traefik.http.routers.media_server.rule=Host(`anime.example.com`)
- traefik.http.routers.media_server.tls.certresolver=ab
- traefik.http.services.media_server.loadbalancer.server.port=8096
networks:
- auto_bangumi
restart: unless-stopped
结尾及环境变量
如果为Jellyfin配置了持久卷缓存,则填写以下内容:
volumes:
media_server_cache
最后填写网络
networks:
auto_bangumi:
driver: bridge
如果以上的${VARIABLE}没有全都改为实际参数的话,则需要创建.env文件并填写以下内容
export \
DOWNLOAD_PATH=下载路径的绝对路径
RSS=<RSS链接>
QB_PORT=<qBittorrent端口号>
全部文件创建完成后,拉起容器并等待完全启动即可:
docker compose up -d
番外:添加弹幕
RyoLee/emby-danmaku是基于spsundingkai/emby-danmaku所改进的JavaScript弹幕插件,可以通过弹弹Play获取各大弹幕网站的数据,目前仅适用于Emby,除了使用用户脚本以外,也可以通过修改Emby服务端或客户端的方式来启用:
进入Emby的Docker并修改/system/dashboard-ui/index.html
,在</body>前添加:
<script src="https://cdn.jsdelivr.net/gh/RyoLee/emby-danmaku@gh-pages/ede.user.js" defer></script>
但使用容器部署时修改无法持久化,故推荐使用油猴加载用户脚本。
至于Jellyfin,只找到std4453/jfdmk的弹幕插件,使用更为繁琐,每一部作品都要分别配置。但Jellyfin是开源的,可以自动修改Jellfyin的/usr/share/jellyfin/web/index.html
文件并构建镜像。
Comments NOTHING