自从知道了 Plex 之后,就琢磨着要是能装一个在 VPS 上,然后远程下载资源到服务器上,由 Plex 来分类管理和在线播放,岂不美滋滋。于是参考了这篇文章,使用 HyperApp 来安装 Plex,配合 Aria2,Aria2NG,CloudTorrent 作为远程下载服务器。

准备

入手一个 VPS

选择 VPS 的时候,需要考虑的因素有很多,比如价钱、机房位置、是否直连、流量带宽、配置(内存容量等)、VPS 服务商服务质量(包括工单处理、退款、是否会跑路),以及服务商的 TOS。

根据自己的情况,选择一个合适的 VPS。如果没有经验的话,AWS 和 Google Cloud Platform 都可以试用一年,而且 AWS 和 GCP 的机子相对来说都比较稳定。对于其它的服务商,购买之前最好在网上的各个主机测评网站搜一下评论。

Docker basics

阮一峰的 Docker 入门教程

Docker 主要解决了环境配置的各种问题,比如各种依赖的版本不同,并且方便复用和分享。Docker 的安装可以参考官方指南

Image 和 Container 的区别,有点像面向对象语言中类的定义和类的实例。 runstart 的区别,run 可以从 docker image 中生成一个 container,start 则是启动已生成但是停止运行的 container。

一些常用的参数:

  -d:在后台运行
  -p :容器的端口映射到主机的端口
  --rm:容器停止运行后,自动删除容器文件
  --name:给容器命名
  -v: 设置挂载点

关于 -v,可以看一个例子。

sudo docker run --name docker-nginx -p 80:80 -d -v ~/docker-nginx/html:/usr/share/nginx/html nginx  

这里 -v ~/docker-nginx/html:/usr/share/nginx/html 指定了主机中与容器对应的挂载点。

  • -v specifies that we’re linking a volume
  • the part to the left of the : is the location of our file/directory on our virtual machine (~/docker-nginx/html)
  • the part to the right of the : is the location that we are linking to in our container (/usr/share/nginx/html)

HyperApp

HyperApp 有点像 iOS 上的 Arukas,可以方便管理 VPS 及各个容器。根据教程,先安装好 Nginx Proxy 和 Nginx SSL Support。前者主要是做反代的工作,后者则是负责利用给指定好的域名 Let’s Encrypt 生成证书,当然前提是这个域名需要能 ping 通。

Aria & AriaNG

这部分内容参考了这篇文章。

Aria

HyperApp 的应用商店里还没有这个,不过可以使用 docker image 来创建。不过在那之前,要先在服务器上做些准备。

首先要创建存放 Aria2 的配置文件的文件夹。

mkdir /srv/docker/aria2 # /srv/docker/ 是 HyperApp 默认创建 docker volume 的地址
mkdir /srv/docker/aria2/config
chown -R 0:0 /srv/docker/aria2 # 0:0 是通过在 aria2 文件夹中执行 id `whoami` 得到的,与参考文章中的 33:33 不同,这里 0:0 是 root 用户的 uid 和 gid
find /srv/docker/aria2 -type d -exec chmod 755 {} + # 这条命令是给 aria2 文件夹下所有的文件夹都执行 chmod 755
find /srv/docker/aria2 -type f -exec chmod 644 {} + # 这条则是针对文件的

然后创建 Aria2 的配置文件,

vi /srv/docker/aria2/config/aria2.conf

并填写下面的内容,主要是对 Aria2 进行一些配置(这个配置参考该 docker image 的说明)

save-session=/config/aria2.session
input-file=/config/aria2.session
save-session-interval=60

dir=/downloads

file-allocation=prealloc
disk-cache=128M

enable-rpc=true
rpc-listen-port=6800
rpc-allow-origin-all=true
rpc-listen-all=true

rpc-secret=123456 // AriaNG 在连接 Aria2 使用

auto-file-renaming=false

max-connection-per-server=16
min-split-size=1M
split=16

另外再创建一个文件夹来关联 Aria2 的 /downloads 挂载点。这里为了配合 Plex 使用,就直接关联到 Plex 的资源文件夹中了。

mkdir /srv/docker/plex
mkdir /srv/docker/plex/data	
find data -type d -exec chmod 755 {} +
find data -type f -exec chmod 644 {} +

然后在 HyperApp 的应用商店中选择 Docker image,Image 的名称为 opengg/aria2Options 填入下面的内容(记得去掉注释 = =)

-u=0:0 # 上面说过 user/group identifiers
-v /srv/aria2/config:/config # 将 aria2 docker 下的 /config 设置为挂载点,并将上面创建的 host(服务器) 中的 /srv/aria2/config 关联到 /config 下
-v /srv/docker/plex/data:/downloads # 这里和上面的类似,相当于通过 Aria2 下载的文件会存放到 plex/data 这个文件夹下面
-p 6800:6800 # 第一个 6800 是 host port,第二个是 container port

安装好之后查看日志是否一切正常。

aria2 docker success

AriaNG

在 HyperApp 的应用商店中选择 Docker image,Image 的名称为 daxingplay/ariang,在 Custom Domain 中,Domain 填上可以指向服务器 IP 地址并且能 ping 通的域名,这里 HTTPS 最好选择 Disable https,使用 HTTPS 的话还需要对 Aria2 另外配置。

安装完之后访问域名,在 AriaNG 设置 - RPC - Aria2 RPC secret 中填入之前配置 Aria2 时设定的密钥即可连接成功。

CloudTorrent

HyperApp 的应用商店中也有 CloudTorrent,不过为了方便添加用户名密码,还是用的 Docker image,Image 的名称为 jpillora/cloud-torrentOptions 可以添加:

--restart=always -p 63000:3000 -u=0:0 -v /srv/docker/plex/downloads:/downloads
-a 用户名:密码

Custom Domain 填入自己的域名,安装即可。

Plex

Plex 可以用来管理电影、电视剧、音乐、视频、照片,实现在 PC、macOS、Linux、Android、iOS 等平台上分享串流播放各种媒体资源。安装好 Plex 服务器端后只需要添加媒体库,Plex 就会自动根据文件名分析下载对应电影/电视剧的海报封面图片及相关介绍,很快就能生成分类的海报墙。

之前安装 Aria2 的时候,关联 Aria2 的 /downloads 挂载点时就已经创建了 /srv/docker/plex/data,另外还需要准备的文件夹还有 Plex 的 transcode 和 config 文件夹。

  mkdir /srv/docker/plex/transcode
  mkdir /srv/docker/plex/config

然后同样在 HyperApp 中选择 Docker image,Image 的名称为 plexinc/pms-dockerOptions 里填入下面的内容:

  --name plex --network=host -e TZ=Asia/Shanghai -e PLEX_CLAIM=claim-xxx -e PUID=0 -e PGID=0 -v /srv/docker/plex/config:/config -v /srv/docker/plex/transcode:/transcode -v /srv/docker/plex/movies:/data 

这里的 PLEX CLAIM 很重要,可以在这里登录自己的账号后获取,每个 code 只有四分钟有效时间,所以如果安装新的 Plex docker 都需要重新获取一次,不然会连不上服务器。

虽然填写了 Custom domain 和 SSL Support,不过 Nginx proxy 每次都反代失败 = = 尽管不能直接通过域名访问,但是还是可以通过 IP 地址加端口号 32400 来访问的。

安装完成后访问服务器地址(域名或者 IP:32400),登录自己的账号,就可以将账号与这个 Plex 服务器连在一起了。

关于这里用的 Docker image,是 Plex 官方提供的,配置的说明可以参考官方文档。网上有一些文档的配置和官方提供的有些不同,用的 Docker image 也不一样,我没有试过其它的 docker 就不做描述了。

Plex 使用

Remote access

第一次登录自己的 Plex media server 时,会让你给这个服务器起个名字,另外就是勾选允许在外访问该服务器,这样在任何平台上登录 Plex 账号,都能访问到该服务器的媒体库。

img

Library 的管理

  • 电视剧的命名格式必须是 [剧名.SxxExx.时间],不然 Plex 的数据库就不能将它们整合到一起,可能会被识别成电影。
  • Plex 字幕文件命名,主要是和视频文件保持一致,然后加上语种。比如 xxx.en.srt
  • 如果 Scan library files 不起作用,检查资源文件的读写权限是否为 644,以及 docker user 是否和之前设置的一致(比如我这里的 root)。后者可以简单通过安装 Docker (比如 Aria2 和 CloudTorrent) 时设定 -u 来设定;对于前者,暂时没找到特别好的方式,如果下载的是一个文件,那么可以通过改变目录中默认的permissions来实现,如果是一个文件夹,有可能不起作用,就需要手动处理一下。

各平台客户端的使用

目前我用过 macOS,iOS,Web 以及 Android TV。对于国产的各种电视盒子,可以在这里下载到最新的 apk 来安装。

据我了解,Plex 是通过 CPU 来解码播放的,所以是否能流畅播放、画质清晰度都与服务器的硬件配置有关,主要是和 CPU 性能有关。不过就算是渣配置的服务器,电脑上流畅播放 1080p 也是没问题的。电视上的有时就比较卡了,特别是晚上。

完成的效果:使用 AriaNG 或者 CloudTorrent 下载资源,通过 Plex 管理和播放。

plex