之前一直用Emby作为媒体中心,想看电影、剧集就从PT/BT站去找影片然后通过Transmission下载到群晖,不过慢慢感觉这样有些繁琐,而且对于家庭成员的使用也不友好,从各方看到了一套解决方案:Overseerr+Plex+Sonarr+Radarr+Transmission+Jackett的自动追剧方案。所以在这里将自己的配置过程记录一下(本文全部使用docker进行搭建)
首先介绍一下这套方案用到的软件及服务:
Plex:媒体管理平台,可以将nas中的影片管理起来,并可以进行刮削封面、简介、演员信息等

Transmission(以下简称TR):下载器,通过磁力链接或种子文件进行下载,当然也可以使用qBittorrent

Jackett:种子索引,可以配置一些Indexer(PT/BT站),然后从这些站可以检索影片,相当于给众多影片网站一个统一的入口

Sonarr和Radarr:在这两个软件中配置下载器和检索器Indexer,Sonarr负责剧集下载,Radarr负责电影下载

Overseerr:将上面所有的服务整合起来的软件,Overseerr连接了tmdb数据库,类似国内豆瓣。在Overseerr中配置好Sonarr和Radarr后,对想看的内容提交请求,便可自动实现影片的检索和下载

有部分服务需要访问tmdb的数据,但tmdb的部分域名无法访问,所以需要配置hosts实现访问,使用ssh连接到群晖,在/etc/hosts文件中添加以下内容:
13.224.161.90 api.themoviedb.org
104.16.61.155 image.tmdb.org
13.35.67.86 api.themoviedb.org
54.192.151.79 www.themoviedb.org
在群晖中新建目录结构,用于存放docker的配置文件和下载的影片
示例如下:
data
├── docker # 存放docker配置
├── downloads # 存放下载的影片
│ ├── movies
│ ├── music
│ └── tv
└── media # Plex挂载的目录
├── movies
├── music
└── tv
data目录在群晖上的真实路径为/volume1/data(可以在File Station中右键属性查看),在这里涉及到一个新的概念——硬链接,大家也许会遇到这种场景:PT站下载的影片命名千奇百怪,看着不舒服,强迫症患者可能想按照一定规则重命名,但是如果重命名就会导致PT做种失败,这个时候硬链接就起到作用了,它可以让文件出现在文件系统的多个位置,但只占用一份空间,这也是为什么示例中有downloads和media两个目录的原因,downloads目录存放下载的影片,media用于存放重命名后的影片
两个目录指向了相同的文件,不会占用多份磁盘空间,但是硬链接有一个要求,就是两个目录要在同一个物理磁盘上
下载目录:

硬链接的新目录:

打开群晖docker,搜索并下载以下镜像
linuxserver/plex
linuxserver/overseerr
linuxserver/transmission
linuxserver/jackett
linuxserver/sonarr
linuxserver/radarr
plex文件夹docker run -d \
--name=plex \
--net=host \
--device=/dev/dri:/dev/dri \
-e TZ=Asia/Shanghai \
-e PUID=1000 \
-e PGID=1000 \
-e VERSION=docker \
-e PLEX_CLAIM=PLEX \
-v /volume1/data/docker/plex:/config \
-v /volume1/data/docker/plex/transcode:/transcode \
-v /volume1/data/media:/data/media \
--restart unless-stopped \
linuxserver/plex
说明:
--net=host:是为了让容器使用和群晖相同的网络,使之前的网络配置在容器中生效--device=/dev/dri:/dev/dri:是为了使硬件解码生效PUID和PGID:设置成自己的,建议新建账户,专门用于运行docker容器,通过id username可以获取
-v是映射相应的文件目录到容器中http://localhost:32400,使用plex账户登录,完成基础的设置后,进入Plex的设置界面,在管理-》媒体库中添加资料库

开启自动扫描

transmission文件夹docker run -d \
--name=transmission \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-e TRANSMISSION_WEB_HOME=/transmission-web-control/ \
-e USER=admin \
-e PASS=adminadmin \
-p 9091:9091 \
-p 51413:51413 \
-p 51413:51413/udp \
-v /volume1/data/docker/transmission/config:/config \
-v /volume1/data/docker/transmission/watch:/watch \
-v /volume1/data/downloads:/downloads \
--restart unless-stopped \
linuxserver/transmission
说明:
-e TRANSMISSION_WEB_HOME是为了使用新的WEB UIUSER和PASS设置自己的账号和密码用于登录TRhttp://localhost:9091便可打开TR界面jackett文件夹docker run -d \
--name=jackett \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-p 9117:9117 \
-v /volume1/docker/jackett:/config \
--restart unless-stopped \
linuxserver/jackett
http://localhost:9117打开jackett界面Add Indexer添加索引器,索引器分为两类,public为BT站,private为PT站,BT站推荐以下几个
radarr文件夹docker run -d \
--name=radarr \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-p 7878:7878 \
-v /volume1/docker/radarr:/config \
-v /volume1/data:/data \
--restart unless-stopped \
linuxserver/radarr
http://localhost:7878打开Radarr界面进入Setting-》UI,将界面语言设置为中文,也可跳过

进入设置-》媒体管理,点击显示高级设置,开启硬链接并添加电影根目录


进入设置-》索引器,添加索引器

Jackett界面关于添加索引器的说明:

从Jackett中复制URL和API key到Radarr,然后选择电影相关的分类

进入设置-》下载客户端,添加TR,填入host和账号密码


设置下载路径:

添加远程路径映射


开启刮削


sonarr文件夹docker run -d \
--name=sonarr \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-p 8989:8989 \
-v /volume1/docker/sonarr:/config \
-v /volume1/data:/data \
--restart unless-stopped \
linuxserver/sonarr
http://localhost:8989打开Sonarr界面,配置方式和Radarr一样,只不过Sonarr没有汉化,需要注意的是Sonarr媒体管理的根目录要设置为对应的剧集的目录
overseerr文件夹docker run -d \
--name=overseerr \
--net=host \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-v /volume1/docker/overseerr:/config \
--restart unless-stopped \
linuxserver/overseerr
http://localhost:5055打开Overseerr界面
配置Radarr和Sonarr

Radarr和Sonarr的API Key的获取位置为:Settings -> General -> Security
切换UI为中文

经过上面的过程,整个配置就完成了,让我们开始一个影片的下载
打开Overseerr的探索,任选一部影片,可以看到影片的介绍和评分

点击右侧的提交请求,选择影片质量

可以在右侧请求中看到新提交的请求

点击进入对应影片,点击右侧齿轮可以看到影片正在下载,并且可以跳转到Radarr

查看Radarr和TR


/data/downloads下,下载完成后,会硬链接到下图的目录,等待Plex扫描完成后,便可以在Plex观看了,当然也可手动扫描
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
其实做自媒体的成本并不高,入门只需要一部手机即可!在手机上找视频素材、使用手机剪辑视频、最后使用手机发布视频作品获得收益!方法并不难,今天这期内容就来给粉丝们分享一种小方法,每天稳定收益100-300,抓紧点赞收藏!1、找素材(1)使用手机拍摄自己喜欢的经典段落,使用程序把文案内容提取出来(2)也可以在豆瓣、知乎、微博等网站中找一些自己需要的文案素材(3)把文案进行润色修改,可以加入一些自己的观点(4)视频素材可以使用软件中自带的素材,也可以在素材网站中下载完整版的素材2、文案配音(1)把复制好的文案直接导入小程序中(2)调整音色、音调后一键合成音频即可(3)可以选择自己朗读配音,需要花一点时
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功
我想知道是否可以通过自动创建数组来插入数组,如果数组不存在的话,就像在PHP中一样:$toto[]='titi';如果尚未定义$toto,它将创建数组并将“titi”压入。如果已经存在,它只会推送。在Ruby中我必须这样做:toto||=[]toto.push('titi')可以一行完成吗?因为如果我有一个循环,它会测试“||=”,除了第一次:Person.all.eachdo|person|toto||=[]#with1billionofperson,thislineisuseless999999999times...toto.push(person.name)你有更好的解决方案吗?
我正在寻找用于Rails的优质管理插件。似乎大多数现有的插件/gem(例如“restful_authentication”、“acts_as_authenticated”)都围绕着self注册等展开。但是,我正在寻找一种功能齐全的基于管理/管理角色的解决方案——但不是简单地附加到另一个非基于角色的解决方案。如果我找不到,我想我会自己动手......只是不想重新发明轮子。 最佳答案 RyanBates最近做了两个关于授权的railscast(注意身份验证和授权之间的区别;身份验证检查用户是否如她所说的那样,授权检查用户是否有权访问资源