本文已经年久懒得失修,仅作为参考,请参看新版文章。
随着电脑硬盘换成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:8384
为0.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完全不卡,包括晚高峰。折腾了半天,其实我的要求也就这点=。=
界面:
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/
文章评论
您好,plex适合多人用吗,比如几百人看能支持吗,谢谢。
@爱看电影人 理论上可以支持,同一Plex账号登陆的终端数应该没有限制,分享媒体库上限是100人,所以你可以把媒体库分享给一些小号,然后把小号分享出去,这样别人无法控制你的服务器。不过至于你的服务器带宽和性能是不是能扛得住,那是另一回事。
求推荐VPS-A和VPS-B服务商
@毛毛毛 不好意思这周在外没有及时查看,已经回复你的邮件,谢谢关注
Plex 感觉不是很好用啊,高级功能要收费,没有免费开源的媒体中心吗?
@zhangnew 我感觉plex能满足需求,就没研究替代品0.0免费账户功能基本够用吧,况且一个月5刀也能接受,要是实在觉得不行可以研究一下NAS?