ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Sonarr追剧自动化完全指南:从Docker部署到硬链接调优

Sonarr追剧自动化完全指南:从Docker部署到硬链接调优 追剧这件事以前靠手动后来靠Sonarr。如果你是那种收藏了几百部剧、硬盘永远不够用、每周还要盯着更新日的人那不用我多介绍你大概率已经在折腾这套工具了。如果还没用过我只能说你一直在用最原始的方式做最重复的劳动。Sonarr是一个开源的电视节目自动化管理工具核心就干三件事自动追踪你订阅的剧集、自动匹配你想要的画质、自动把下载好的文件整理成规范的媒体库。它解决的是从“发现一集更新了”到“海报墙里出现新一集”之间的所有手工操作。简单说它就是你个人媒体库的智能管家适合家里跑了NAS或者专门搭了下载机的折腾党也适合懒到不想每周手动找资源的人。这篇文章我不讲官方文档里那套干巴巴的说明我把从部署到调优、从踩坑到修复的完整经验全部摊开来讲保证你看完能直接抄作业。1. 追剧自动化的核心思路Sonarr到底解决什么问题要理解Sonarr你得先回想一下没有它的日子是怎么过的每周末打开订阅追踪网站看看哪部剧更新了然后去各大资源站搜索对比一下哪个版本画质好、体积合理下载后还得手动改文件名、归类到对应文件夹顺便等字幕……这套流程每周重复一次一年52周十年就是520次几乎一模一样的重复劳动。时间倒是其次关键是这活儿毫无技术含量纯粹是消耗精力的机械操作。Sonarr把整个流程拆成了四个自动化环节我把这四个环节叫作“追剧闭环”订阅追踪告诉Sonarr你追哪部剧它会定时默认每15分钟扫描RSS订阅源自动发现新发布的剧集。质量匹配根据你预设的质量档位比如720p、1080p、4K自动挑选最合适的版本避免下到低清或者超大体积的冗余文件。下载调度把下载任务推送给qBittorrent、Transmission、Deluge这类下载客户端并能持续监控下载状态。文件整理下载完成后自动重命名、移动到媒体库目录同步刷新Plex / Jellyfin / Emby的媒体库保证海报墙里立即可见。这四步跑通之后你唯一要做的就是打开媒体播放器点开想看的剧而已。我自己的NAS上跑了一套Sonarr Radarr Prowlarr qBittorrent Jellyfin的组合常年挂着基本处于无人值守状态除了偶尔硬盘满了要清理其他时间完全不用管。1.1 手动流程和自动化流程的对比先别急着动手装看明白这个对比你才知道自己到底需不需要它。环节手动操作每集约10-15分钟Sonarr自动化后发现更新打开网站翻列表对照自己追的剧定时RSS扫描自动发现新发布生成下载搜索资源筛选大小/画质手工添加任务按预设质量档位自动匹配并推送下载文件管理下载完手动改名移动目录自动重命名并归入标准媒体库结构媒体刷新打开播放器刷新媒体库自动通知媒体服务刷新失败处理下完后发现字幕不匹配重新找重试机制自动换源字幕交给配套工具处理这一对比就很直观了——Sonarr不是帮你省10分钟而是帮你把整个环节变成零操作。我现在每周花在追剧上的时间大概是0分钟想起什么剧就直接在Sonarr里搜一下加订阅剩下的事它全包了。1.2 为什么是Sonarr而不是别的方式可能有人会说我直接用RSS订阅下载器不就行了或者干脆等到季度完结一次性下载整季这两种方案都存在但都有明显的短板。RSS订阅下载器比如flexget确实能做自动下载但它的核心是“按规则处理RSS条目”规则一旦复杂起来写配置的时间足够你手动追十部剧。而且它没有质量筛选和文件整理能力下载完照样面临一堆裸文件躺在下载目录里。整季完结再下载则牺牲了时效性。周更剧追到一半的热度和讨论氛围等完结再看完全变味了而且冷门剧在完结后的资源存活率远低于热门剧拖到月底可能连个好画质的版本都找不到了。Sonarr的价值就在于它把你“追剧”的每一个环节都变成了可配置、可维护、自动运转的状态机。你只需要维护两个东西一是你关注哪些剧二是你想要的画质和语言。其余的全部自动化。2. 部署前的准备搞清楚组件和目录设计少走一半弯路第一次接触Sonarr的人最容易犯的错误就是直接拉个容器跑起来然后发现索引器不会配、下载器连不上、文件不移动、权限报错满天飞。这套系统的坑基本都是架构层面的不是Sonarr本身的问题。开始部署之前先花半小时把组件关系和目录结构设计清楚后面会省掉一大半的麻烦。2.1 配套组件的作用与选型思路Sonarr不是单打独斗的软件它属于一套“自动化媒体管理系统”的中间层。整个体系大致分三层索引层负责搜索和发现资源。常见的有Prowlarr、Jackett、NZBHydra等。这层的作用是把多个资源站统一成一套API接口Sonarr只需要对接一个索引服务就能同时搜索所有站点。推荐新用户直接上Prowlarr配置简单而且能自动把索引器同步给Sonarr、Radarr、Lidarr等多个应用省掉逐个配置的重复劳动。执行层负责实际下载。Sonarr本身不下载文件它把任务推给下载客户端执行。这类工具有qBittorrent、Transmission、Deluge、rTorrent还有专门跑网盘的Aria2组合方案。我最推荐qBittorrent为什么因为它的Web API非常稳定配合Sonarr的走位精准而且可以单独限速、设置做种策略局域网内管理起来也方便。消费层负责媒体播放和展示。Plex、Jellyfin、Emby三选一。如果你不折腾外网访问Jellyfin是零成本最省事的选择如果家里有全家共享需求、想要客户端体验更好的Plex的刮削和管理能力更成熟。无论选哪个Sonarr都能通过API通知它刷新媒体库。组合起来就是Prowlarr负责搜索qBittorrent负责下载Sonarr负责把两者串联并管理文件Jellyfin负责最终呈现。2.2 目录结构设计这是整个系统最关键的一步很多人部署完Sonarr后发现“文件没有显示在媒体库里”、“容器里看不到文件”90%的原因是宿主机目录和容器内目录的映射没有规划好。目录结构设计有一个核心原则宿主机目录和容器内目录必须保持一致的语义划分不能把下载目录和媒体库目录混在一起。我本机的目录结构是这样的/mnt/media/ # 媒体根目录宿主机路径 ├── downloads/ # 下载临时目录 │ ├── movies/ # Radarr专用电影临时区 │ ├── tv/ # Sonarr专用剧集临时区 │ └── music/ # Lidarr专用音乐临时区 ├── library/ # 媒体库目录整理后的最终存放区 │ ├── movies/ # 电影库 │ ├── tv/ # 剧集库 │ └── music/ # 音乐库 └── sonarr/ # Sonarr自身的数据目录配置、数据库、日志 ├── config/ # 配置文件 └── downloads/ # 容器内下载目录的挂载点非必须看具体方案为什么下载目录和媒体库目录必须分开核心原因有二一是便于权限隔离。下载目录的写入者主要是下载客户端媒体库目录的写入者主要是Sonarr负责整理移动两者职责清晰权限配置不纠结。二是为了硬链接的可行性。如果你使用同一文件系统且开启硬链接Sonarr可以在下载完成后立刻对文件建立硬链接——不复制数据瞬间完成“归档”同时种子还在继续做种文件则已经出现在媒体库里。这是最完美的方案既保留做种又不占用双倍磁盘空间。如果不做硬链接Sonarr默认的做法是复制或者移动大文件反复写入会很伤硬盘且空间占用翻倍。这一点我会在第4章展开讲先记住结论目录结构直接决定你后续能不能开启硬链接也决定你能不能让下载器只在下载目录里折腾而媒体库目录只存放最终归档文件。3. 从零开始部署Docker Compose一键拉起整套环境现在进入实操。结合我自己的经验推荐用Docker Compose来部署整套环境拉起来只需要一个配置文件后续升级也不用手动处理依赖关系。假设你的NAS或者Linux服务器已经装好了Docker和Docker Compose插件这个基础就不再赘述了网上教程一堆我们现在来写docker-compose.yml。3.1 完整的Docker Compose编排文件version: 3.8 services: sonarr: image: linuxserver/sonarr:latest container_name: sonarr environment: - PUID1000 - PGID1000 - TZAsia/Shanghai volumes: - /mnt/media/sonarr/config:/config - /mnt/media/downloads:/downloads - /mnt/media/library:/library ports: - 8989:8989 restart: unless-stopped prowlarr: image: linuxserver/prowlarr:latest container_name: prowlarr environment: - PUID1000 - PGID1000 - TZAsia/Shanghai volumes: - /mnt/media/prowlarr/config:/config ports: - 9696:9696 restart: unless-stopped qbittorrent: image: linuxserver/qbittorrent:latest container_name: qbittorrent environment: - PUID1000 - PGID1000 - TZAsia/Shanghai - WEBUI_PORT8080 volumes: - /mnt/media/downloads:/downloads - /mnt/media/qbittorrent/config:/config ports: - 8080:8080 - 6881:6881 - 6881:6881/udp restart: unless-stopped这里有几个细节要特别说明。PUID/PGID是我见过新手栽坑最多的配置项。容器里默认跑的是root用户但映射出来的文件如果全是root权限后面你用NAS上的SMB共享访问媒体库时就会各种权限拒绝。正确做法是先在宿主机上创建一个专门用户比如media记下它的UID和GID用id media命令查看然后填到环境变量里。这样容器创建出的所有文件归属这个用户后续共享、修改、删除都不会出现权限问题。下载目录挂载路径要注意语义一致。上面把宿主机的/mnt/media/downloads挂载到了容器内的/downloads把/mnt/media/library挂载到了/library。这是刻意为之——Sonarr配置里需要填写下载器下载完成后文件的存放路径但只要填容器内路径/downloads就能通不用纠结宿主机路径。这也是很多教程没讲清楚的地方Sonarr和qBittorrent之间传递文件路径时它拿到的其实是下载器容器内部的路径。只要两端容器都挂载了同一个宿主机目录同时确保挂载容器内路径一致就天然不会出现“路径映射错误”。再看qbittorrent我只映射了/downloads没有映射/library这是刻意的——不要让下载器直接写媒体库目录它只管往下载目录里塞东西整理归档的事全权交给Sonarr。3.2 首次启动与初始配置docker compose up -d跑起来之后浏览器打开http://你的服务器IP:8989看到Sonarr的欢迎界面就是第一步成功了。初次进入需要做4件事按顺序来中文界面在“Settings设置→ General常规”里把Language改成Chinese保存后刷新一下就是中文界面了。媒体库根目录在“Settings → Media Management”里把根文件夹的路径设置为/library容器内路径也就是你挂载的媒体库根目录格式如/library/tv。Sonarr要求为每部剧指定归属的根目录这决定了文件整理到哪里。下载客户端接入在“Settings → Download Clients”里添加qBittorrent主机填qbittorrentDocker Compose网络里直接用服务名别填127.0.0.1端口填8080用户名密码就是你在qbittorrent Web UI里设置的那个。保存后点“Test”显示连接成功就是接上了。索引器接入在“Settings → Indexers”里添加刚才部署的Prowlarr主机填prowlarr端口9696Sonarr会自动从Prowlarr那里同步索引器列表不用单独再填什么API key前提是Prowlarr里已经添加了你需要的路段。4. 核心功能深度配置质量档、命名规则与硬链接很多人部署完Sonarr就开始急着用其实默认配置能用但离“好用”差得远。我最建议花时间调校的是三块质量档位、命名规则、硬链接开启。4.1 质量档位怎么设最合理在“Settings → Quality”里Sonarr默认配置了从SD到Ultra HD的各种档位。你不需要给每种格式单独建档位真正要改的核心是两点Upgrades Allowed允许升级这是新用户最容易忽略的选项。开启后如果未来出现了比你已下载版本更高一档的资源比如从720p升级到1080pSonarr会自动搜索升级。听起来很香但如果你的磁盘空间紧张建议关掉否则它可能持续帮你把720p的剧集一个个换成1080p硬盘几天就满了。Quality Profile质量档位按剧集 → Edit → Settings → Quality Profile给每部剧单独设置。我自己的策略是热门美剧选1080p Bluray直出稳定且体积适中老番老剧选1080p Web-DL因为蓝光资源可能早就断种新番则开“允许升级”先用720p占坑等后续更好的版本出来再自动升级。这里有个实操细节质量档位除了看分辨率还要看“来源”。Sonarr的排序优先级是Bluray WEB-DL WEBRip HDTV SDTV。同一部剧WEB-DL 1080p通常比HDTV 1080p体积大但画质更稳。我在档位设置里会优先勾选“Bluray-1080p”作为最高优先级然后允许自动升级。4.2 命名规则标准化是媒体库的灵魂你手动整理时可能不在乎文件名但Sonarr自动整理后命名规则直接决定你的媒体库能不能被Plex/Jellyfin的刮削器正确识别。我用的命名模板是{Series Title} - S{season:00}E{episode:00} - {Episode Title} [{Quality Title}]实际效果就是Breaking Bad - S01E01 - Pilot [Bluray-1080p]这套命名的好处是剧名季集号前置媒体服务器的刮削器能立刻识别剧集身份画质信息放在后方方便后期排查时一眼看出当前版本是什么质量。在“Settings → Media Management”里还可以开启“Rename Episodes重命名剧集”把下载目录里的裸文件名替换成这套命名规则。注意开启重命名后文件会被移动并改名如果你已经建立了媒体库Sonarr会扫描并更新数据库里的旧文件名。第一次跑这个步骤时可能会有大量刮削请求建议选择夜里执行避免给网络和媒体服务器造成过大压力。4.3 硬链接让下载和归档并存但不占双倍空间这块必须单独拿一节来讲因为它太重要了同时太容易被忽略。Sonarr完成下载后默认动作有两种移动文件或复制文件。移动文件的做法有一个硬伤种子还在做种文件被你移走了下载器无法继续做种往往会导致下载器里的任务报错或者做种率异常。复制则会让同一份数据在磁盘上物理存在两份空间浪费巨大。硬链接的妙处在于它在文件系统层面建立多个目录项指向同一份磁盘数据块。也就是说你在downloads目录下看到这个文件在library/tv/剧集目录下也看到这个文件看起来是两个文件实际占用的磁盘空间是一份。硬链接开启的条件有三条缺一不可下载目录和媒体库目录必须在同一个文件系统分区上df -h看一下是不是挂载自同一块盘跨盘就不可能用硬链接只能移动。下载客户端必须允许Sonarr通过API把文件“原子化”地移动到目标位置qBittorrent天然支持。Sonarr的“Settings → Media Management → Import Handling”里把“Use Hardlinks instead of Copy”勾上。满足这些条件后Sonarr会完成一个非常优雅的操作文件下载完成后先硬链接一份到媒体库目录然后通知qBittorrent继续保持原目录里的文件做种。两个目录各有各的路径数据只有一份做种不受影响媒体库也立即可见。等你不再需要做种、清理了下载器里的任务再删掉下载目录那份硬链接磁盘才会真正释放空间。我实测下来装了硬链接方案之后一块12T的硬盘比我以前用“复制后移动”方案多撑了大半年——因为大多数时候下载器里还存着做种文件媒体库里同时显示着同一集剧但物理占用只有一份数据。5. 踩坑实录Sonarr使用中常见的五个问题这节是我最想写的部分。Sonarr这套系统跑起来不难但稳定运行不踩坑才是真本事。我把自己折腾过程中碰到的高频问题全部整理出来附带排查思路一条一条说。5.1 索引器状态异常 / 搜索结果为空现象在Sonarr里搜索想看的剧返回结果永远是0或者“Search failed”报错Prowlarr那边看起来一切正常。排查思路先说系统事件。进Prowlarr的“Indexers”页面看每个索引器的状态灯和“测试”结果。如果显示超时或连接失败基本就是索引器本身的可用性问题。如果所有索引器在Prowlarr里都正常那就进入Sonarr的“System → Events”搜“indexer”关键词看有没有特定索引器被屏蔽的记录。Sonarr有默认的失败熔断机制一个索引器连续失败几次后会被自动暂时禁用这会导致你搜索时结果突然变少甚至为空。还有一个特别常见的坑你用Prowlarr给Sonarr同步了“全部索引器”但有些索引器的category类目没有正确传递。剧集资源应该映射到tv类目如果同步过来的是other或者moviesSonarr搜剧时就会颗粒无收。解决办法是去Prowlarr里编辑索引器手动设置好类目映射再重新同步。5.2 下载完成但Sonarr不进行文件移动现象种子下载100%了但它在媒体库里始终没出现查看任务状态卡在“Downloading”。排查思路这基本就是路径不一致问题。最常见的场景下载器用的容器内下载路径是/downloads/但Sonarr设置的下载目录还是默认的/downloads两者不一致。另一种情况是qBittorrent里给某个分类设置了独立的保存路径比如把剧集种子保存到/downloads/tv/剧名而Sonarr配置的完整下载目录只到/downloads这一层这时候Sonarr也能看到文件但对待处理文件的状态识别有时会抽风导致不移动。我的处理办法是下载器里不给剧集设置分类独立保存路径一律落到/downloads容器内路径Sonarr统一从这里扫描。分类控制在Sonarr这一侧做而不是在下载器侧做。5.3 硬链接失效或者变成了复制现象明明开了硬链接但下载目录和媒体库目录的文件在磁盘上占了两份空间。排查思路验证方法很简单——在媒体库目录里找一个文件用stat看它的inode编号再去下载目录里找同名文件的inode编号如果两个数字不一样就没有成功硬链接。出现这个问题的原因基本是下载目录和媒体库目录确实不在同一个文件系统比如一个在/mnt/disk1另一个在/mnt/disk2。下载器先做了“从临时目录复制到最终下载目录”的操作导致文件已经是新的inodeSonarr再硬链接也是基于那个新文件的但第一步的复制已经消耗了额外空间。Docker容器里的/downloads和/library虽然来自同一个宿主机目录但如果你的存储后端用了某些网络协议挂载比如NFS、SMB硬链接功能可能不可用——网络文件系统对硬链接的支持本来就不稳定我还遇到过NFS下硬链接操作静默降级成复制的情况。所以如果你要用硬链接老老实实让所有目录落在一块本地磁盘上别跨盘、别走网络挂载。5.4 字幕没有跟着自动匹配现象剧集下载完放在媒体库里但播放时没有字幕手动找字幕找得想砸键盘。Sonarr本身不带字幕下载功能它只管理视频文件。字幕这块需要另外两个方案配合方案A最简单使用媒体服务器内置的插件比如Plex的Open Subtitles插件、Jellyfin的Open Subtitles插件播放时自动在线拉字幕。缺点是有些小众剧种子的字幕站点不在支持列表里。方案B完整自动化部署一个Bazarr。它是独立服务能接入Sonarr的API自动识别媒体库缺哪种语言字幕然后从字幕站点自动下载、重命名、匹配。Bazarr和Sonarr之间需要做共享目录的映射确保Bazarr能把字幕文件写进Sonarr管理的媒体库目录。我目前家里跑的是Bazarr中文字幕自动匹配率大概在95%左右剩下的5%是那种刚出没多久、字幕组还没做完的新剧。这个方案补全了Sonarr在字幕能力上的短板属于进阶玩家的标配。5.5 升级后配置丢失或插件驱动器异常现象Sonarr从老版本升级到新版本某些设置项消失或者媒体库索引重新全量扫描卡死CPU。实际情况是Sonarr改名后叫Sonarr v4之后配置格式有部分变动从NLog改到Serilog之类的底层日志切换旧版本的部分设置项会被迁移但迁移过程偶尔会出问题。我经历过一次v3升v4后下载客户端配置全部失效花了半小时重配。这里给两条经验升级前务必备份配置文件。Docker部署的话整个/mnt/media/sonarr/config目录打包一份就行。真的出了问题恢复也非常简单——停容器、覆盖目录、启动。升级后去“System → Tasks”里检查所有计划任务是否正常执行。如果某个任务卡在Executing状态超过半小时多半是数据库迁移不完整这时候可以尝试“Tasks → 对应任务 → 点右上角垃圾桶图标重置任务记录”刷新一下就好了。6. 从Sonarr到全家桶媒体自动化体系的横向扩展如果你已经把Sonarr跑顺了接下来几乎必然会有同一个念头电影能不能也自动化音乐呢电子书呢这时候就该引入Sonarr的同族兄弟们了。这套工具的命名几乎都一样统一由社区维护配置方式也几乎完全一致RadarrSonarr的电影版根据你关注片单自动下载电影、按质量筛选、自动整理。配置方法和Sonarr几乎一模一样会了SonarrRadarr就是新皮套老酒。Lidarr面向音乐专辑的自动化管理工具原理同样基于索引器下载器。Readarr电子书版的自动化管理工具同样支持按作者订阅、自动下载和整理。Prowlarr前面已经提到了所有“Sonarr系”工具统一对接的索引器分发中心一次配置所有应用共用。这四个工具跑在一起效果的震撼感是很直观的Sonarr每天早上自动看到昨晚更新的一集Radarr帮你把周末想看的新上映片下了Lidarr在后台悄悄补全你歌单的高清音频版本Readarr看到了你关注作者的电子书更新。而你做的事只是偶尔打开媒体库刷一刷收藏墙。这套方案跑起来后的稳定度说实话取决于你的网络环境和索引器可用性。条件好的情况下我家里这套系统已经连续跑了8个月没有人工干预过。Sonarr做得好的地方在于它虽然是自动化工具但给了用户足够的可观测性和控制权——每个任务都有日志、每种操作都可以预览、每个失败都有重试策略。这也是我为什么一直推荐新手直接入Sonarr而不是其他偏门工具的原因它的容错机制会帮你遮掉很多环境不稳定的问题。关于扩展这块我只给一个建议不要一次性把全家桶全部部署完。先把Sonarr跑熟练理解它的目录设计、路径传递、质量档位逻辑再逐步加Radarr、Lidarr。工具之间看起来是独立的但底层逻辑高度相似你先把一个玩透了剩下的就是复制粘贴改改名字和端口而已。一上来就全家桶遇到问题连排查都无从下手容易劝退。用下来的个人体会是Sonarr这类工具改变了我的一个习惯以前看剧是“打开播放器看看有什么”现在是“想到一部剧就加订阅哪天它出现在媒体库我就知道该看了”。下载和整理这些琐碎事交给系统去跑我这只手动折腾的手终于可以专心研究收藏和整理策略了。
返回列表