Seerr 版本发布解读:Overseerr 与 Jellyseerr 合并为统一项目
2026/9/15 19:58:25 网站建设 项目流程

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

【免费下载链接】seerrOpen-source media request and discovery manager for Jellyfin, Plex, and Emby.项目地址: https://gitcode.com/GitHub_Trending/je/seerr

<output_article>

Seerr 发布解读: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 一致)而非 TMDB
DNS 缓存减少 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.ts;
  • ntfy 通知代理实现见 server/lib/notifications/agents/ntfy.ts,其 API 路由在 server/routes/settings/notifications.ts 中注册(GET/POST /ntfy);
  • Helm Chart 位于 charts/seerr-chart。

三、面向 Jellyseerr 用户的新特性:自上一版本以来的改进

本次发布同样为 Jellyseerr 老用户带来了多项长期期待的功能:TVDB 元数据支持、DNS 缓存、Webhook 动态占位符,以及若干面向开发者与普通用户的体验优化。

3.1 PNPM v10 升级(面向源码构建者)

Seerr 已将包管理器升级到PNPM v10。如果你从源码构建 Seerr 或参与贡献,需要在开始工作前更新本地的 PNPM:

pnpm 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包含tvanime两个字段,取值来自枚举MetadataProviderTypetmdbtvdb),定义见 server/lib/settings/index.ts;
  • 保存配置时,后端会先行测试所选的提供方连通性:选择 TVDB 时调用Tvdb.getInstance().test(),选择 TMDB 时调用TheMovieDb().getTvShow({ tvId: 1054 })
  • 测试结果通过getTestResultString归一化为三种状态:not tested(-1)、failed(0)、ok(1)。任一测试失败则返回 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包的DnsCacheManager,Seerr 在此之上做了薄封装;
  • 初始化函数initializeDnsCache接收forceMinTtlforceMaxTtl两个参数(秒),内部乘以 1000 转换为毫秒后传入DnsCacheManager
  • 默认配置为enabled: falseforceMinTtl: 0forceMaxTtl: -1(见 server/lib/settings/index.ts),forceMaxTtl: -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为真时,遍历KeyMap(webhook.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)会持久化supportVariablescustomHeadersauthHeader等选项(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/postgresql

Seerr 的 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 /data

Docker Compose 示例(Unix):

services: seerr: image: ghcr.io/seerr-team/seerr:latest init: true container_name: seerr environment: - LOG_LEVEL=debug - TZ=Asia/Tashkent - PORT=5055 #optional ports: - 5055:5055 volumes: - /path/to/appdata/config:/app/config healthcheck: test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/settings/public || exit 1 start_period: 20s timeout: 3s interval: 15s retries: 3 restart: unless-stopped

Docker CLI 示例:

docker run -d \ --name seerr \ --init \ -e LOG_LEVEL=debug \ -e TZ=Asia/Tashkent \ -e PORT=5055 \ -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
  • 镜像引用更新;
  • 默认securityContextpodSecurityContext已更新为支持非 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 的 appdata(cp -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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询