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

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

关于 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

官方说明:http://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:http://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

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

Tags

About Author

Alex Lorel

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua veniam.

Latest Posts

Categories

Tags