menu Chancel's blog
rss_feed
Chancel's blog
有善始者实繁,能克终者盖寡。

利用3.5美元的VPS打造属于你的离线下载

作者:Chancel Yang, 创建:2019-09-19, 字数:8071, 已阅:968, 最后更新:2024-03-10

随着2020年的脚步愈发的接近,下载一部电影变得越来越难,清晰度随着时间逐步下降,更重要的是,很多老资源都不得不上需要会员的视频网站才能看到了,那么有没有解决办法?

1. 前言

1.1. 下载电影

早几年前迅雷还流行的时候我相信除了少数喜欢超清电影的人很少有人会觉得迅雷不好用,但随着版权越来越严格,网络上其实已经非常难下载新电影了,这并不是坏事

这篇文章也不是为了下载盗版电影而来的,我对很多新电影兴趣也不大,主要是一些死链的问题...

由于家庭内网多层NAT原因导致Ut/Qb等工具在国内是异常的难用,下载速度慢到爆炸,而且我还是小区带宽..

像我挂在家里Nas里下载老电影的Transmission可以说那是下一部老电视剧一个月了,第一集都雷打不动的水平

这老电视剧网络上还没在线可以看,于是一台健全可以下载电影的VPS就提上日程了

1.2. VPS离线下载

前面说的问题,解决方案就是购买一台国外的VPS,用VPS做下载的好处

  1. VPS24小时在线,不需要担心掉线/电费问题
  2. 只要大硬盘的VPS并不贵
  3. 网速足够理想,如果本地-VPS线路足够理想,我们甚至可以在线看完电影删掉就行

国外VPS下载大部分老资源速度都比较快,唯一的麻烦是

  • DMCA投诉

The Digital Millennium Copyright Act (DMCA) is a 1998 United States copyright law that implements two 1996 treaties of the World Intellectual Property Organization (WIPO). It criminalizes production and dissemination of technology, devices, or services intended to circumvent measures that control access to copyrighted works (commonly known as digital rights management or DRM). It also criminalizes the act of circumventing an access control, whether or not there is actual infringement of copyright itself. In addition, the DMCA heightens the penalties for copyright infringement on the Internet.[1][2] Passed on October 12, 1998, by a unanimous vote in the United States Senate and signed into law by President Bill Clinton on October 28, 1998, the DMCA amended Title 17 of the United States Code to extend the reach of copyright, while limiting the liability of the providers of online services for copyright infringement by their users.

总结下DMCA就是版权投诉,如果你下载一些比较新的美剧,就可能导致VPS运营商收到DMCA投诉,因为BT下载的原理每个下载者都会有IP记录,这个时候你是跑不掉的,VPS运营商收到DMCA投诉以后第一次一般会勒令你删除掉所有违反版权的资源,重则直接冻结你的VPS

解决DMCA投诉的办法有2个

  • 寻找抗DMCA的投诉的VPS运营商,一般抗DMCA都是卖点(不少国内外贸那啥,都需要抗DMCA,所以这种服务还是很多的)
  • 转入PT下载,PT是私密下载,一般来讲安全很多,但也不切实际,PT下载需要大量分享,很多VPS的硬盘就那么大,不够做PT下载,如对这条路有兴趣请自行了解

除去上面两个解决办法,还有一个简单的办法

  • 不下热门某些美剧+按月买

这种情况出了事也就损失几块钱,非常便宜,无须担心DMCA投诉,再者DMCA投诉多半是因为把网站做成公开下载的,不做公开分享一般不会有事

这个不在本文讨论范围内了

2. 部署

2.1. 寻找合适的VPS

关于合适的VPS可以看折腾的二哈 - 低价大硬盘存储型VPS推荐 大盘鸡汇总

我跟博主一样购买了FranTech的服务器,一共花了1.5美元,为什么不是3.5美元?

因为这个VPS是按月算的,我只买了9月份的,买的时候已经是17号了,所以价格应该是3.5*17/31,他家经常有存货,所以很适合我这种情况,当我需要大量下载的时候就购买VPS进行离线下载,Perfect!

另外我发现这个VPS的速度也是相当优秀,就是魔法爱国也是足够的,这里就不展开讲了,有兴趣的请自行了解

VPS是2美元/月,购买了拉斯维加斯的,再购买一个块存储的服务,在后台把这个存储服务块绑定到服务器,格式化并挂载这个盘以后就可以美滋滋的准备下载了

购买之后我选择的系统是Ubuntu,这个随个人爱好了,什么发行版顺手上什么发行版

2.2. 初始化VPS

关于怎么SSH连接VPS的细节这里不展开说了,不清楚的自行搜索相关基础资料

在后台绑定存储块到服务器成功之后,再查看服务器实际存储情况

Bash
root@localhost:~# fdisk -l
Disk /dev/vda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x044f33ee

Device     Boot    Start      End  Sectors  Size Id Type
/dev/vda1  *        2048 19920511 19918464  9.5G 83 Linux
/dev/vda2       19920512 20969087  1048576  512M 82 Linux swap / Solaris


Disk /dev/sda: 256 GiB, 274877906944 bytes, 536870912 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
root@localhost:~#

可以看到,有新增的 /dev/sda,紧接着使用fdiskmkfs.ext4两个指令,过程如下

Bash
root@localhost:~# fdisk /dev/sda
...
Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-536870911, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-536870911, default 536870911): 

Created a new partition 1 of type 'Linux' and of size 256 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

root@localhost:~# mkfs.ext4 /dev/sda1
mke2fs 1.44.1 (24-Mar-2018)
Discarding device blocks: done                            
Creating filesystem with 67108608 4k blocks and 16777216 inodes
Filesystem UUID: 0fd3d6a1-5354-4c38-afdb-5c31462c855f
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done     

root@localhost:~# mount /dev/sda1 /store/
root@localhost:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            220M     0  220M   0% /dev
tmpfs            49M  2.7M   46M   6% /run
/dev/vda1       9.3G  1.5G  7.4G  17% /
tmpfs           241M     0  241M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           241M     0  241M   0% /sys/fs/cgroup
tmpfs            49M     0   49M   0% /run/user/0
/dev/sda1       251G   61M  239G   1% /store

总结下这个VPS的优点

  • 网络速度快,取回本地实测100g差不多10个小时即可
  • 无限流量,无论上传还是取回本地都无须担心流量问题
  • 250G硬盘月仅要1.5美元超良心

2.3. 下载工具

下载工具可选的就很多了,Aria2是首选,但我感觉还是transmission配置起来简单(绝对不是习惯用transmission了逃

Transmission is a fast, easy, and free BitTorrent client!

Transmission的安装方法(Ubuntu,其他发行版仅有包名与配置文件位置不同)

  1. 安装并生成配置文件
Bash
sudo apt install transmission-daemon
# 启动然后停止Transmission(以便生成配置文件)
sudo systemctl start transmission-daemon.service
sudo systemctl stop transmission-daemon.service
  1. 接着我们编辑配置文件,并修改如下部分,注意修改配置文件的时候Transmission必须处于停止状态否则无效

sudo vim /etc/transmission-daemon/settings.json

TEXT
...
"download-dir": "/data/downloads/complete", # 下载完成之后存放的位置
"incomplete-dir-enabled": true,              # 开启缓存,即下载没完成之前文件不会移动到完成的位置,建议开启以配合后面的自动Aria2下载文件
"incomplete-dir": "/data/downloads/temp",   # 下载没完成之前文件的缓存目录
"rpc-password": "密码",                       # 登录transmission的账户
"rpc-username": "账户",                       # 登录transmission的密码
"rpc-whitelist-enabled": false,              # 关闭白名单
"rpc-whitelist": "0.0.0.0",                  # 允许外网访问,如果要搭配Nginx,此处可以设置为127.0.0.1,由Nginx代理转发过来
  1. 重启Transmission,并设置开机自启
TEXT
sudo systemctl start transmission-daemon.service
sudo systemctl enable transmission-daemon.service
  1. 下载安装transmission-web-control - 一个自定义的transmission的美化UI(使用官方提供的一键安装脚本,此步骤可选)
TEXT
wget https://github.com/ronggang/transmission-web-control/raw/master/release/install-tr-control.sh
chmod +x install-tr-control.sh
./install-tr-control.sh
# 看不懂的话选1即可
  1. 访问Transmission
TEXT
http://server_ip:9091

这个时候你就可以看到transmission的下载界面了,可以上传任意种子进行离线下载了

什么你问我磁力链接怎么办?

在线磁链转种子文件

3. 扩展

3.1. 在线观看

在线观看的方案其实也是很多了,选择KODExplorer/h5ai/filebrowser都可以的,他们之间的区别仅有部署方式

这里如果是简易播放推荐filebrowser,非常易于部署,没有任何依赖,部署方案也可以参考官方文档Web File Browser which can be used as a middleware or standalone app - Github

Filebrowser 已被作者归档,不再推荐

这里推荐最简单的Nginx访问的方式,首先安装Nginx

Bash
sudo apt update & sudo yum apt install nginx
sudo systemctl start nginx

然后添加nginx配置文件

Bash
vim /etc/nginx/conf.d/file.conf

server {
        listen 8392;
        # "/data/downloads/complete“ 就是前面设置下载完成后存放的目录,这样避免打开Nginx文件管理网页并不知道文件下完没有
        root /data/downloads/complete; 
        location / {
    	      auth_basic "input your passwd";
       		auth_basic_user_file /etc/nginx/user.db;
            autoindex on;
            autoindex_exact_size on;
            autoindex_localtime on;
    }
}

可以看到配置文件中调用了 auth_basic_user_file的用户配置文件,这个文件是使用 htpasswd生成的

安装htpasswd并生成用户配置文件,请自定义[user] [passwd]的值,并让nginx重新读取配置

Bash
sudo apt install apache2-utils
sudo htpasswd -bc /etc/nginx/user.db [user] [passwd]
sudo nginx -s reload

访问8392端口,输入设置好的账户密码,你就可以看到下载完成的所有文件了,这个时候你想怎么下载都可以了

3.2. 自动下载

自动下载的方案有很多,这个时候记得开启安装环节提到的缓存文件夹目录!

在本地搭建一个Aria2的环境,配合我写的项目nginx-to-aria2

nginx-to-aria2 将Nginx文件服务器链接转换为Aria2的任务列表,支持指定格式/记录过滤已下载任务

并定期在后台执行,一个离线下载器就这么诞生了,不过还有一处问题,如果每次购买vps都要这样部署一遍很麻烦,这个时候docker就派上用场了

正在看dockerfile文件是怎么写的,后面有空应该可以搞一个docker集成


[[replyMessage== null?"发表评论":"发表评论 @ " + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageResponse.total]])

还没有可以显示的留言...
[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[getEnviron(messageItem.m_environ)]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[getEnviron(messageItem.m_environ)]]