自己搭建 Plex 服务器

在 NAS 上搭了一个 Plex 服务器,比起群晖自己的 Video Station 好用多了。Video Station 的一个重要缺陷是无法索引通过网络挂载的文件夹里面的媒体文件。这并非物理条件限制无法达成,而是群晖有意为之。甚至我在搜索这个问题的时候发现群晖方面还声称专门修复了偶尔这些网络文件夹里的媒体文件被索引的bug。Plex 则没有这个问题。可以通过网络挂载媒体文件夹,意味着媒体服务器有了无限的扩容可能,也难怪群晖要屏蔽,不然可能会影响到多盘位 NAS 的销量的吧?

不过在 NAS 上直接安装的 Plex 有一个严重的问题,由于我的 NAS 是 J3455 的 CPU,这个 CPU 有一个缺陷:黑群晖引导的时候无法发现 CPU 的核显,这意味着 Plex 是不可能使用硬件解码的,而 J3455 用软解的方式来转码就太吃力了。这个问题太致命了,而我不想换换掉这个 NAS,因此我就盘算在我能用的另一台计算服务器上再搭载一个 Plex,然后将 NAS 的文件夹以 CIFS 的方式挂载到那台服务器上。

搭载的过程很简单,用 docker-compose 就可以了

有两个要注意的点:

  1. 必须要做端口映射,这里我在映射的时候,host 部分特意加了 127.0.0.1,这是以为我在以前的docker使用过程中发现docker直接绑定 host 端口可能会搞坏防火墙。当然也可以使用 host 模式来跑,这样容器的端口就直接挂在 host 上了。不过我的服务器上服务比较多,一次搞这么多端口(plex 实际使用了好几个端口,只不过只有 32400 是必须映射的)可能会有冲突。
  2. 需要绑定两个卷,一个是媒体数据,这不用说。媒体数据文件夹可以绑定多个。另一个是 Plex 的数据,这部分绑定出来这样我们重启 Plex 或者升级 Plex 的容器的时候数据不会丢失。

映射端口用 127.0.0.1 之后,我们没法直接从公网访问,需要中继一下。这个中继可以选择 Nginx。不过我使用了 Haproxy 直接中继 TCP 流量。Nginx 来中继 TCP 流量的设置非常麻烦,而 Haproxy 则轻量的多。之后设置 Plex 的时候可以将证书文件上传给 Plex 来设置 HTTPS。