尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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),仅供参考
RELATED

相关推荐

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

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

如何从零跑通 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 …

📅 2026/9/15 3:45:09
DNS-Challenge 深度降噪实战手册:从零搭建语音增强数据与评估流水线

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

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/…

📅 2026/10/7 18:52:36
被外语卡住的剧情怎么破:MORT 游戏实时翻译,框选对话区域到出译文只要 3 步

被外语卡住的剧情怎么破:MORT 游戏实时翻译,框选对话区域到出译文只要 3 步

被外语卡住的剧情怎么破:MORT 游戏实时翻译,框选对话区域到出译文只要 3 步 【免费下载链接】MORT MORT 번역기 프로젝트 - Real-time game translator with OCR 项目地址: https://gitcode.com/gh_mirrors/mort/MORT MORT 是一款开源的游戏实时翻…

📅 2026/10/7 0:21:40
MORE NEWS

更多资讯

📰

蓝彩影视V73四端同源拆解:H5首屏、TV焦点与播放链路

简介:蓝彩影视V73系统面向需要搭建多端影视平台的开发者与站长,覆盖安卓、苹果、网页和TV端,采用H5页面配合后台管理,重点解决多端数据同步、页面自定义及广告位管理等需求。压缩包共304个文件,约196.3MB,含…

📰

Kimi 3.1 API信号解读:k3d1-agent、Swarm蜂群与3档慢思考

1. 从“圆周率缺角”说起:这个标题到底在暗示什么第一次看到“圆周率神秘缺角”这个说法,我愣了几秒。圆周率π是无限不循环小数,哪来的“缺角”?但如果你把“π”和“3.1”放在一起看,事情就有意思了——π约等于3.14…

📰

基于Claude Skills的智能视频剪辑Agent开发实践

1. 项目概述:基于Claude Skills的智能剪辑Agent去年接触Claude Skills功能时,我就意识到这可能是改变视频工作流的革命性工具。经过三个月的深度测试,终于开发出一套能自动分析素材、智能剪辑的Agent系统。实测下来,10分钟生成成片…

📰

Redis缓存穿透雪崩击穿与分布式锁三代实现

缓存这套东西,写得再熟,真到了线上出问题的时候,往往还是那几个老面孔在作祟:某个不存在的 ID 被打了几万次、零点一过一批 key 集体失效、热点商品下架瞬间数据库连接池拉满、两个人同时改同一个配置互相覆盖。这些问题单独看都不…

📰

Payload混淆技术:编码转换与协议特性实战解析

1. 项目概述:Payload混淆技术的本质与价值 在网络安全攻防对抗的永恒博弈中,Payload作为攻击载荷的载体,其隐蔽性直接决定了攻击能否突破防御系统。传统基于特征码的检测机制催生了各种混淆技术,而今天我们要探讨的正是融合编码转…

📰

OpenCV多角度多尺度模板匹配技术详解

1. 多角度多尺度模板匹配技术解析 在工业视觉检测、医学影像分析等领域,我们经常需要从复杂背景中定位特定目标物体。传统模板匹配方法存在两大痛点:一是目标可能出现任意旋转角度,二是目标尺寸可能发生缩放变化。这正是多角度多尺度模板匹配…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬