受够了爱优腾的付费?受够了费劲满世界找资源还得等下载?受够了下载的视频只能在电脑上看?那不如试试自动化追剧这一堆玩意~

总体上说,通过这一套系统,可以通过ombi网页选择想看的电影or电视剧,后台自动下载视频文件、修改成标准命名并按需下载字幕。随后就可以在emby网页上或者客户端上观看,并且支持多用户多设备。而且顺便可以自动做种,自动刷PT。

结构

总体系统如图所示

mbox

由下到上进行说明功能:

  • Indexer Manager(索引管理器):JackettProwlarr二选一,Prowlarr比较新,支持自动将合适的indexer推送到各个PVR。由于各个BT、PT、NZB资源站都不统一格式且不提供api,所以索引管理器就是将不同资源站点暴露为统一接口,方便其他程序调用以获取资源信息(种子、磁链等),基本就是个干些脏活累活的爬虫。当然这也是一切资源的源头,建议随时保持更新。
  • PVR(Personal Video Recorder): Sonarr电影集管理、Radarr剧集管理。PVR通过索引管理器提供的各个indexer搜索目标电影、剧集并获取种子,然后调用下载器下载。待下载完成后修改文件名字为规范格式,同时将电影的名字演员海报等元信息保存到目录下,方便媒体服务器使用。
  • Downloader(下载器): qBittorrent BT下载器,可选的较多。还有一种nzb网络资源,但是这个的加入一般要付费。
  • Media Server: EmbyPlexJellyfin是最常用的三个。媒体服务器提供观看媒体资源的入口,并将电影、电视剧的信息显示出来,而不是光秃秃的一个视频文件。支持网页在线观看或app客户端观看,可以理解为自己爱奇艺类似的打开网页就看。
  • Subtitles(字幕): 字幕搜索与下载。ChineseSubFinder用着还可以,自动下载中文字幕,功能丰富,国人推出!
  • Ombi: 由于各个PVR比较分散,找起资源跑来跑去比较麻烦,所以就有了一个统一的入口软件ombi,直接在ombi中选择想看的,对应的PVR里面就会自动下载。
  • FlareSolverr: 有的indexer在国外,用了Cloudflare作为CDN,需要FlareSolverr来过cf盾,不然连不上。
  • Storage: 存储。下载来的视频文件、元数据文件、字幕文件总得有个地方存着吧?

图中箭头表示不同部分间有直接联系,需互相访问。

着重说下存储部分,PVR、Downloader、Media Server、Subtitles都需要访问存储的视频文件。逻辑一般是,由于临时下载目录和存放目录不是同一个目录,且BT还需要保存文件做种,当下载完成后,PVR对临时下载目录中的目标文件创建一个硬链接到媒体资源文件,这样PVR和媒体服务器都可以访问该视频文件了。因此,需要保证临时下载文件夹和媒体文件夹在同一个硬盘上,否则是不能创建硬链接的。并且最好保证docker部署时,不同应用看到的文件路径是一样的,否则需要配置远程路径映射

对于All in One来说,所有东西在一台机器上直接挂载本地目录就好了。

而我的Nas运行TrueNas只负责存储不跑应用,单独用另外一台服务器提供服务,通过NFS挂载nas使用。

部署

先直接给个超大的docker compose文件(省略掉了traefik部分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
version: '3'

services:
emby:
image: linuxserver/emby:latest
container_name: emby
hostname: emby
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- ./config/emby:/config
- /mnt/media:/data
labels:
# auto update image
# - "com.centurylinklabs.watchtower.enable=true"
# traefik
- "traefik.enable=true"
# svc
- "traefik.http.services.emby.loadbalancer.server.port=8096"
# http
- "traefik.http.routers.emby.entrypoints=web"
- "traefik.http.routers.emby.rule=Host(`emby.media.clemon`)"
- "traefik.http.routers.emby.service=emby"
ports:
- 8096
chinesesubfinder:
image: allanpk716/chinesesubfinder:latest
container_name: chinesesubfinder
hostname: chinesesubfinder
restart: unless-stopped
volumes:
- ./config/chinesesubfinder:/config # 冒号左边请修改为你想在主机上保存配置、日志等文件的路径
- /mnt/media:/media # 请修改为你的媒体目录,冒号右边可以改成你方便记忆的目录,多个媒体目录需要分别映射进来
- ./config/chinesesubfinder/browser:/root/.cache/rod/browser # 容器重启后无需再次下载 chrome,除非 go-rod 更新
environment:
- PUID=1000 # uid
- PGID=1000 # gid
- PERMS=true # 是否重设/media权限
- TZ=Asia/Shanghai # 时区
- UMASK=022 # 权限掩码
labels:
# auto update image
# - "com.centurylinklabs.watchtower.enable=true"
# traefik
- "traefik.enable=true"
# svc
- "traefik.http.services.chinesesubfinder.loadbalancer.server.port=19035"
# http
- "traefik.http.routers.chinesesubfinder.entrypoints=web"
- "traefik.http.routers.chinesesubfinder.rule=Host(`chinesesubfinder.media.clemon`)"
- "traefik.http.routers.chinesesubfinder.service=chinesesubfinder"
ports:
- 19035 # 从0.20.0版本开始,通过webui来设置
- 19037:19037 # webui 的视频列表读取图片用,务必设置不要暴露到外网
logging:
driver: "json-file"
options:
max-size: "100m" # 限制docker控制台日志大小,可自行调整
prowlarr:
image: linuxserver/prowlarr:latest
container_name: prowlarr
hostname: prowlarr
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- ./config/prowlarr:/config
labels:
# auto update image
# - "com.centurylinklabs.watchtower.enable=true"
# traefik
- "traefik.enable=true"
# svc
- "traefik.http.services.prowlarr.loadbalancer.server.port=9696"
# http
- "traefik.http.routers.prowlarr.entrypoints=web"
- "traefik.http.routers.prowlarr.rule=Host(`prowlarr.media.clemon`)"
- "traefik.http.routers.prowlarr.service=prowlarr"
ports:
- 9696
ombi:
image: linuxserver/ombi:latest
container_name: ombi
hostname: ombi
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- ./config/ombi:/config
labels:
# auto update image
# - "com.centurylinklabs.watchtower.enable=true"
# traefik
- "traefik.enable=true"
# svc
- "traefik.http.services.ombi.loadbalancer.server.port=3579"
# http
- "traefik.http.routers.ombi.entrypoints=web"
- "traefik.http.routers.ombi.rule=Host(`ombi.media.clemon`)"
- "traefik.http.routers.ombi.service=ombi"
ports:
- 3579
sonarr:
image: linuxserver/sonarr:latest
container_name: sonarr
hostname: sonarr
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- ./config/sonarr:/config
- /mnt/media:/data
labels:
# auto update image
# - "com.centurylinklabs.watchtower.enable=true"
# traefik
- "traefik.enable=true"
# svc
- "traefik.http.services.sonarr.loadbalancer.server.port=8989"
# http
- "traefik.http.routers.sonarr.entrypoints=web"
- "traefik.http.routers.sonarr.rule=Host(`sonarr.media.clemon`)"
- "traefik.http.routers.sonarr.service=sonarr"
ports:
- 8989
radarr:
image: linuxserver/radarr:latest
container_name: radarr
hostname: radarr
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- ./config/radarr:/config
- /mnt/media:/data
labels:
# auto update image
# - "com.centurylinklabs.watchtower.enable=true"
# traefik
- "traefik.enable=true"
# svc
- "traefik.http.services.radarr.loadbalancer.server.port=7878"
# http
- "traefik.http.routers.radarr.entrypoints=web"
- "traefik.http.routers.radarr.rule=Host(`radarr.media.clemon`)"
- "traefik.http.routers.radarr.service=radarr"
ports:
- 7878
qbittorrent:
image: superng6/qbittorrent:latest
container_name: qbittorrent
hostname: qbittorrent
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- ./config/qbittorrent:/config
- /mnt/media:/data
labels:
# auto update image
# - "com.centurylinklabs.watchtower.enable=true"
# traefik
- "traefik.enable=true"
# svc
- "traefik.http.services.qbittorrent.loadbalancer.server.port=8080"
# http
- "traefik.http.routers.qbittorrent.entrypoints=web"
- "traefik.http.routers.qbittorrent.rule=Host(`qbittorrent.media.clemon`)"
- "traefik.http.routers.qbittorrent.service=qbittorrent"
ports:
- 8080
- 26881:26881/tcp
- 26881:26881/udp
flaresolverr:
image: flaresolverr/flaresolverr:latest
container_name: flaresolverr
hostname: flaresolverr
restart: unless-stopped
environment:
- LOG_LEVEL=${LOG_LEVEL:-info}
- LOG_HTML=${LOG_HTML:-false}
- CAPTCHA_SOLVER=${CAPTCHA_SOLVER:-none}
- TEST_URL=http://www.baidu.com
- TZ=Asia/Shanghai
labels:
# auto update image
# - "com.centurylinklabs.watchtower.enable=true"
# traefik
- "traefik.enable=true"
# svc
- "traefik.http.services.flaresolverr.loadbalancer.server.port=8191"
# http
- "traefik.http.routers.flaresolverr.entrypoints=web"
- "traefik.http.routers.flaresolverr.rule=Host(`flaresolverr.media.clemon`)"
- "traefik.http.routers.flaresolverr.service=flaresolverr"
ports:
- 8191


networks:
default:
name: traefik_bridge
external: true

配置

最主要的就是把结构图里几个箭头给实现了。指向存储的几个箭头通过docker挂载vol完成了,剩下的几个箭头都是通过软件配置。

通过上面的docker compose部署的,各个应用处于同一个network,都有各自的hostname,所以用对应的hostname和端口即可在内部互相访问。

Prowlarr

  1. 添加FlareSolverr作为代理:
image-20230507224244062
  1. 添加Radarr和Sonarr,Prowlarr自动同步indexer过去,ApiKey从Radarr的设置里获取
image-20230507224426313
  1. 然后添加一堆indexer就好了
image-20230507224554422

FlareSolverr

没有界面,无需配置,开箱即用。

Sonarr

  1. 添加视频文件夹
    image-20230507224935143
  2. 添加下载器
    image-20230507225040570
    Host和Port就是qBittorrent的地址,用户名密码就是登陆管理网页那个。
  3. 获取ApiKey
    image-20230507225302090

Radarr

操作和Sonarr十分类似,不再赘述。

Ombi

  1. 配置Sonarr和Raddar。如图,地址和ApiKey填好了右边的Load以下就能选了。Raddar类似,不再赘述。
    image-20230507225827988
  2. 配置Emby。
    image-20230507230015737

qBittorrent

除了设置好用户名密码外没啥好配置的,唯一需要注意的是要把传入连接的端口暴露到最外层,需要一级一级路由器做端口转发。

image-20230507224828655

ChineseSubFinder

  1. 配置媒体文件位置
    image-20230507230233586
  2. 字幕源配置
    image-20230507230330841
  3. Emby等其他对着填上就好了,保存运行等自动扫描库即可

Emby

  1. 选定各个媒体文件夹的位置,创建媒体库
  2. ApiKey在这里创建
    image-20230507230700533
  3. 根据需要创建不同账户给不同人用

收工

基本使用流程

  1. Ombi找到想看的,创建下载请求
  2. 等待下载ok
  3. 去emby看!

Trouble Shooting