Docker 部署 Jellyfin

# 通过 Docker 安装

Copy
docker run -d \
--name jellyfin \
--add-host=api.themoviedb.org:13.225.174.30 \
--add-host=www.themoviedb.org:54.192.22.105 \
--add-host=api.themoviedb.org:13.35.8.65 \
--add-host=api.themoviedb.org:13.224.161.90 \
--add-host=api.themoviedb.org:13.35.8.93 \
--add-host=api.themoviedb.org:13.35.8.6 \
--add-host=api.themoviedb.org:13.35.8.54 \
--add-host=image.tmdb.org:138.199.37.230 \
--add-host=image.tmdb.org:108.138.246.49 \
--add-host=image.tmdb.org:13.227.73.57 \
--add-host=api.thetvdb.org:13.225.89.239 \
--add-host=api.thetvdb.org:192.241.234.54 \
--volume /home/soft/jellyfin/config:/config \
--volume /home/media/video:/media \
--restart=unless-stopped \
--device /dev/dri/renderD128:/dev/dri/renderD128 \
--device /dev/dri/card0:/dev/dri/card0 \
-p 8096:8096 \
-e TZ=Asia/Shanghai -e PUID=0 -e PGID=0 \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=$DISPLAY \
nyanmisaka/jellyfin:latest

Copy
--name jellyfin:容器名称。
--add-host:配置容器内的host解析,将api.themoviedb.org和image.tmdb.org等域名解析到指定IP。因为Jellyfin需要访问这些站点的API来获取元数据,但容器内默认DNS可能无法解析,所以需要额外配置这些域名解析。
--volume: 将宿主机的目录挂载到容器内,用于持久化保存Jellyfin的配置数据和媒体库数据。
--restart=unless-stopped: 除非容器被手动停止,否则总是重启容器。
--device: 将宿主机的GPU设备文件挂载到容器内,用于硬件解码。
-p 8096:8096: 端口映射,将宿主机8096端口与容器内8096端口建立映射。
-e TZ和-e DISPLAY: 设置时区和显示环境变量。
-v /tmp/.X11-unix:/tmp/.X11-unix :挂载X11 socket目录,用于图形应用程序访问X server显示。
nyanmisaka/jellyfin:latest : 使用名为nyanmisaka/jellyfin的Docker镜像,标签为latest。

# 虚拟机中配置

进入虚拟机

Copy
docker exec -it jellyfin /bin/bash

## apt 换源

具体查看之前 换源 笔记

接着安装

Copy
apt-get install vim

apt-get install -my wget gnupg

可能会出现错误

Copy
E: The repository 'https://mirrors.ustc.edu.cn/ubuntu focal-backports InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
W: GPG error: https://mirrors.ustc.edu.cn/ubuntu focal-security InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 3B4FE6ACC0B21F32 NO_PUBKEY 871920D1991BC93C

解决办法：

执行下面命令，修改后面的那串数字

Copy
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 871920D1991BC93C

## 安装中文字体

Copy
apt install fonts-noto-cjk-extra

## 检查显卡直通

Copy
ls /dev/dri/

出现 renderD128 和 card0 说明成功

## 安装驱动

Copy
apt install -y intel-media-va-driver-non-free vainfo

接着输入

Copy
vainfo

如果出现类似

Copy
root@61f034a94ef0:/# vainfo
error: XDG_RUNTIME_DIR not set in the environment.
error: can't connect to X server!
libva info: VA-API version 1.7.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_7
libva error: /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so init failed
libva info: va_openDriver() returns 1
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_6
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.7 (libva 2.6.0)
vainfo: Driver version: Intel i965 driver for Intel(R) Bay Trail - 2.4.0
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Simple : VAEntrypointEncSlice
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointEncSlice
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSlice
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSlice
VAProfileH264StereoHigh : VAEntrypointVLD
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileNone : VAEntrypointVideoProc
VAProfileJPEGBaseline : VAEntrypointVLD

说明驱动可以正常初始化并支持多种编码

虽然出现了

Copy
error: XDG_RUNTIME_DIR not set in the environment.
error: can't connect to X server!

这主要会对 vaapi 软件的操作产生影响，不影响 vaapi 硬件加速的效果。

vaapi 在纯粹的编码和解码场景中，是不需要连接显示服务器的。

只要驱动成功初始化，加速编解码的效果不会受影响。

如果出现这种错误

Copy
error: XDG_RUNTIME_DIR not set in the environment.
error: can't connect to X server!
libva info: VA-API version 1.7.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_7
libva error: /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so init failed
libva info: va_openDriver() returns 1
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: va_openDriver() returns -1
vaInitialize failed with error code -1 (unknown libva error),exit

则需要安装 i965 VA-API 驱动

Copy
apt install -y libva2 i965-va-driver

# 页面配置

此时打开服务器 8096 端口，就可以打开 Jellyfin 页面

内容类型: 电影内容选 “电影”，电视剧选 “节目”,

显示名称: 自定义:

添加媒体库: 点击 “文件夹” 旁边的加号，分别添加电影或电视剧内容所在的文件夹

首选语言 选择 “Chinese”，国家 / 地区 选择 “People's Republic of China”

元数据下载器: 只保留 “TheMovieDb”

图片获取程序: 只保留 “TheMovieDb”,

没提到的，则根据情况自行选择；

全部设置完点 “确定”，之后系统便会自动生成电影和电视剧的海报列表，

完成的速度和你使用的网络环境相关。

## 网络设置

打开 “控的制台”，在 “高级” 里选择 “联网”;

设置 “监听的本地网络地址”，设为 Jellyfn 服务器所在的网址，

设置 “LAN 网络”，设置为你的局域网地址，比如: 192.168.1.0/255.255.255.0，

如果有多个局域网网段，则用 “逗号” 隔开；

最后点” 确定 “完成网络配置.

## 视频硬解设置

打开” 控制台 “，在” 服务器 “里选择” 播放 “,

硬件加速: 下拉选择”Video Acceleartion APIVAAP)“或者” ntel QuickSync (QSV“，

不是太老的 CPU / 显卡，建议选 QsV;

启用硬件解码: 根据显卡支持的解码进行选择，Intel 3455 及以上的 CPU，

即 UHD500 及以上的显卡可以全选；

首选系统原生 DXVA 或 VA-API 硬件解码器：不选；

硬件编码选项: 只选择 “启用硬件编码”，“启用 VPP 色调映射 ，没有提到的均不选

最后根据实际情况选中” 允许实时提取字幕 “和” 限制转码速度 “:

没有提到的选择项均不选，其他参数均使用默认值，

最后确定完成设置。

注意，千万不要选择” 启用色调映射 “，这是个坑，选中后，

很多 HEVC/HDR 的片子在播放时会报错，提示没有合适的容器，最终无法播放。