受够了爱优腾的付费?受够了费劲满世界找资源还得等下载?受够了下载的视频只能在电脑上看?那不如试试自动化追剧这一堆玩意~
总体上说,通过这一套系统,可以通过ombi网页选择想看的电影or电视剧,后台自动下载视频文件、修改成标准命名并按需下载字幕。随后就可以在emby网页上或者客户端上观看,并且支持多用户多设备。而且顺便可以自动做种,自动刷PT。
结构总体系统如图所示
由下到上进行说明功能:
Indexer Manager(索引管理器):Jackett 、Prowlarr 二选一,Prowlarr比较新,支持自动将合适的indexer推送到各个PVR。由于各个BT、PT、NZB资源站都不统一格式且不提供api,所以索引管理器就是将不同资源站点暴露为统一接口,方便其他程序调用以获取资源信息(种子、磁链等),基本就是个干些脏活累活的爬虫。当然这也是一切资源的源头,建议随时保持更新。 PVR(Personal Video Recorder): Sonarr 电影集管理、Radarr 剧集管理。PVR通过索引管理器提供的各个indexer搜索目标电影、剧集并获取种子,然后调用下载器下载。待下载完成后修改文件名字为规范格式,同时将电影的名字演员海报等元信息保存到目录下,方便媒体服务器使用。 Downloader(下载器): qBittorrent BT下载器,可选的较多。还有一种nzb网络资源,但是这个的加入一般要付费。 Media Server: Emby 、Plex 、Jellyfin 是最常用的三个。媒体服务器提供观看媒体资源的入口,并将电影、电视剧的信息显示出来,而不是光秃秃的一个视频文件。支持网页在线观看或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: - "traefik.enable=true" - "traefik.http.services.emby.loadbalancer.server.port=8096" - "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 environment: - PUID=1000 - PGID=1000 - PERMS=true - TZ=Asia/Shanghai - UMASK=022 labels: - "traefik.enable=true" - "traefik.http.services.chinesesubfinder.loadbalancer.server.port=19035" - "traefik.http.routers.chinesesubfinder.entrypoints=web" - "traefik.http.routers.chinesesubfinder.rule=Host(`chinesesubfinder.media.clemon`)" - "traefik.http.routers.chinesesubfinder.service=chinesesubfinder" ports: - 19035 - 19037 :19037 logging: driver: "json-file" options: max-size: "100m" 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: - "traefik.enable=true" - "traefik.http.services.prowlarr.loadbalancer.server.port=9696" - "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: - "traefik.enable=true" - "traefik.http.services.ombi.loadbalancer.server.port=3579" - "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: - "traefik.enable=true" - "traefik.http.services.sonarr.loadbalancer.server.port=8989" - "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: - "traefik.enable=true" - "traefik.http.services.radarr.loadbalancer.server.port=7878" - "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: - "traefik.enable=true" - "traefik.http.services.qbittorrent.loadbalancer.server.port=8080" - "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: - "traefik.enable=true" - "traefik.http.services.flaresolverr.loadbalancer.server.port=8191" - "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添加FlareSolverr作为代理: 添加Radarr和Sonarr,Prowlarr自动同步indexer过去,ApiKey从Radarr的设置里获取 然后添加一堆indexer就好了 FlareSolverr没有界面,无需配置,开箱即用。
Sonarr添加视频文件夹 添加下载器 Host和Port就是qBittorrent的地址,用户名密码就是登陆管理网页那个。 获取ApiKey Radarr操作和Sonarr十分类似,不再赘述。
Ombi配置Sonarr和Raddar。如图,地址和ApiKey填好了右边的Load以下就能选了。Raddar类似,不再赘述。 配置Emby。 qBittorrent除了设置好用户名密码外没啥好配置的,唯一需要注意的是要把传入连接的端口暴露到最外层,需要一级一级路由器做端口转发。
ChineseSubFinder配置媒体文件位置 字幕源配置 Emby等其他对着填上就好了,保存运行等自动扫描库即可 Emby选定各个媒体文件夹的位置,创建媒体库 ApiKey在这里创建 根据需要创建不同账户给不同人用 收工 基本使用流程Ombi找到想看的,创建下载请求 等待下载ok 去emby看! Trouble Shooting