侧边栏壁纸
博主头像
いちごみるく

行动起来,活在当下

  • 累计撰写 70 篇文章
  • 累计创建 48 个标签
  • 累计收到 55 条评论

目 录CONTENT

文章目录

jellyfin的详细安装及优化配置(IPV6、缓存、字体、插件推荐)

本文使用 LinuxServer 镜像部署 Jellyfin,并说明持久化、转码缓存、IPv6 与插件配置。镜像启动后还需按实际媒体、设备与网络条件验证播放。

官方 jellyfin/jellyfin、LinuxServer 和其他社区镜像都可能支持硬件转码。应根据其维护状态、目录约定、设备权限和更新说明选择,不能把第三方镜像统称为“更稳定”或“只有它支持 Intel Arc”。不同镜像的持久化目录并不完全相同,更换镜像前先备份配置和数据库,查明迁移兼容性。Jellyfin 容器说明

一、安装 Jellyfin

下面在 Linux Docker Engine 上使用 LinuxServer 镜像。将路径、UID/GID 替换为实际值,并提前创建目录,确保 1000 对应的用户能写配置目录、读媒体目录。正式维护时记录镜像版本或摘要;latest 会随发布变化,容器重启本身不会拉取新镜像。

docker run -d \
  --name jellyfin \
  -p 8096:8096/tcp \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Asia/Shanghai \
  -v /srv/jellyfin/config:/config \
  -v /srv/media:/data:ro \
  --restart=unless-stopped \
  lscr.io/linuxserver/jellyfin:latest

访问 http://服务器地址:8096 完成初始化,只开放给需要访问的网络。默认把媒体目录设为只读;若要让 Jellyfin 写 NFO、图片或删除媒体,再明确授予所需目录写权限。PUID/PGID 不是必须填 0,使用 root 也不能替代正确的共享目录权限。

Intel 硬件转码按核显与 LXC 配置检查,在创建容器时按需加入 render 设备;LinuxServer 的 OpenCL 模块仅在需要相应色调映射时添加:

--device=/dev/dri/renderD128:/dev/dri/renderD128
-e DOCKER_MODS="linuxserver/mods:jellyfin-opencl-intel"

它们是追加到 docker run 的参数,不是单独执行的命令。LinuxServer 配置文档

转码目录与 tmpfs

优先使用足够大的持久化 SSD 目录,并在后台确认“转码临时目录”的实际位置。LinuxServer 通常把运行数据放在 /config 中;官方镜像的 /cache 约定不能直接套用。

需要减少临时磁盘写入、且确有足够内存时,可以只把转码目录设为 /transcodes,追加一个有上限的 tmpfs:

--tmpfs /transcodes:rw,size=2g,mode=1777

然后在 Jellyfin 后台把转码路径设为 /transcodes。2 GiB 只是容量示例;长视频、高码率和多人并发可能迅速用满。tmpfs 占用内存并受容器内存限制,也可能被换出到 swap,不能保证提升性能或完全避免磁盘写入。不要把配置、数据库或整个缓存目录当作无条件可丢弃数据来覆盖。

Docker Compose 也能配置 tmpfs,Portainer Stack 可以提交相应 Compose 文件,无需只依赖 docker run。Docker tmpfs 文档

二、插件与中文元数据

先在媒体库设置语言、地区以及元数据提供者顺序,再按需要安装插件。TMDb 支持中文,但“官方库只有 TMDb 支持中文”缺乏依据;字幕提供者与影视元数据提供者也不是同一类功能。插件越多,越可能增加网络请求、重复结果和兼容问题。

官方稳定插件仓库:

https://repo.jellyfin.org/files/plugin/manifest.json

Metashark、MeiamSubtitles、Bangumi 和 MetaTube 均属于第三方项目。添加前应查看其当前发行说明是否支持自己运行的 Jellyfin 版本、所用数据源是否仍可访问,以及是否需要独立后端;不能仅凭仓库存在就判断当前版本兼容。

MetaTube 主要面向特定成人影片元数据场景,应按媒体库类型选择。插件具有服务端代码执行能力,只安装可信维护者的发行包,升级 Jellyfin 前检查插件兼容性。现有离线 NFO/图片也可以作为本地元数据来源,并不需要为每个库叠加网络刮削插件。Jellyfin 插件文档

三、IPv6

Jellyfin 的监听设置、Docker 网络、宿主机路由和防火墙是不同层。host 网络不是 IPv6 的唯一方案,也不能补出宿主机没有的 IPv6 连通性。 Linux 上可以使用 host 网络简化地址与 DLNA 等发现协议,也可以按 Docker 文档启用 IPv6 bridge 网络。host 模式不再使用 -p 端口映射,并需单独核对所有监听地址和防火墙。Docker IPv6 文档

在 Jellyfin 联网设置中按需开启 IPv6,再分别测试服务监听和容器出站。若镜像自带 curl,可用:

docker exec jellyfin curl -6 --fail --max-time 15 https://jellyfin.org/
# 从有 IPv6 的客户端测试实际服务器地址,IPv6 字面地址必须带方括号
curl --fail --max-time 15 'http://[服务器IPv6地址]:8096/health'

前者检查特定网站的 IPv6 出站,后者检查 HTTP 入站;任一失败都需要继续看 DNS、路由、证书或防火墙,不能只根据一次外部“查 IP”结果判断全部功能。Jellyfin 联网说明

四、中文字体显示成方块

原字幕缺字现象

先区分网页字体、客户端字幕字体与服务器烧录字幕缺字。服务器烧录字幕可把可信的 CJK 字体目录只读挂入镜像,或使用 LinuxServer 的通用包安装模块。

如果同时需要 OpenCL 和字体包,DOCKER_MODS 只能保留一个环境变量,以竖线连接模块,不能写两次让后者覆盖前者:

-e DOCKER_MODS="linuxserver/mods:jellyfin-opencl-intel|linuxserver/mods:universal-package-install"
-e INSTALL_PACKAGES=fonts-noto-cjk-extra

包名与模块支持的发行版需按当前镜像检查。自定义字体挂载方式见官方容器文档;安装后再测试一段需要烧录中文字幕的转码,而不是仅检查字体目录存在。

五、媒体库扫描

首次扫描耗时取决于文件数量、目录延迟、NFO/图片大小、网络刮削、插件和数据库负载。针对 10.8.9/10.8.13 的问题反馈只能说明对应版本与环境,不能据此断言当前版仍未修复,也不能把数据库争用当作每个慢扫描的确定原因。

先记录运行版本、扫描任务与日志,在关闭不必要插件或减少一个媒体库后对比;网络挂载还应核对缓存是否更新、远端目录是否可访问。大库把扫描安排在低负载时段,保留当前官方问题跟踪链接用于诊断。Jellyfin 问题跟踪

远端 NFS/SMB/WebDAV 的修改不一定在本机产生 inotify 事件,可使用计划扫描或轮询与 API 触发方案。

0

评论区