Testcontainers一键拉起Radarr、Sonarr、Jellyfin全家桶:Janitorr本地开发环境完全指南

发布时间:2026/8/23 14:03:04

Testcontainers一键拉起Radarr、Sonarr、Jellyfin全家桶:Janitorr本地开发环境完全指南
Testcontainers一键拉起Radarr、Sonarr、Jellyfin全家桶Janitorr本地开发环境完全指南【免费下载链接】janitorrCleans your Radarr, Sonarr, Jellyseerr and Jellyfin before you run out of space项目地址: https://gitcode.com/gh_mirrors/ja/janitorrJanitorr是一款自动清理Radarr、Sonarr、SeerrJellyseerr和 Jellyfin媒体库的工具帮你在磁盘写满之前删掉永远不会被观看的影片。对开发者来说它最大的调试难点是依赖服务太多Radarr、Sonarr、Jellyfin、Seerr 一个都不能少。Janitorr 用Testcontainers打造了一套本地开发环境——运行一个main函数即可自动拉起全家桶容器、完成全部初始化配置真正做到一键调试。为什么需要一键本地开发环境Janitorr 的工作流程横跨多个服务从 *arr 拉取抓取历史、查询 Jellyfin 的观看状态、清理 Seerr 中的请求、最后删除文件。手动搭建一套这样的环境你需要逐个部署 Radarr、Sonarr、Jellyfin、Seerr 四个容器手工填写 API Key、配置根目录、质量配置、下载器解决服务之间互相访问的端口与网络问题准备一批真实的电影/剧集素材供清理流程使用Janitorr 的本地开发环境把这些步骤全部自动化了所有服务由 Testcontainers 启动在隔离的 Docker 网络中API Key 从容器配置里自动读取初始化向导自动完成甚至连示例媒体库都会自动下载并摆好目录结构。一键启动Testcontainers 全家桶包含哪些服务入口是 LocalJanitorrStarter.kt 中的main函数它调用 LocalDevEnvironment.kt 的start()方法。启动后的完整服务清单如下容器宿主机端口默认账号 / 密码Radarr随机分配admin / adminSonarr随机分配admin / adminJellyfin随机分配admin / adminadminSeerr随机分配admin / adminadminjanitorr-stats随机分配无需登录所有容器共享一条名为janitorr-local-dev的 Docker 桥接网络见 LocalDevNetwork.kt因此它们可以互相通过服务名访问例如http://jellyfin:8096而暴露到宿主机的端口是随机空闲端口不会与你已有的本地服务冲突。最快启动方法3 步运行 LocalJanitorrStarter前提条件安装 Docker并用 IntelliJ或其他支持 Kotlin 的 IDE打开项目。第 1 步获取代码git clone https://gitcode.com/gh_mirrors/ja/janitorr第 2 步定位入口文件打开 LocalJanitorrStarter.kt路径src/test/kotlin/com/github/schaka/janitorr/LocalJanitorrStarter.kt。第 3 步运行 main 函数点击fun main旁边的绿色运行图标或右键选择Run LocalJanitorrStarterKt。首次运行需要几分钟IDE 的 Run 面板会滚动输出容器启动和每一步初始化的日志。一切就绪后日志会打印各服务的地址与凭据Started Radarr at http://localhost:54321 Login via: admin/admin | API-Key: ... Started Sonarr at http://localhost:54322 Login via: admin/admin | API-Key: ... Started Jellyfin at http://localhost:54323 Login via: admin/adminadmin | API-Key: ... Started Seerr at http://localhost:54324 Login via: admin/adminadmin | API-Key: ... Started Janitorr-Stats at http://localhost:54325此时 Janitorr 本体已连上全部服务并正常运行——你可以在浏览器里操作各服务界面也可以在 IntelliJ 中照常挂断点调试。幕后揭秘Testcontainers 启动序列做了什么start()的执行顺序精心设计值得了解详细说明见 docs/local-development.md创建共享目录在项目根目录local-runtime/下建立media/、downloads/、downloads/incomplete/后台准备媒体库从 Blender 开源片库下载一个示例视频自动搭建 10 部电影 5 部剧集的目录结构软链接方式视频文件会缓存复用并行启动容器Radarr、Sonarr、Jellyfin、Seerr 通过Startables.deepStart()同时拉起读取 API Key每个 *arr 的 Key 通过exec进容器读取config.xml获得带重试机制例如 RadarrContainer.kt 中最多重试 10 次配置 Radarr / Sonarr通过 HTTP API 设置根目录、质量配置、下载器和命名规则完成 Jellyfin 初始化向导创建管理员用户、生成janitorr-localAPI Key见 JellyfinSetup.kt单独启动 janitorr-stats它启动时校验 Jellyfin API Key必须等 Jellyfin 就绪后写入配置才能拉起配置 Seerr完成初始向导并关联 Radarr/Sonarr注入属性所有端口和 Key 通过System.setProperty注入Spring Boot 会像读取application.yml一样消费它们持久化机制为什么第二次启动更快local-runtime/目录保存了重建代价高的状态且已被加入.gitignore不会被提交路径作用local-runtime/media/cache/缓存的示例视频跨运行复用local-runtime/jellyfin/api-key.txtJellyfin API Key仍有效时直接跳过向导local-runtime/radarr/、local-runtime/sonarr/等各容器配置目录每次运行挂载进容器例如 JellyfinSetup 会先校验缓存的 API Key 是否仍有效调用GET /Users/Me有效则完全跳过向导与建 Key 步骤避免在 Jellyfin 里堆积过期 Key。常见问题排查Q首次运行卡住很久正常现象——需要下载镜像、等待 Jellyfin 完成首次扫描。每个容器都配置了 HTTP 健康检查如 Radarr 的/ping、Jellyfin 的/health超时上限一般为 3~5 分钟。Q日志提示 Seerr setup did not completeSeerr 初始化失败时Seerr 集成会被自动禁用其余服务不受影响可重试运行。Q想单独测试某一个容器每个容器类都接受可选的network参数默认null可以脱离全家桶在聚焦的集成测试中单独使用。小提示本地开发基础设施位于src/test/kotlin下作者有意以较低标准维护它——它不随产品发布、迭代频繁只为方便调试而存在使用时遇到毛边属于预期现象。总结Janitorr 的 Testcontainers 本地开发环境把搭环境这件最耗时的事压缩成了一次点击 一个main函数拉起 5 个真实服务容器 API Key、初始化向导、媒体库全部自动处理 随机端口 独立网络零冲突 状态持久化二次启动显著提速打开 LocalJanitorrStarter.kt点下运行键你就可以心无旁骛地调试 Janitorr 本身的清理逻辑了。【免费下载链接】janitorrCleans your Radarr, Sonarr, Jellyseerr and Jellyfin before you run out of space项目地址: https://gitcode.com/gh_mirrors/ja/janitorr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

如何从零跑通 PyMAF:环境配置与 SMPL 模型数据准备完整教程

如何从零跑通 PyMAF:环境配置与 SMPL 模型数据准备完整教程

2026/8/23 14:03:04

如何从零跑通 PyMAF:环境配置与 SMPL 模型数据准备完整教程 【免费下载链接】PyMAF [ICCV 2021, Oral] PyMAF: 3D Human Pose and Shape Regression with Pyramidal Mesh Alignment Feedback Loop 项目地址: https://gitcode.com/gh_mirrors/py/PyMAF PyMAF …

DNS-Challenge 深度降噪实战手册:从零搭建语音增强数据与评估流水线

DNS-Challenge 深度降噪实战手册:从零搭建语音增强数据与评估流水线

2026/8/23 14:03:04

DNS-Challenge 深度降噪实战手册:从零搭建语音增强数据与评估流水线 【免费下载链接】DNS-Challenge This repo contains the scripts, models, and required files for the Deep Noise Suppression (DNS) Challenge. 项目地址: https://gitcode.com/gh_mirrors/…

PersonaLive 上手指南:5 分钟装好实时人像动画系统,1 张肖像图生成无限直播流

PersonaLive 上手指南:5 分钟装好实时人像动画系统,1 张肖像图生成无限直播流

2026/8/23 13:53:03

PersonaLive 上手指南:5 分钟装好实时人像动画系统,1 张肖像图生成无限直播流 【免费下载链接】PersonaLive [CVPR 2026] PersonaLive! : Expressive Portrait Image Animation for Live Streaming 项目地址: https://gitcode.com/GitHub_Trending/pe/…

Listen1:一个浏览器插件免费听遍七大音乐平台,聚合搜歌告别版权焦虑

Listen1:一个浏览器插件免费听遍七大音乐平台,聚合搜歌告别版权焦虑

2026/8/23 14:53:06

Listen1:一个浏览器插件免费听遍七大音乐平台,聚合搜歌告别版权焦虑 【免费下载链接】listen1_chrome_extension one for all free music in china (chrome extension, also works for firefox) 项目地址: https://gitcode.com/gh_mirrors/li/listen1_…

FlicFlac:绿色免安装,一键转换 7 种音频

FlicFlac:绿色免安装,一键转换 7 种音频

2026/8/23 14:53:06

FlicFlac:绿色免安装,一键转换 7 种音频 【免费下载链接】FlicFlac Tiny portable audio converter for Windows (WAV FLAC MP3 OGG APE M4A AAC) 项目地址: https://gitcode.com/gh_mirrors/fl/FlicFlac 上周末,我把攒了多年的 2GB …

Gridfinity Extended磁铁与螺丝固定系统全解析:内置磁铁、易拆孔与悬垂修复技巧

Gridfinity Extended磁铁与螺丝固定系统全解析:内置磁铁、易拆孔与悬垂修复技巧

2026/8/23 14:53:06

Gridfinity Extended磁铁与螺丝固定系统全解析:内置磁铁、易拆孔与悬垂修复技巧 【免费下载链接】gridfinity_extended_openscad Gridfinity Extended OpenSCAD Model 项目地址: https://gitcode.com/gh_mirrors/gr/gridfinity_extended_openscad Gridfinity…

如何10倍加速adetailer模型推理?ONNX导出与TensorRT优化完整指南

如何10倍加速adetailer模型推理?ONNX导出与TensorRT优化完整指南

2026/8/23 14:53:06

如何10倍加速adetailer模型推理?ONNX导出与TensorRT优化完整指南 【免费下载链接】adetailer 项目地址: https://ai.gitcode.com/hf_mirrors/Bingsu/adetailer adetailer(Automatic Detailer,自动细节修复)是 Stable Diff…

FLAN-T5-XXL生产部署指南:从本地推理到高性能文本生成服务的完整清单

FLAN-T5-XXL生产部署指南:从本地推理到高性能文本生成服务的完整清单

2026/8/23 14:53:06

FLAN-T5-XXL生产部署指南:从本地推理到高性能文本生成服务的完整清单 【免费下载链接】flan-t5-xxl 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/flan-t5-xxl FLAN-T5-XXL 是谷歌开源的 110 亿参数指令微调文本生成模型,一个模型即…

GSoC Organizations 架构拆解:Gatsby 5 + Redux Toolkit 如何驱动千级 GSoC 组织的静态生成与秒级筛选

GSoC Organizations 架构拆解:Gatsby 5 + Redux Toolkit 如何驱动千级 GSoC 组织的静态生成与秒级筛选

2026/8/23 14:43:05

GSoC Organizations 架构拆解:Gatsby 5 Redux Toolkit 如何驱动千级 GSoC 组织的静态生成与秒级筛选 【免费下载链接】gsoc-organizations A site for viewing and analyzing the info of the organizations participating in Google Summer of Code. 项目地址: …

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/23 0:02:09

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/23 0:02:09

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/23 0:02:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/23 0:02:09

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/23 0:02:09

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/23 0:02:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…