HyperApp 搭建远程下载服务器和 Plex 流媒体服务器
自从知道了 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 的区别,有点像面向对象语言中类的定义和类的实例。 run
和 start
的区别,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/aria2
,Options
填入下面的内容(记得去掉注释 = =)
-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
安装好之后查看日志是否一切正常。
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-torrent
,Options
可以添加:
--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-docker
,Options
里填入下面的内容:
--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 账号,都能访问到该服务器的媒体库。
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 管理和播放。