LITTLEFOX

Simple & Naïve

Aria2+YAAW+Plex+Syncthing搭建自己的媒体中心

本文已经年久懒得失修,仅作为参考,请参看新版文章

随着电脑硬盘换成SSD,也就没那么多空间来放电影什么的了(呃虽然以前HDD也不放什么电影- -),于是就在琢磨怎么解决。移动硬盘是一个办法,不过访问还是不方便,总不能出个门都带着移动硬盘吧?一个可能的方案是把移动硬盘挂载在智能路由器上,然后用花生壳影射到公网,但是第一麻烦,第二稳定性堪忧,于是就有了本文这个方案,最终的效果就是像智能电视一样,可以远程看电影,也可以下载到本地,当然资源是需要自己提前保存在库里的。

如何实现呢?我的方案是一台大硬盘VPS做下载器,VPS必须是抗DMCA的,否则下载或者储存电影之类的盗版资源,很大几率会被DMCA takedown,然而DMCA free的VPS多在欧洲,到国内网络实在是烂的可以,必须加一个中转。中转的话又有两种方案,一种是将文件转移到访问较快的服务器,一种是用户通过代理经过较快的服务器访问欧洲VPS,我这里选择前者,因为稳定性受某墙影响可能性较小,而且也便于分享,缺点也显而易见,同步管理2个VPS的文件显然比一个麻烦。另外还有一个问题是大硬盘、网络好、便宜又稳定的VPS并不好找,当然,要是真有我也不敢买=。=

最后权衡各个方面,我选择的方案是:

  • 一台DMCA free的小鸡(以下称为VPS-A,欧洲,为了省钱用的OVZ,具体哪家不说了,免得有广告之嫌,当然有钱任性用KVM会更好,不过话说回来,有钱任性干嘛非要这么折腾,在北美上独服,加钱买抗DMCA啊=。=)做下载端,后端用Aria2,前端用YAAW,加速用lkl;
  • 一台大盘鸡(以下称为VPS-B,美中,为什么不用美西呢,因为穷=。=依然不提供具体名字,不过有一点提醒要注意,部分商家是会扫描硬盘内容的,不是说你不跑BT就万事大吉了,被扫到保存盗版电影一样会takedown,买之前一定认真研读TOS,最好能确认是否有扫描脚本)做媒体服务器,服务端用Plex,加速用bbr;
  • 两台VPS通过Syncthing同步文件,当然你可以用其他的,不违反TOS即可。

ps.当然还有其他方法,譬如用VPS-B远程挂载VPS-A的硬盘,或者两个VPS挂载同一个狗狗网盘,这样不需要大盘鸡,然鹅我懒得折腾……

扯完了,下面是正文:

安装Aria2(VPS-A,CentOS6)

Aria2可以用逗比大佬的一键脚本:

$ wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/aria2.sh && sudo chmod +x aria2.sh && sudo bash aria2.sh

不过我的渣渣小鸡只有CentOS6,不能使用一键包。找到了Aria2 1.31的二进制包,发现依赖新版glibc,CentOS6升级glibc是个坑,又懒得编译,放弃,换1.16.4,不过这样的话要手动安装nettle2.2,并把nettle的升级exclude掉,否则升级之后会不兼容。具体过程太长先不写了,相信大家都能找到新版系统,一键脚本就好。2017.11.24更新的1.1.10版本采用预编译方式安装,支持CentOS6,实测安装正常,这样就可以用AriaNG前端了。

安装YAAW(VPS-A,CentOS6)

至于前端,本来比较看好AriaNg,奈何不支持老板Aria2的rpc方式,只能换YAAW,丑了点,但是好用最重要。

创建文件夹

$ sudo mkdir /usr/local/caddy/www && sudo mkdir /usr/local/caddy/www/aria2

安装YAAW

$ cd /usr/local/caddy/www/aria2
$ sudo git clone https://github.com/binux/yaaw

赋予执行权限

$ sudo chmod -R 755 /usr/local/caddy/www/aria2

或者,安装AriaNG(VPS-A,CentOS6)

cd /usr/local/caddy/www/aria2
Ver=$(curl -m 10 -s "https://github.com/mayswind/AriaNg/releases/latest"|sed -r 's/.tag\/(.+)\">redirected./\1/')
wget -N --no-check-certificate "https://github.com/mayswind/AriaNg/releases/download/${Ver}/aria-ng-${Ver}.zip" && sudo unzip aria-ng-${Ver}.zip && rm -rf aria-ng-${Ver}.zip
chmod -R 755 /usr/local/caddy/www/aria2

注意,目前AriaNG貌似只支持rpc-token的验证方式。

创建虚拟主机

http server可以用Nginx,不过我选择了更轻量的Caddy,还是逗比大佬的一键脚本:

wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh install http.filemanager

绑定域名(一次性复制执行,把[YourDomain]改成你的域名)

echo "[YourDomain] {
 root /usr/local/caddy/www/aria2
 timeouts none
 gzip
 browse
 }" > /usr/local/caddy/Caddyfile

启动Caddy

service caddy start # CentOS7用systemctl,下同
echo 'service caddy start' >> /etc/rc.local

如果已经设置好了域名A解析,打开域名,可以看到YAAW或者AriaNG界面。第一次会出现Internal server error,正常,因为没有设置RPC地址。在网站右侧“设置”修改jsonrpc为正确的地址,正确值应该是http://token:secret@hostname:port/jsonrpc (1.16以上)或者http://username:passwd@hostname:port/jsonrpc (1.16以下)。

配置https(可选)

如果你希望通过https访问网站,还需要对aria2进行配置,否则https网页的rpc验证默认通过https协议进行,会导致无法连接。

生成自签证书:

mkdir /usr/local/caddy/www/cert && cd /usr/local/caddy/www/cert
wget https://raw.githubusercontent.com/michaelliao/itranswarp.js/master/conf/ssl/gencert.sh && chmod +x gencert.sh && ./gencert.sh #输入域名,生成自签证书

编辑aria2配置文件:

vi /root/.aria2/aria2.conf

修改以下行:

# 是否启用 RPC 服务的 SSL/TLS 加密, 
# 启用加密后 RPC 服务需要使用 https 或者 wss 协议连接 
rpc-secure=true 
# 在 RPC 服务中启用 SSL/TLS 加密时的证书文件, 
# 使用 PEM 格式时,您必须通过 --rpc-private-key 指定私钥 
rpc-certificate=/path/to/certificate.pem 
# 在 RPC 服务中启用 SSL/TLS 加密时的私钥文件 
rpc-private-key=/path/to/certificate.key

完成后重启Aria2,然后修改Caddy配置文件

vi /usr/local/caddy/Caddyfile

将域名改成https,在timeout none后加入tls xxx@xxx.com(你的邮箱),然后重启caddy

service caddy restart

由于是自签证书,浏览器默认不会信任,需要手动添加例外。打开浏览器,输入域名:6800,会出现证书警告,根据提示永久加入例外,会进入一个空白页面,关闭即可。

然后回到AriaNG,设置PRC协议为https,输入密钥,刷新,显示已连接即可。

配置Caddy FileManager扩展(VPS-A,CentOS6)

使用Caddy一个额外的好处是,Caddy的FileManager扩展可以直接管理下载的文件,而不需要再安装h5ai,这点对Plex很重要,因为它需要通过文件名识别电影信息,具体可以看Plex的文档。

echo "[YourDomain] {
 root /usr/local/caddy/www/file
 timeouts none
 gzip
 filemanager / /usr/local/caddy/www/aria2/Download {
 database /usr/local/caddy/filemanager.db
 }
 }" >> /usr/local/caddy/Caddyfile

如果已经设置好了域名A解析,打开域名,就可以看到FileManager界面,默认用户名和密码为admin,可在设置中修改。

至此,下载器部分配置完毕。

安装Plex(VPS-B,CentOS7)

Plex的自我定位是Media Streaming Server,你可以理解成一个媒体中心,详细介绍可以参看下面的参考链接,或者自己搜下。另外,这家客户端支持的平台爆多,包括PS和XBOX……

yum install https://downloads.plex.tv/plex-media-server/1.8.1.4139-c789b3fbb/plexmediaserver-1.8.1.4139-c789b3fbb.x86_64.rpm
mkdir -p /var/lib/plexmediaserver
mkdir -p /var/lib/plexmediaserver/Movies #这个目录名可以自定义,也可以不建直接把文件都放在plexmediaserver中
chown -R plex:plex /var/lib/plexmediaserver
systemctl start plexmediaserver

首先,你需要到https://www.plex.tv/注册一个账号,然后使用隧道连接ssh,source为localhost:12345,destination为localhost:32400,浏览器打开http://localhost:12345/web,登陆,设置资料库,开启远程访问,之后就可以通过IP:32400访问plex服务,其实也可以通过Plex网站访问,只要登陆同一个Plex账号即可,我习惯通过后者。

安装Syncthing(VPS-B,CentOS7)

wget https://github.com/syncthing/syncthing/releases/download/v0.14.36/syncthing-linux-amd64-v0.14.36.tar.gz #同样,新版链接到syncthing网站找
tar xzf syncthing*
cd syncthing*
cp syncthing /usr/bin/
chmod +x /usr/bin/syncthing

设置开机启动(系统级服务)

cd etc/linux-systemd/system
cp syncthing@.service /etc/systemd/system
systemctl enable syncthing@root
systemctl start syncthing@root

修改配置文件,使得可以外网访问

vi ~/.config/syncthing/config.xml

修改第27行127.0.0.1:8384为0.0.0.0:8384,重启Syncthing,开启firewalld端口

systemctl restart syncthing@root
firewall-cmd --zone=public --add-port=8384/tcp --permanent
firewall-cmd --reload

浏览器打开IP:8384即可配置,第一次配置请自行设置密码和https访问。

ps.一个弱弱的问题,像Syncthing和BT Sync这样的同步软件是基于P2P传输的,传输盗版资源会不会遇上蜜罐?

安装Syncthing(VPS-A,CentOS6)

坑,略,能上新版系统的就上新版吧= =算了还是写写吧

wget https://github.com/syncthing/syncthing/releases/download/v0.14.36/syncthing-linux-amd64-v0.14.36.tar.gz #同样,新版链接到syncthing网站找
tar xzf syncthing*
cd syncthing*
cp syncthing /usr/bin/
chmod +x /usr/bin/syncthing

设置开机启动(使用Supervisor)

yum install python-setuptools
easy_install supervisor
echo_supervisord_conf > /etc/supervisord.conf
echo "supervisord" >> /etc/rc.local
vi /etc/supervisord.conf

加入

[program:syncthing] 
command=/usr/bin/syncthing 
autostart=true 
autorestart=true 
user=root 
redirect_stderr=true 
stdout_logfile=/var/log/syncthing.log
supervisord #启动supervisor

修改配置文件,使得可以外网访问

vi ~/.config/syncthing/config.xml

修改第27行127.0.0.1:83840.0.0.0:8384

重启Syncthing

supervisorctl restart syncthing

开启iptables端口

iptables -I INPUT -p tcp --dport 8384 -j ACCEPT
/etc/init.d/iptables save
service iptables restart

最后

然后在网页端设置好两边的同步,就可以愉快地玩耍啦!

最终效果:在YAAW中添加下载链接,然后就可以去干别的了,等几个小时,在Plex网页端(Android端我没找到刷新方法,求指教)刷新下库可以设置自动刷新库,Plex会自动匹配电影信息,然后就可以在网页或者客户端上看了,速度还算满意,至少720P完全不卡,包括晚高峰。折腾了半天,其实我的要求也就这点=。=

界面:

《Aria2+YAAW+Plex+Syncthing搭建自己的媒体中心》

ps.别被图上的Cloudflexy坑了,这家不抗DMCA,已经有takedown案例,不要被无良affman坑了,我放这个纯粹为了演示,takedown不要找我!

参考资料:

https://doub.io/shell-jc1/https://yorkchou.com/plex-video-stream.html

https://www.getnas.com/2017/07/2478.htmlhttps://www.xiaoz.me/archives/7708

http://www.senra.me/build-your-own-cloud-storage-series-syncthing-btsync-opensource-alternative/

点赞
  1. 爱看电影人说道:

    您好,plex适合多人用吗,比如几百人看能支持吗,谢谢。

    1. Fox说道:

      理论上可以支持,同一Plex账号登陆的终端数应该没有限制,分享媒体库上限是100人,所以你可以把媒体库分享给一些小号,然后把小号分享出去,这样别人无法控制你的服务器。不过至于你的服务器带宽和性能是不是能扛得住,那是另一回事。

  2. 毛毛毛说道:

    求推荐VPS-A和VPS-B服务商

    1. Fox说道:

      不好意思这周在外没有及时查看,已经回复你的邮件,谢谢关注 :idea:

  3. zhangnew说道:

    Plex 感觉不是很好用啊,高级功能要收费,没有免费开源的媒体中心吗?

    1. Fox说道:

      我感觉plex能满足需求,就没研究替代品0.0免费账户功能基本够用吧,况且一个月5刀也能接受,要是实在觉得不行可以研究一下NAS?

发表评论

电子邮件地址不会被公开。 必填项已用*标注