ARTICLE DETAIL

资讯详情

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

Seerr 版本发布解读:Overseerr 与 Jellyseerr 合并为统一项目

Seerr 版本发布解读:Overseerr 与 Jellyseerr 合并为统一项目 Seerr 版本发布解读Overseerr 与 Jellyseerr 合并为统一项目【免费下载链接】seerrOpen-source media request and discovery manager for Jellyfin, Plex, and Emby.项目地址: https://gitcode.com/GitHub_Trending/je/seerroutput_articleSeerr 发布解读Overseerr 与 Jellyseerr 合并、TVDB 元数据与 DNS 缓存等新特性全解析本文基于 Seerr 官方发布公告gen-docs/blog/2026-02-10/seerr-release.md撰写系统解读这一里程碑版本Overseerr 与 Jellyseerr 两个团队正式合并为统一的Seerr项目并一次性带来 TVDB 元数据提供方、DNS 缓存、Webhook 动态占位符、PostgreSQL 支持、Helm Chart、ntfy 通知等一系列新特性。读完本文你将掌握 Seerr 相较旧版的核心差异、每一项新功能的配置入口与适用场景以及从 Overseerr/Jellyseerr 无缝迁移到 Seerr 的具体步骤与注意事项。一、版本背景两个项目的正式合并Seerr 是一个开源媒体请求与发现管理器支持 Jellyfin、Plex 与 Emby本次发布的重大意义在于Jellyseerr 与 Overseerr 的开发团队正式合并为单一团队 Seerr所有既有功能汇聚到一个共享代码库中。对于用户而言这意味着一个代码库同时整合了 Overseerr 的全部既有功能与 Jellyseerr 的最新特性原生支持 Jellyfin 与 Emby与 Plex 并列作为媒体服务器后端更新交付更高效项目得以持续向前演进。从仓库结构可以印证这一合并结果仓库同时包含 server/api/jellyfin.ts、server/api/plexapi.ts 等媒体服务器 API 实现以及 docs/migration-guide.mdx 中针对 Overseerr/Jellyseerr 用户的自动迁移说明。官方推荐查阅迁移指南仓库内对应文档 docs/migration-guide.mdx完成升级。二、面向 Overseerr 用户的新特性一览以下功能此前仅在 Jellyseerr 中存在合并后所有 Seerr 用户均可使用新特性说明替代媒体方案支持将 Jellyfin 与 Emby 作为 Plex 的替代品接入同一时间只能启用一种集成PostgreSQL 支持在 SQLite 之外可选用 PostgreSQL 作为数据库电影/剧集/标签的屏蔽列表Blocklist允许有权限的用户将特定电影、剧集或标签对普通用户隐藏覆盖规则Override Rules基于用户、标签等条件调整默认请求设置TVDB 元数据可选择使用 TheTVDB 作为剧集元数据源与 Sonarr 一致而非 TMDBDNS 缓存减少 DNS 查询次数与外部请求对使用 Pi-Hole/AdGuard Home 的场景尤为有效内置 Helm Chart便于在 Kubernetes 环境中安装与维护ntfy.sh 通知支持通过 ntfy.sh 发送通知禁用特殊季新增设置阻止特殊季如 S0被展示或请求新语言新增土耳其语Turkish与巴斯克语Basque这些特性在仓库中均有对应实现例如屏蔽列表相关实现见 src/components/Blocklist/index.tsx 与 server/routes/blocklist.ts覆盖规则相关实现见 server/entity/OverrideRule.tsntfy 通知代理实现见 server/lib/notifications/agents/ntfy.ts其 API 路由在 server/routes/settings/notifications.ts 中注册GET/POST /ntfyHelm Chart 位于 charts/seerr-chart。三、面向 Jellyseerr 用户的新特性自上一版本以来的改进本次发布同样为 Jellyseerr 老用户带来了多项长期期待的功能TVDB 元数据支持、DNS 缓存、Webhook 动态占位符以及若干面向开发者与普通用户的体验优化。3.1 PNPM v10 升级面向源码构建者Seerr 已将包管理器升级到PNPM v10。如果你从源码构建 Seerr 或参与贡献需要在开始工作前更新本地的 PNPMpnpm self-update随后验证版本pnpm -v应显示10.x.x。使用 Docker 的用户无需关心此项变更。3.2 TVDB 元数据提供方实验性此前 Seerr及其前身仅依赖TMDB提供电影与剧集信息。由于 Sonarr 使用TheTVDB作为元数据源两者在季/集编号上偶尔会出现不一致。引入 TheTVDB 后Seerr 可为剧集与动画使用与 Sonarr 相同的数据源保证两侧季集信息的一致与准确。配置入口位于设置页的新 Metadata Providers 选项卡从源码看该设置的后端逻辑位于 server/routes/settings/metadata.ts设置模型MetadataSettings包含tv与anime两个字段取值来自枚举MetadataProviderTypetmdb或tvdb定义见 server/lib/settings/index.ts保存配置时后端会先行测试所选的提供方连通性选择 TVDB 时调用Tvdb.getInstance().test()选择 TMDB 时调用TheMovieDb().getTvShow({ tvId: 1054 })测试结果通过getTestResultString归一化为三种状态not tested-1、failed0、ok1。任一测试失败则返回 500 并携带失败状态全部通过才写入并保存设置另提供独立的POST /test端点metadataRoutes.post(/test, ...)供前端手动测试提供方连通性。注意该特性当前标记为实验性默认配置为剧集与动漫均使用 TMDB见 server/lib/settings/index.ts 的默认值。3.3 DNS 缓存实验性Node.js 默认不会缓存任何 DNS 请求。对于大型 Jellyfin 媒体库每一个 HTTP 请求都会触发一次 DNS 查询极易产生极高的 DNS 查询频率进而被Pi-Hole / AdGuard Home之类的 DNS 服务限流甚至封禁。Seerr 的 DNS 缓存管理器通过缓存 DNS 查找结果显著降低 DNS 服务器压力避免限流或封禁问题。配置入口位于 Seerr 设置的 Network网络选项卡中的 DNS Cache 设置从源码看其实现位于 server/utils/dnsCache.ts核心基于dns-caching包的DnsCacheManagerSeerr 在此之上做了薄封装初始化函数initializeDnsCache接收forceMinTtl与forceMaxTtl两个参数秒内部乘以 1000 转换为毫秒后传入DnsCacheManager默认配置为enabled: false、forceMinTtl: 0、forceMaxTtl: -1见 server/lib/settings/index.tsforceMaxTtl: -1表示不强制上限、遵循系统 TTL缓存的启用时机在服务启动阶段server/index.ts当settings.network.dnsCache.enabled为真时调用initializeDnsCache管理员可通过GET /api/v1/settings/cache查看 DNS 缓存统计与缓存条目dnsCache.getStats()/dnsCache.getCacheEntries()并可通过POST /api/v1/settings/cache/dns/:dnsEntry/flush单独清除某条缓存见 server/routes/settings/index.ts。3.4 Jellyfin 媒体库的 AniDB 回退针对 Jellyfin 管理的媒体库本版本增加了额外的元数据来源当条目缺少 TMDB 或 TVDB 的提供方 ID 时Seerr 会自动回退到 AniDB从而覆盖更多小众或区域限定的动漫作品。3.5 Webhook URL 动态占位符实验性Webhook 通知现在支持在 URL 中嵌入动态占位符运行时由 Seerr 自动替换为真实值。例如可以将请求者的用户名直接拼入 Webhook URL以便与第三方服务或按用户区分的端点深度集成。启用入口位于Notifications通知设置页界面会列出当前可用的占位符供参考该功能目前标记为实验性欢迎社区反馈以在后续版本中扩充占位符集合。从源码看占位符的替换逻辑位于 server/lib/notifications/agents/webhook.ts当settings.options.supportVariables为真时遍历KeyMapwebhook.ts中定义的全部占位符键占位符采用{{key}}语法通过正则new RegExp({{ key }}, g)全局替换为真实值并经过encodeURIComponent编码KeyMap中预置了丰富的变量例如{{notification_type}}、{{event}}、{{subject}}、{{message}}、{{image}}{{notifyuser_username}}、{{notifyuser_email}}、{{notifyuser_avatar}}、{{notifyuser_settings_discordIds}}{{media_imdbid}}、{{media_tmdbid}}、{{media_tvdbid}}、{{media_type}}、{{media_status}}、{{media_status4k}}{{request_id}}、{{requestedBy_username}}、{{requestedBy_email}}{{issue_id}}、{{issue_type}}、{{issue_status}}、{{reportedBy_username}}、{{comment_message}}、{{commentedBy_username}}等测试通知Notification.TEST_NOTIFICATION时所有变量统一替换为test便于验证 URL 拼接结果。对应地Webhook 的保存/读取接口server/routes/settings/notifications.ts会持久化supportVariables、customHeaders、authHeader等选项JSON 载荷以 base64 形式存储。3.6 通知中的图片改为可选另一项小改进通知中的图片现在是可选项默认仍启用。此前版本发送通知时总是附带图片一旦图片缺失或不可用会导致链接失效或请求失败。现在可以关闭图片避免此类问题。3.7 安全与供应链改进本版本在安全层面做了系统性加固更新了部分过期的依赖相关工作仍在进行中Helm Chart 与容器镜像现在均经过加密签名可在客户端侧验证与强制校验容器改为以非 root 用户rootless运行工作流全面重构尽量减少第三方 Actions权限得到强化Actions 固定到特定的哈希值提升可追溯性发布流程移除了大量过时与插件依赖替换为更标准的行业解决方案。容器以非 root 运行的细节可参考 Dockerfile 以及 Helm Chart 中默认的securityContext配置charts/seerr-chart/templates/statefulset.yaml。四、PostgreSQL 用户特别注意事项官方在发布说明中以醒目方式给出提示如果你在 Docker 中把 Postgres 从17 升级到 18请注意数据挂载点已经变更。不再使用/var/lib/postgresql/data正确的挂载路径现在是/var/lib/postgresql。该挂载点更新是保证升级后容器正常工作的必要条件。即升级后需要将卷挂载目标更新为volumes: - postgres-data:/var/lib/postgresqlSeerr 的 PostgreSQL 迁移脚本位于 server/migration/postgres首次以 Seerr 代码库启动时迁移会自动执行详见下文迁移章节。五、从 Overseerr / Jellyseerr 迁移到 Seerr根据官方迁移指南docs/migration-guide.mdx无论来自 Overseerr 还是 Jellyseerr都无需手动执行迁移步骤——实例会在首次使用 Seerr 代码库Docker 镜像、源码构建或 Kubernetes启动时自动完成迁移Overseerr 用户还会额外执行一次配置到新代码库的迁移。迁移前务必先备份现有实例详见官方 Backups 文档以便出问题时回滚。5.1 Docker 用户迁移要点所有overseerr/jellyseerr引用统一更名为seerr容器镜像引用更新为 Seerr 官方镜像容器现在可以且建议以非 root 用户node用户UID 1000运行如果此前配置了user指令请移除镜像不再内置 init 进程需要在 Docker Compose 中添加init: true或在 Docker CLI 中添加--init。由于容器以node用户UID 1000运行必须确保 config 目录权限正确docker run --rm -v /path/to/appdata/config:/data alpine chown -R 1000:1000 /dataDocker Compose 示例Unixservices: seerr: image: ghcr.io/seerr-team/seerr:latest init: true container_name: seerr environment: - LOG_LEVELdebug - TZAsia/Tashkent - PORT5055 #optional ports: - 5055:5055 volumes: - /path/to/appdata/config:/app/config healthcheck: test: wget --no-verbose --tries1 --spider http://localhost:5055/api/v1/settings/public || exit 1 start_period: 20s timeout: 3s interval: 15s retries: 3 restart: unless-stoppedDocker CLI 示例docker run -d \ --name seerr \ --init \ -e LOG_LEVELdebug \ -e TZAsia/Tashkent \ -e PORT5055 \ -p 5055:5055 \ -v /path/to/appdata/config:/app/config \ --restart unless-stopped \ ghcr.io/seerr-team/seerr:latest官方 Docker 镜像提供以下标签latest最新稳定版、版本标签如v3.0.0、大版本别名如v3、小版本别名如v3.0以及develop滚动/每日构建慎用。5.2 Kubernetes 用户manifest 中所有jellyseerr引用更名为seerr镜像引用更新默认securityContext与podSecurityContext已更新为支持非 root 运行image: repository: seerr-team/seerr podSecurityContext: fsGroup: 1000 fsGroupChangePolicy: OnRootMismatch securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL readOnlyRootFilesystem: false runAsNonRoot: true privileged: false runAsUser: 1000 runAsGroup: 1000 seccompProfile: type: RuntimeDefault对应的 Helm Chart 位于 charts/seerr-chart可直接用于 Kubernetes 环境安装。5.3 源码构建与第三方安装方式源码构建按官方文档docs/getting-started/buildfromsource.mdx从零安装恢复备份数据后启动即可无需额外步骤注意先升级 PNPM 至 v10见上文 3.1 节第三方方式如 AUR、TrueNAS、Unraid 等由社区维护Seerr 团队不对其负责其中Snap 包当前未维护。Unraid 用户可直接将原有 appdata 目录复制为 Seerr 的 appdatacp -a /mnt/user/appdata/overseerr /mnt/user/appdata/seerr首次启动即自动完成数据迁移。六、总结Seerr 的这次合并发布将 Overseerr 与 Jellyseerr 的能力整合进单一代码库为两类用户带来互补的功能Overseerr 用户获得了 Jellyfin/Emby 支持、PostgreSQL、屏蔽列表、覆盖规则、Helm Chart 与 ntfy 通知等能力Jellyseerr 用户则迎来 TVDB 元数据、DNS 缓存、Webhook 动态占位符等长期期待的特性同时整个项目在供应链安全、镜像签名与 rootless 运行等方面全面加固。对于现有用户升级路径足够平滑——首次以 Seerr 代码库启动即自动完成数据迁移只需留意容器 init 进程、config 目录权限与 PostgreSQL 挂载路径等细节变更。/output_article【免费下载链接】seerrOpen-source media request and discovery manager for Jellyfin, Plex, and Emby.项目地址: https://gitcode.com/GitHub_Trending/je/seerr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表