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

发布时间:2026/8/23 14:02:16
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),仅供参考