利用alist搭建个人动漫网站

前言

本文旨在指导读者从零开始一步步搭建自己的个人动漫网站。

首先,我们需要实现准备必要设备+虚拟资源

1
2
3
4
5
资源准备
├── 服务器 :用于承载网页,并辅助本地主机完成一些工作
├── 域名 :用于指向网页,或者其他用途
├── 本地主机 :用于BT下载番剧,然后将番剧上传云端;还可能要实现一些额外功能
└── Microsoft E5开发者 :利用里面的Onedrive存放番剧资源

上诉资源可以一个接一个申请,先利用已有资源做工作,也可以有替代方案:

  • 服务器基本上是必须的,要用来展示网页。当然你也可以自己搞台机器做内网,但是不太方便。
  • 域名也几乎是必须的,方便用户记忆网站。如果自己使用可以不用域名。
  • 本地主机主要用来下载BT,你当然也可以用服务器下,但是需要很大硬盘容量,很花钱。自己本地主机的话加硬盘就很便宜。
  • Microsoft E5开发者:这个主要就拿来放番剧资源。你当然也可以放本地/服务器硬盘上,但是一来需要大量硬盘容量,而来用户流量走你的机子,会吃带宽和总流量。建议放OneDrive上,带宽和流量都走的微软的。

下面开始具体工作,不必严格按照顺序,准备充分就可以干活

在服务器上运行alist

首先需要有一个服务器,因为国内网站绑定域名需要备案,所以我建议用国外服务器,域名也在国外买。
几个不错的云服务器厂商:V.PS, Vultr, digitalocean
像digitalocean这种可以学生优惠低价嫖机子,如果有境外信用卡的话,也可以看看Oracle、AWS之类的云服务商,有免费试用。

然后,我们需要安装alist,安装方式很多种,我建议x86_64架构的机器(绝大部分云服务器)直接一键脚本安装。你可以手动安装,但是得自己写启动项。
直接在服务器运行脚本:

1
curl -fsSL "https://alist.nn.ci/v3.sh" | sudo bash -s install

然后初始化密码:

1
2
cd /opt/alist
sudo ./alist admin set <password>

然后就可以通过http://<服务器ip>:5244访问alist了,后面我们再说绑定域名。
image
使用密码登陆后我们看到alist的首页,但是没有任何内容。我们需要挂载资源,推荐OneDrive或阿里云盘。Onedrive在后面申请E5成功后能拥有一个5TB容量的账号,阿里云盘则是需要自己申请账号。API申请方式和挂载方法可以参考alist文档,我暂时不做详细解释。

挂载成功后应该像这样:
image
点进去应该是你所挂载的网盘文件。
image

为网页绑定域名

首先我们要去申请一个域名。建议在国外买,可以去Namecheap拿学生优惠白嫖,也可以去eu.org免费申请域名(但是移动网络可能无法正常连接),或者去其他比较知名的国外域名服务商买。
然后,建议将域名移交给cloud flare管理。在cloudflare上添加域名,然后将域名解析到服务器ip,这样就能通过域名访问alist了。域名移交后,可以在cloudflare上设置域名的各种解析,比如说三级域名,可以有很多玩法。
image

不过,在dns解析中添加了服务器的IP后,你可能还是无法正常使用域名连接网站。如果不做处理,你可能只能通过http://<域名>:5244这种奇葩方式访问,这不仅不美观,而且十分不安全。合理的访问方式应该是https://<域名>。为了优雅且安全的访问网页,有下面几个方案:

  1. 修改alist端口到443,然后为alist添加证书:
    这个方案很玄学,alist配置文件中可以添加证书位置,但是文档中没有找到相关说明,官方文档也推荐使用其他方案来实现。
  2. 修改alist端口到80,然后利用cloud flare的灵活SSL功能:
    这是我一直在用的方案,也推荐所有初学者使用。首先,你需要开启DNS记录的代理
    image
    然后我们需要修改cloud flare的SSL模式,修改为灵活。这样浏览器到cloud flare的连接是https(443端口),cloud flare会帮我们把流量修改为http再转发到服务器(80端口)
    image
  3. Nginx反向代理:
    这个方案最灵活,alist端口可以随意设置,统一由Nginx来代理转发。如果你已经学会了Nginx,可以尝试这个方案。

申请Microsoft E5开发者

这里我暂时不打算细致说明。网络上参考教程很多,比如说:https://www.dzdxtd.com/archives/122
不过有几个点需要注意:

  • 不要随意使用任何教程中的任何续订手段,4月份大批量封过一批脚本续订的账号,我当时账号也被封了。其实E5续订的条件很简单:使用api的次数足够多。上面申请的alist与后面的rclone中会用到api,所以不用担心续订问题。
  • 申请过程中遇到网页无响应等问题时,可以尝试科学上网,或者把网址中的/zh-cn/改成/en-us/,亦或反方向修改。
  • 设置沙盒时尽量选择即时沙盒,这样可以有选择data center位置的权利,如果选择自定义域的可配置沙盒就只能随缘了。

本地主机搭建

我先说一下本地主机的作用和逻辑结构。
本地主机主要的工作是:订阅新番、通过BT下载新番、下载完成后阻止新番的文件目录、将新番上传到OneDrive,此外还可能承担其他任务。大致的逻辑结构/流程如下:
image
小主机就是我们整个下载流程的中心,服务器相比之下就只是一个展示OneDrive云上内容的一个工具。

准备机器

你当然可以用PC做本地机器,但是太花钱了,而且需要长时间挂机,很费电。我推荐搞个Linux板子或者类似的玩意儿来用。我用的是二手淘来的“我家云”,你可以找找之类的机子还有树莓派这些都挺好的,主要看配置:尽量买 RK3328/S905 及以上配置的板子,最好有千兆网口和USB3.0接口。贴几个我家云教程:link1 link2

硬盘初始化与挂载

假设一台Linux机器已经准备好了,那么你还需要足够的硬盘空间。随便买个机械硬盘和转接线就行,不过注意转接线一定要买带供电的。
然后格式化硬盘并挂载,可以参考这个博客

1
2
3
4
5
fdisk -l #查看硬盘设备名,例如/dev/sda
fdisk /dev/sda #进入fdisk,并创建新分区
sudo mkfs.ext4 /dev/sda #格式化分区,可以考虑其他文件系统
sudo mkdir ~/mnt #创建挂载点
sudo mount /dev/sda ~/mnt #挂载分区

安装qbittorrent

qbittorrent是一个BT下载软件,可以在Linux上运行。安装方法:

1
2
3
sudo apt install qbittorrent
sudo apt install qbittorrent-nox
qbittorrent-nox -d #后台运行

然后就可以通过http://<本地主机ip>:8080访问qbittorrent了。默认用户名是admin,密码是adminadmin。安装方式其实不唯一,网上的方法都可以看看,其他BT软件很多也可以用,像aria2,但是我个人不太推荐。
image

订阅番剧

获取RSS链接

主要使用RSS订阅字幕组的发布活动,关于RSS是什么可以看看百科怎么解释。其实就是一个发布信息的便捷手段。我们可以订阅字幕组的发布信息,从而即时下载BT种子文件。

首先,我们要找到字幕组发布RSS的网站,建议去nyaa、或者bangume订阅,但是在国内可能会被墙。不得以的情况下可以考虑漫猫之类的国内镜像。ACG.RIP、动漫花园等也可以看看。

然后,我们在网站搜索过滤信息,拿到RSS链接即可。建议使用Ani的源,直接搜索Ani组名即可。Ani发布比较快而且都是mp4格式,而且会同时发布哔哩港澳台内容,并且文件名使用中文命名,最方便。

得到满意的过滤结果后,右键订阅按钮(长得像WiFi),就拿到RSS链接了。
image

订阅RSS链接

安装flexget

我们需要一个工具来订阅RSS链接,然后下载种子文件。我推荐使用flexget,安装方法:
首先我们需要创建一个非root账户:

1
2
adduser <username> # 创建用户
usermod -aG sudo <username> # 添加sudo权限

然后我们切换到新用户,使用这个用户来安装flexget:

1
2
# 安装脚本
bash <(wget -qO- https://github.com/Aniverse/inexistence/raw/master/00.Installation/package/flexget/install)

脚本安装大概率不能成功,可以试试手动安装:

1
2
3
4
5
6
7
8
9
sudo apt-get update && sudo apt-get install python3-pip python-setuptools
# 虚拟环境安装
mkdir ~/.flexget
vi ~/.flexget/config.yml # 事先编辑配置文件
sudo apt install python3-venv
python3 -m venv ~/flexget/
~/flexget/bin/pip install --upgrade pip setuptools
~/flexget/bin/pip install flexget
source ~/flexget/bin/activate

在config.yml中写入(仅供参考):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
tasks:
bangumi-ANI:
rss: https://acg.rip/page/1.xml?term=ANi
accept_all: yes
download: /home/monica/bts
nyaa-ANi:
rss: https://nyaa.si/?page=rss&q=ANi+mp4&c=1_3&f=0
accept_all: yes
download: /home/monica/bts
schedules:
- tasks: [nyaa-ANi]
interval:
minutes: 1
- tasks: [bangumi-ANI]
interval:
minutes: 2

安装完成使用flexget -V查看版本号,如果没有报错就是安装成功了。

如果虚拟环境安装不能成功,你也可以尝试全局安装:

1
2
3
4
# 全局安装
mkdir ~/.flexget
vi ~/.flexget/config.yml # 事先编辑配置文件
sudo pip install flexget
使用flexget

flexget的配置文件教程很多,建议随便看看学习一下,这个也可以参考。
在qbittorent中设置好监控目录,与flexget配置中的download目录一致即可。
image
我们填写的flexget配置文件,让它定时查询RSS链接,把BT种子下载下来,放到qbittorrent的监控目录中。这样每当发布新番,qbittorrent就会自动下载了。
定时查询RSS的方法有两种,一种是使用cron定时器:

1
2
crontab -e # 编辑定时任务
*/2 * * * * /usr/local/bin/flexget --cron execute # 每两分钟执行一次

或者可以使用flexget自带的任务管理,这样就会依赖我们上面写的的配置文件的schedules:

1
flexget daemon start [-d, --autoreload-config]

运行成功后:
image
image

安装rclone,设置OneDrive API

rclone直接使用官方的安装脚本:

1
sudo -v ; curl https://rclone.org/install.sh | sudo bash

自建API这里暂时不打算详细说明,可以参考这篇文章
然后需要补充几点:

  • 建议不要挂载OneDrive使用,上传新番的话直接在本地保存,然后rclone上传同步就行了,不建议挂载成硬盘。
  • 各种api教程中的入口千奇百怪,而且OneDrive自己的api网页也经常改版,所以不要死板的按照教程来,可以多参照不同的教程。

写脚本完成自动化

qbittorrent有一个下载完成后 钩子,利用这个钩子调用脚本:
image

1
/root/code/after-bt-download.py "%N" "%L" "%D"

我的脚本文件可供参考:after-bt-download.py

进阶操作

网页前端美化

跨越长城订阅

发布RSS(灵车)

Welcome

欢迎来到Monica的博客,在这里我未来将分享一些学术知识/技术实践上的一些经验总结,但是因为最近要做的事太多,我暂时不能挤出时间整理文字,还请谅解。

计划要写的博文:

  • 利用alist项目自建动漫/视频网站
  • 为路由器刷机并使用多播加快网速上限
  • 在校园网下获取IPv6提升上网体验