威联通docker如何安装PLEX、EMBY、JELLYFIN

大家好,我是晓飞影!

一个数码爱好者,也喜欢在众多平行领域探究摸索,让生活多一点乐趣。

打开凤凰新闻,查看更多高清图片

之前在使用威联通 TS-451D 的时候,我直接在 App Center 通过第三方软件包安装的形式,装好了 Jellyfin、Emby、Plex 这三大媒体套件,确实很方便,而且能直接调用核显,堪称小白的第一选择。不过有几次我频繁测试 Emby 的硬解转码播放,居然让 NAS 假死了几次,重启 NAS 就能恢复。所以借着这次更换威联通 TS-453Dmini,我打算能用 dokcer 安装就不用程序包的方式,因为 docker 好管理,而且系统资源占用极低,我也从来没遇到过 docker 把 NAS 弄假死的情况,这次我就分享一下如何安装,其实网上已经有一些 docker 安装的教程,但是大部分是一次成功,这里面其实有许多坑的,尤其涉及到核显调用部分,所以我也把踩坑经历分享出来,方便大家解惑。

第三方程序包安装

不过我先分享一下怎么用程序包的方式安装 Jellyfin、Emby、Plex,如果 docker 实在安装不成功的话,就直接用程序包的方式吧,只要不瞎折腾也不会出什么问题。先打开 App Center 右上角的设置按钮。

通用页面勾选允许在没有有效数字签名的情况下安装应用程序,点击应用。

然后在 App Center 右上角的加号选择手动安装,在本地电脑选择 qpkg 格式结尾的程序包,点击安装,之后在系统桌面就可以看到程序图标了,可以直接点击使用,注意 Jelly 和 Emby 最开始是同源的,所以默认端口都是 8096,两个都安装的话可能会起冲突,所以建议只装其一,如果是 docker 安装的话还可以自己修改下端口映射。

docker 安装 Portainer

其实威联通的 Container Station 也是 docker 的管理界面,已经做的不错了,但是唯独安装好容器后不好修改之前配置的文件夹等参数,如果只用 ssh 敲命令的方式也可以解决,不过还是建议安装上 Portainer 图形界面来统一管理 dokcer,出现问题调试也比较方便,安装命令如下。

docker run -d -p 9000:9000

--restart=always

-v /var/run/docker.sock:/var/run/docker.sock

--name prtainer-test

docker.io/portainer/portainer

protainer 开始会有 admin 页面,提示创建密码,然后选择 Local,如果有集成管理需求,就选择 Remote。

主界面可以看到基本是全英文的,一开始可能都会觉得有点头大,但是实际只要记得图中几个中文标注的菜单就够了,用的最多的也是 Containers 界面。

点进去可以看到正在运行的容器,和威联通系统内的容器数量是一模一样的,主要是之后要在这个页面对容器进行编辑会很方便。

docker 安装 Plex

首先在 QTS 系统内打开 ContainerStation,在创建页面搜索plex,可以看到最多标星的有 plexinc 和 linuxserver,这链各个版本其实都可以,因为有许多人会遇到奇怪的问题,换个其他人的版本安装就好了,所以不必纠结哪个版本最好,能成功运行最好。而威联通的 ContainerStation 还有一个好处是点击镜像的名称,可以直接跳转到 dockerhub 的页面,这个步骤不是必要步骤,只是许多人都照抄各种大佬的命令安装,出了问题也不知道怎么查,其实答案全部都在开发者的页面,我也是慢慢摸索才弄清楚,这次就分享给大家,找到原理才好解决问题。

跳转到 dockerhub 页面后,页面都是全英文的,英语不好的也别紧张,可以翻译页面大概了解意思就行,关键的信息其实还很简单,镜像名称下可以看到更新频率,右侧是直接拉取镜像的命令,Win10 系统可以通过 putty软件,通过 ssh 连接到 NAS,输入拉取镜像命令到本地,Mac 比较简单可以直接通过终端输入 ssh [email protected] 这样的命令直接连接 NAS,这步操作对应的就是威联通 ContainerStation 镜像页面右侧的创建按钮,完成下载的过程。

然后往下拉,可以看到有几种模式的安装方法,我们平时用的最多的就是 Bridge Networking 这种方法,这个命令复制了直接运行是肯定会出问题的,这只是一个举例。-p 指的就是端口映射,冒号后面的全部都是该容器的端口或者路径,是不能修改的,冒号前面都是自己进行映射的,可以看情况修改,比如 -p 端口号可以写一样的 32400,或者 1234都可以。而 -v 是文件夹路径,比如这个官方的 plex 容器需要三个文件夹,config(配置)、transcode(转码)、data(媒体)信息,所以至少要保证这三个文件夹信息。-e 就是环境变量,等一会再说。

所以在威联通内,我建议在 Container 文件夹下按照容器建立文件夹,然后建立子文件夹,这样就可以一一对应,未来还方便迁移。

如果是通过命令行的方式选择路径的话,以上的路径应该是-v /share/Container/plex/config:/config

那有的人如果是不止一个 media 文件夹该怎么办呢,我试了下其实你可以多映射几个文件夹,在plex一样可以选择到,比如-v share/dapian:/dapian

刚才还有的命令没有提到,比如 TZ、PLEX_CLAIM 该怎么填,其实答案都在页面下方,比如 TZ 可以写 Europe/London,但是和我们的时区不一样,可以点进它的网址去查看本地的时区,Asia/Shanghai

PLEX_CLAIM 按照它的链接跳转到页面,登录自己注册的账号密码就可以获得 CLAIM 的值了,复制刚才的命令,填写到刚才的命令行里面。

那么最终我的命令如下:

docker run

-d

--name plex

-p 32400:32400/tcp

-p 3005:3005/tcp

-p 8324:8324/tcp

-p 32469:32469/tcp

-p 1900:1900/udp

-p 32410:32410/udp

-p 32412:32412/udp

-p 32413:32413/udp

-p 32414:32414/udp

-e TZ="Aisa/Shanghai"

-e PLEX_CLAIM="claim-sG8sYnUastzs3LUd9oAH"

-e ADVERTISE_IP=":32400/"

-h MY PLEX

-v /share/Container/plex/config:/config

-v /share/Container/plex/transcode:/transcode

-v /share/media:/data

-v /share/dapian:/dapian

plexinc/pms-docker

可能有的编辑器会不显示后面的斜杆,所以我截图展示一下,这里面不一定所有的命令都需要复制,比如有的端口不需要可以取消,包括文件夹路径也只是参考,这样根据自己的实际情况来填写也就比较容易了。注意不同 NAS 系统的文件夹路径可能有区别,比如威联通的是 share。

另外,我自己设置的是静态卷三个分区,分别是 CACHEDEV1_DATA, CACHEDEV2_DATA, CACHEDEV3_DATA,实际我测试删掉CACHEDEV3_DATA,直接 share 后面接我 NAS 里的文件夹也是看的到的,所以还是以上面的命令行的路径为主。接下来,可以到 ssh 里输入命令创建,或者是直接用威联通的 ContainerStation 创建都可以,只要了解了文件夹,端口,环境变量,在任何 NAS 系统都可以很方便的部署。

那么最关键的问题来了,核显怎么调用还没有说,首先确定自己的 NAS 的 CPU是支持硬解的。

ls /dev/dri

输入命令后看到 card0 renderD128 就是支持核显。

chmod a+x /dev/dri

输入命令后是让 dri 文件夹下都有可执行权限,这个命令有的人没输入也能成功,建议输入,而且docker 一直遇到问题可以尝试在 admin 账号下进行操作,权限更大。

这个核显驱动文件夹其实在 docker 创建时就可以输入,只是我习惯一步步排除问题,先建好容器后再加入也是可以成功的,这个时候就靠 portainer 登场了,点击 Containers 文件夹,点击容器名称,这里我换了 linuxserver 的镜像又安装了一次,应该说每个镜像我都删除更换了许多次来摸索,原理都是一样的。

进入容器后,点击右上角的 Duplicate/Edit,进行编辑,Portainer 有个好处是不用停止容器也可以直接编辑,再发布直接覆盖就好了,节省步骤。

进入编辑页面后往下拉,可以看到一排页面标签,比如 Volumes 就是文件夹映射,我有时候直接创建一个空的容器,在 Portainer 这里手动填写路径,感觉灵活度非常高,比如未来又有新的媒体文件夹里就在这里添加,注意右侧要选择 Bind 才能输入自定义路径。

此处是设置容器

点击 Runtime & Resouces 标签页面,此处就是调用核显的关键,在下方点击 add device,手动填写核显文件夹的路径/dev/dri,下方还可以对这个容器占用系统性能设置区间,一般默认即可,再点击上方的 Deploy the container 按钮就可以覆盖启动容器了。

接下来输入 IP:32400 访问 PLEX 媒体库,按照步骤一直下一步。

成功到启动页面后点击右上角的工具按钮来到控制面板。

远程访问这里有一个感叹号,需要勾选后点击启用。

同时我还在路由器的端口转发规则转发了 32400 的端口号,也没有和 PLEX 页面的设置冲突,目前都能正常外网访问。

PLEX 不能调用本地刮削好的 NFO 文件,所以我也加上了补丁,分别是电影和电视节目的刮削器,注意文件命名后缀要改为 bundle 和图中一致。docker 版补丁的路径放在 Container/pelx/config/Library/Application Support/Plex Media Server/Plug-ins 文件夹下,然后重启 PLEX。

回到 PLEX 界面点击资料库。

右上角添加资料库。

选择电影,语言改为中文。

选择文件夹为电影媒体文件夹。

高级里面的代理实际就是刮削器,选择 XBMCnfoMoviesImporter 就可以加载本地已经整理好的 NFO 文件。

注意这个 Enable generating Collections from tags 的勾要去掉,不然会生成很多tag 标签导致媒体库很乱。

如果有系列电影比如「钢铁侠」想生成一个系列文件夹预览的,可以选择 Hide items which are in collections,然后添加资料库。

等待一段时间,电影完全整理好了。

使用硬件转码的话要在转码器部分选择下方的两个调用硬件转码的选项,PLEX 的汉化版本一直做的一般,这里都是英文,有的是中文。而且 PLEX 的转码是需要会员的,我是 220 元买的一个终身版,目前还没有被黑。不像 Emby 和 Jellyfin 那样选择硬件转码后能看到许多转码选项,到这一步都不确定是否真的装好了 docker 的核显调用。

必须打开一个电影,手动将播放质量选到很低,来测试能否核显硬解,如图看到(hw)这个标识就是成功启用硬解了。

再就是回到威联通过的资源监控页面,看一下 CPU 的占比,如果一直比较低的话,那绝对没有问题了,如图 Container Station 的资源占比也很低,这也是我喜欢装 docker 的原因。

如果有人到这一步发现核显依然无效,媒体播放还是软件解码该怎么办,最后的罪魁祸首可能就在此处了,依然回到 Portainer 对容器进行编辑,linuxsever 的镜像的 Env 环境变量内有 PUID 和 GUID 两个变量,没有的话手动添加,改为 0 即可。

为什么改成 0,可以ssh 命令下输入 id admin 就发现 uid 和 gid 都是 0,也就是 admin 账户的权限,如果自己建立了新的账号,也可以用 id 用户名的方式检查自己的 uid 和 gid,填写进去,不过可能还是没用,所以其他的 docker 如果有填写 uid、gid 的需求,省心的话就全部填 0 就可以了。注意这个uid 和 gid 在别的 docker 可能叫法不一样,老办法点进 dockerhub页面查看文档,或者先自动建立一个镜像看环境变量里有没有自动生成,再去手动修改值。

重启 PLEX,大概率核显硬解问题就全部解决了。

docker 安装 Emby

plex 是最麻烦的部分,弄清楚了 docker 每个命令的原理,和 portainer修改的方法,一切就变简单了,Emby 就分享下 linuxserver 的镜像安装方式,大家参考后修改即可。

docker run -d

--name=emby

-e PUID=0

-e PGID=0

-e TZ=Aisa/Shanghai

-p 8096:8096

-p 8920:8920

-v /share/Container/plex/config:/config

-v /share/media:/data/media

-v /share/dapian:/data/dapian

--device /dev/dri:/dev/dri

--restart unless-stopped

ghcr.io/linuxserver/emby

我根据自己的情况修改后的命令行,和官方的做个对比,大家也就知道该怎么根据自己的实际情况来修改了。

顺便把我的 Portainer 设置截图一下,可以参照对比,端口映射部分。

文件夹映射部分,上文也说了,CACHEDEV1_DATA是我建立了几个静态卷,我以为要分开路径,实际都在 share 目录下就可以看到了,可以删掉。

Env 环境变量大部分都是自动生成的,我已经装好的是 embyserver 的官方镜像,所以多了个 GIDLIST,注意此处也是 UID、GID、GIDLIST 都改为 0 了,并没有按模板的 1000 来填写,也确实开启了核显硬解。

设置自动启动选项。

设置调用核显的路径,如果开始在命令行输入 --device /dev/dri:/dev/dri 的话,此处就已经有了,没有写的话,之后手动加入也是可以的。

最后点击 Deploy the container 就可以发布容器,会提示覆盖就直接覆盖。

docker 安装 Jellyfin

docker run -d

--name=jellyfin

-e PUID=0

-e PGID=0

-e TZ=Aisa/Shanghai

-p 8096:8096

-p 8920:8920

-p 7359:7359/udp

-p 1900:1900/udp

-v /share/Container/plex/config:/config

-v /share/media:/data/media

-v /share/dapian:/data/dapian

--device /dev/dri:/dev/dri

--restart unless-stopped

ghcr.io/linuxserver/jellyfin

Jellyfin 和 Emby 都是同源的,安装也最简单,硬解核显还不需要会员,应该是受众面最广的,命令也差不多是一样的,不过因为我装了 Emby,端口都是 8096 冲突,我也懒得修改端口号就没装 Jellyfin 了,Portainer 就没有截图了。

总结

docker 的安装教程许多地方都有,玩 NAS 折腾最多的应该就是 Jellyfin、Emby、Plex 这几样,由于涉及核显调用,很容易出现问题,我把几个关键点在梳理一下:

尽量用 admin 账号创建;

chomd a+x /dev/dri,给核显文件夹赋予可执行权限;

uid 和 gid 可以设置为 0,也是 admin 的账号权限;

镜像安装失败可以换一个尝试;

写 NAS 备忘录的目的主要也是给我自己折腾的过程中,总结学习,下次再装就轻车熟路了,我每次折腾都要查不少的资料,评论区也经常遇到一堆的问题,最后经常到 dockerhub 页面看一下说明文档,许多问题都能得到答案。授之以鱼不如授之以渔,希望我的这些经历也能让大家少走弯路,同时多分享多交流,大家都能节约不少折腾的时间。