首页 » 嘿群晖 » 群晖docker安装plex并实现硬解码(修改容器中显卡设备节点权限)

群晖docker安装plex并实现硬解码(修改容器中显卡设备节点权限)

时间:2021-04-02作者:岁月十三鹰分类:嘿群晖评论:0

关于 plex

plex是一款优秀的媒体服务器

l l-1

安装 Docker

群晖安装Docker很方便,直接在套件中心找到Docker安装即可

软解码安装

容器安装

1.在群晖Docker注册表中搜索plex,找到plexinc/pms-docker,双击加载,选择自己所需的版本,此处选择 latest 版本。

2.在群晖Docker映像中双击plexinc/pms-docker:latest来创建一个容器

3.容器名称:plex

4.点击「高级选项」进行配置

「卷」选项卡

Local location Container location Usage
/docker/plex/database /config 配置
/docker/plex/transcode/temp /transcode 缓存
/share/plex/media /data 媒体文件

「端口」选项卡

本地端口 容器端口 类型
32400 32400 tcp

「环境变量」选项卡

默认即可

硬解码安装

由于硬解码必须要映射devices,所以需要在linux使用docker指令完成,但也不难一步一步跟上就行

  1. 需要DSM上开启ssh(建议不要用22,可以换个其他的,防止被爆破),然后确保关于这个端口的防火墙畅通,如果外网做好端口映射
  2. ssh登陆到群辉shell
  3. sudo -i 获取root权限
  4. docker 相关指令,参考下面部分

建议创建的目录

  • .../plex/database
  • .../plex/transcode/temp
  • .../plex/media

以上目录需要设置权限为Everyone

官方说明:https://hub.docker.com/r/plexinc/pms-docker

参考:

sudo -i

docker run \
-d \
--name plex \
-p 32400:32400/tcp \
-e TZ="<timezone>" \
-e PLEX_CLAIM="<claimToken>" \
-v <path/to/plex/database>:/config \
-v <path/to/transcode/temp>:/transcode \
-v <path/to/media>:/data \
--net=bridge \
--device /dev/dri/renderD128:/dev/dri/renderD128 \
--device /dev/dri/card0:/dev/dri/card0 \
plexinc/pms-docker

实际使用:

sudo -i

docker run \
-d \
--name plex \
-p 32400:32400/tcp \
-e PLEX_UID=1026 \
-e PLEX_GID=101 \
-e TZ="Asia/Shanghai" \
-e PLEX_CLAIM="claim-xxx" \
-v /volume1/docker/plex/database:/config \
-v /volume1/docker/plex/transcode/temp:/transcode \
-v /volume1/share/plex/media:/data \
--net=bridge \
--device=/dev/dri:/dev/dri \
plexinc/pms-docker

注意这里的 PLEX_UID and PLEX_GID 可以通过以下语句得到

id `swack`
###
uid=1026(swack) gid=100(users) groups=100(users),101(administrators)

sudo -i
# 将显卡节点权限给管理员swack
chown -R swack:administrators /dev/dri

这里需要注意,权限在你升级DSM后会被重新恢复成root,可用上面指令再次设置即可,设置完成后重启plex容器

硬解码开启流程(仅当没有修改容器中显卡设备节点权限时适用)

plex想要开启硬解码,我反复尝试发现是有流程性的,不需要严格按照流程执行

我测试的Tag:plexinc/pms-docker:1.19.5.3112-b23ab3896

如果你已经安装过plex的docker请先清除/volume1/docker/plex/database目录中的所有文件,注意做好备份

  1. 然后按照上述流程安装好容器
  2. 下来需要进入容器配置下GPU设备节点的使用权限(一定要在播放影片前进行权限操作,否则需要关闭容器,然后赋予权限,再打开容器,最后播放电影)
    sudo docker exec -it plex /bin/bash
    chown -R plex:video /dev/dri
    chmod -R 777 /dev/dri
    
  3. 完成后我们就可以进入http://localhost:32400/web,记住一定要先配置硬件再初始化plex
  4. 为了对比可以初始化先开打一个需要解码的视频。由于当前是软解码CPU占用会很高
  5. 配置硬解码
    • 首先需要你开通plex pass
    • 登陆plex主界面 > 更多 > 你自己的服务器(右边省略号) > 服务器管理 > 设置 > 转码器 > 勾选 Use hardware acceleration when available > 保存修改
    • 再打开一个需要解码的视频,硬解码生效
      linux_20200801_1

注意,以上操作确实可以硬解码了,但是如果你docker中plex容器重启的话,硬解码就失效了,你需要重新将上述步骤操作一遍才行

所以我们需要让赋值权限的操作可以自动化,跟着我去实现

首先需要将自启动脚本放到plex的/config目录中,如果你按照我如上操作映射了,应该在群辉的/docker/plex/database目录,两者是等效的

脚本:plex_config_sh.zip

然后你可以试着测试下

docker stop plex
docker start plex
sudo docker exec -it plex /bin/bash
ls -la /dev/dri/

这样完成后,你可以无需担心nas重启后plex硬解码失效了

初始化操作

默认去尝试打开url:http://xxx.i234.me:

linux_20200731_1

这显示是有点问题!

这里在群晖NAS上的初始化比较有技巧性,因为官方有这段说明

Running on a headless server with container using host networking

主要为了告诉我们如果想进入初始化服务器的界面,必须要在本地登录:http://localhost:32400/web

而使用例如:http://192.168.1.1:32400/web 或者 http://www.example.com:32400/web 的形式是无法触发配置界面的

而实际中群辉的DSM中并没有内嵌本地的浏览器,所以我们可以迂回下解决

使用如下语句来ssh映射本地端口

ssh -p 22 username@ip_of_server -L localhost:32400:localhost:32400 -N

然后再在本地的浏览器中敲入url:localhost:

linux_20200731_2

这里你可能遇到如下错误:

SSH tunneling error: “channel 1: open failed: administratively prohibited: open failed”

解决的方法是将ssh配置中AllowTcpForwarding改成yes

sudo vim /etc/ssh/sshd_config
# 修改文件
AllowTcpForwarding = yes

关于绑定账号

  1. 如果你之前没有没有填写正确的PLEX_CLAIM,那么可以如下补救措施
    这下你能去设置了,这里最重要的一步是将你的服务器绑定到自己的plex账号
    linux_20200731_3
  2. 如果绑定了正确的PLEX_CLAIM(每个ID只有4分钟有效时间,所以需要四分钟内创建容器),那么plex会自动绑定

关于网络连接

实际测试,你完全可以用nginx反向代理后来使用web端的plex

而且我发现及时反向代理后Url:https://www.example.com:32400 但这并不影响plex的远程访问,唯一要做的的是手动指定端口

linux_20200731_4

SSL相关

推荐方法

参考:群晖docker 使用Nginx反向代理

使用plex自带的ssl机制

除此之外,这里再介绍下如何使用群辉DDNS获取letsencrypt证书,并使用的方法

plex其实本身就有自己的ssl机制

获取pfx证书

获取 Let’s Encrypt 证书:
管理员身份进入DSM > 控制面板 > 安全性 > 证书 > 右击已有证书 > 导出证书 > 解压 archive.zip

下来需要openssl的支持,我这里是安装了WSL,直接在WSL中操作的(也可下载windows版本的openssl)

cd archive

openssl pkcs12 -export -in cert.pem -inkey privkey.pem -out archive.pfx

###
Enter Export Password:
Verifying - Enter Export Password:

这里输入的密码要记住,比如密码为123,然后会在目录中得到archive.pfx

配置plex

首先在plex容器的root目录/volume1/docker/plex/database中创建以下目录

cd /volume1/docker/plex/database

mkdir -p /volume1/docker/plex/database/ssl/swack.i234.me/

archive.pfx拷贝到/volume1/docker/plex/database/ssl/swack.i234.me/

登录plex > 打开设置 > 网络

plex_net1

这里需要注意,正如我们创建容器中映射的/volume1/docker/plex/database对应着/config

这里的xxx.i234.me替换为自己的域名

plex_net2

全部配置完成,需要重启容器来生效