xChar
·a year ago

简单介绍

展开

整体方案

展开

方案基于互联网上已有教程,采用虚拟化方式构建自有流媒体进行实践,旨在实现自动化追番观影的同时能学到一些虚拟化、服务器相关的知识。
流媒体服务的整体框架如下:

  • proxmox支撑虚拟化运行
  • docker或者k8s作为服务运行的基础平台
  • qbittorrent作为下载器
  • jackett承担订阅索引器
  • radarrsonarr扮演电影、剧集搜刮器
  • overseerr提供搜刮整合服务
  • plexemby负责媒体中心服务
  • bazarr匹配字幕信息

以上基于X99平台的2U服务器,当然不一定非要机架式的服务器,其他自行DIY的设备都可以实现这一套方案,只要核心数量够多,内存够大,玩得动虚拟化即可。
采用的项目均在全球最大的开源社区可以找到

流程图

image

Q&A:

展开

Q: 为什么不用unraid、黑群、openmediavault、turnas等一众NAS类产品?
A: 不得不承认NAS类产品有着更好的生态支持,完善的操作体验,相对较低的学习成本,尤其是黑群unraid。但如果采用nas类产品就少了一部分可玩性😑,选择虚拟化的方式虽然更加繁琐,但这过程种遇到的种种问题以及解决问题的过程我觉得是折腾最大的乐趣所在,这也能够收获很多服务器运维方面的知识🤩。

Q: 这套方案在观影体验有什么优缺点?
A: 优点是配置起来比较简单,并且页面美观、操作简单,完善后只需要在overseerr上对想看的节目点击请求即可推送到qb进行下载。全程不需要其他操作,但缺点也明显,sonnarr不受中文支持导致动漫、国产及日韩剧重命名方式均为英文,过长的文件名在emby上显示文件名的时候不是很美观。较新资源能得到有效支持,但如果没有PT站资源则很难找到比较早的影视资源。(不论哪种方案都有这个问题呢😟)

Q: 关于其他扩展?
A: 比如下载器有utorrent、等可以进行扩展,媒体中心可以增加kodi、jillyfin等,还可以通过webhook消息推送实现移动端订阅视频。动漫番剧方面通过AutoBangumi扩展订阅方式等等,总之还有很多可玩空间,本方案仅仅是一个基础或者是说是一个开始,后面还有很多探索空间😉。

Q: 其他的自动化方案?
A: 自动化观影的核心体验在于对视频的刮削,让媒体中心能够识别影片信息。而刮削的重点在于对视频文件或者其母目录的重命名,从这几个角度看还有nastools、tMM等工具可以作为替代。字幕方面还有ChineseSubFinder可以作为代替。虚拟化方面,proxmox也可以用exsi作为替代

虚拟化底层系统篇

关于proxmox的一些注意点

展开
  1. 镜像文件下载地址:proxmox VE
  2. 制作U盘启动工具:Rufus 或者 Ventoy 更推荐后者
  3. proxmox默认没有操作页面,可以通过系统安装后给定的连接进行web端的控制,默认为 https://ip:8006/
  4. 换源

企业源

## 删除自带的源
rm /etc/apt/sources.list.d/pve-enterprise.list

## 添加官方,非订阅源(和下面国内非订阅源,二选一)
echo 'deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription' >> /etc/apt/sources.list.d/pve-no->subscription.list

## 这个是国内,非订阅源
echo 'deb http://mirrors.ustc.edu.cn/proxmox/debian/pve bullseye pve-no-subscription' >> /etc/apt/sources.list.d/pve->no-subscription.list

软件源

## 编辑源文件:/etc/apt/sources.list
cp /etc/apt/sources.list /etc/apt/sources.list.bak && vim /etc/apt/sources.list

## 将文件中的所有内容删除或者用#注释掉,添加以下内容
deb https://mirrors.aliyun.com/debian bullseye main contrib
deb https://mirrors.aliyun.com/debian bullseye-updates main contrib
deb https://mirrors.aliyun.com/debian-security bullseye-security main contrib
  1. 多磁盘可以组raid5用于为虚拟机提供足够的存储空间的同时保证数据存储相对可靠

虚拟机篇

关于管理linux以及方案中必要的一点配置

展开

虚拟机至少需要创建3台
157.20.20.1 --> jumpserver --> 远程运维用的堡垒机
157.20.20.2 --> nfs --> nfs文件共享系统
157.20.20.3 --> docker --> 专门部署流媒体需要的容器
如果选择k8s的方式,需要再虚拟化至少2台虚拟机
157.20.20.3 --> k8s-master --> k8s的主节点
157.20.20.4 --> k8s-node01 --> k8s的工作节点
157.20.20.4 --> k8s-node02 --> k8s的工作节点

其中,jumpserver至少需要4C8G的资源,其他虚拟机至少分配2个核心,内存按照需求分配,没有特殊要求。如果是k8s环境,master节点至少2C6G,node节点至少2C4G。

创建多台虚拟机的理由:按照功能划分空间,避免因操作不当导致服务器文件损坏引起的所有组件不可用,一旦出现这种情况,修复和维护将会变得异常麻烦。

创建虚拟机

pve的local中需要先上传ISO镜像,用于安装基础的操作系统
image
各类基础镜像的下载地址:CentOS7Rocky LinuxDebian
右上角点击创建虚拟机,选择合适的镜像进行安装即可

为虚拟机安装jumpserver

简单介绍
飞致云旗下的开源堡垒机产品,比起各类ssh、scp工具要方便不少,官网

部署

curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash

████████████████████████████████████████ 100%
[Success]: download install script to /opt/jumpserver-installer-v3.2.0
[Info]: Start executing the installation script.
[Info]: In an automated script deployment, note the message prompts on the screen.
████████████████████████████████████████ 100%
[Success]: The Installation is Complete.

For more commands, you can enter jmsctl --help to view help information.

安装完成后在浏览器访问http://157.20.20.1 即可通过默认账户admin/admin进行登录

创建使用第一个资产
资产管理-->资产列表 中进行进行添加添加资产

image

权限管理-->资产授权 中创建授权规则对用户进行资产授权

image

授权完成右上角可以进入控制台,进行登录虚拟机等操作,灵活性、便利性均比ssh工具高。到此jumpserver部署完成

创建nfs共享文件服务器

创建第二台linux虚拟机,分配足够的磁盘空间。提前规划数据空间和媒体空间,方便管理避免混淆

image

在系统中创建media文件夹和storage文件夹,分别作为存储空间和媒体空间,挂载好磁盘

## 确认要挂载的空间
$ lsblk
## 创建媒体文件夹和存储文件夹
$ cd /mnt && mkdir media && mkdir storage
## 格式化并挂载磁盘到文件夹供操作系统访问
## 文件系统格式可选xfs或者ext4等
$ mkfs.xfs /dev/sdb
$ mkfs.xfs /dev/sdc
$ mount /dev/sdb /mnt/storage && mount /dev/sdc /mnt/storage
## 修改/etc/fstab保证开机自动挂载
$ vim /etc/fstab
/dev/sdb    /mnt/storage    xfs    defaults    0    2
/dev/sdc    /mnt/media   xfs    defaults    0    2

部署nfs服务器,以rocky linux为例

  1. 安装 NFS 服务器组件:
$ yum install nfs-utils 
  1. 创设置要共享的目录权限:
$ chmod 777 /mnt/storage          
$ chmod 777 /mnt/media      
  1. 配置 NFS 访问权限文件 /etc/exports。例如:
$ vim /etc/exports
/mnt/storage         157.20.20.0/24(rw,sync,no_subtree_check)
/mnt/media         157.20.20.0/24(rw,sync,no_subtree_check)
## 这会向 157.20.20.0/24 子网的客户端提供读写访问
  1. 启动 NFS 服务:
$ systemctl start nfs-server
$ systemctl enable nfs-server # 设置开机自启动
  1. 在防火墙中开启 NFS 连接的端口:
$ firewall-cmd --permanent --add-service=nfs     
$ firewall-cmd --permanent --add-port=2049/tcp 
$ firewall-cmd --reload
  1. 测试 NFS 配置:
$ showmount -e localhost 
/mnt/storage         157.20.20.0/24
/mnt/media         157.20.20.0/24

Tip
如果修改了exports中的内容需要重新暴露exports 具体如下:

$ exportfs -r
$ systemctl restart nfs-server

docker服务器

创建第三台linux虚拟机,部署nfs服务器,以rocky linux为例

$ yum install -y yum-utils device-mapper-persistent-data lvm2
$ yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
$ yum makecache fast && yum -y install docker-ce
$ systemctl start docker && systemctl enable docker

通过堡垒机的文件管理上传从github上下载的docker-compose文件,下载链接
上传的文件默认位于/tmp

$ cp /tmp/docker-compose-linux-x86_64 /usr/local/sbin/docker-compose
$ chmod +x /usr/local/sbin/docker-compose

完成后可以检验docker及docker-compose的版本

$ docker version
$ docker-compose version

k8s环境快速部署

开源项目:KuboardSpray-github
这个项目可以直接部署到jumpserver的虚拟机上,需要注意的是80端口已经被占用,所以在映射端口的时候需要更换端口

docker run -d \
  --restart=unless-stopped \
  --name=kuboard-spray \
  -p 8081:80/tcp \
  -e TZ=Asia/Shanghai \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v ~/kuboard-spray-data:/data \
  eipwork/kuboard-spray:latest-amd64
  # 如果抓不到这个镜像,可以尝试一下这个备用地址:
  # swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard-spray:latest-amd64

通过访问http://157.20.20.1:8081 进行访问,默认账户admin/Kuboard123
利用kuboard-spray可以对157.20.20.3-157.20.20.6(具体看需要将哪些虚拟机作为k8s环境的节点)
值得注意的是,单服务器只能模拟实现k8s集群,用作测试学习用途,真正的k8s集群应当是多个master节点并且work节点分布在不同的物理服务器上,从而保证单机宕机也不影响集群运行。

详细安装部署参考
kuboard-spray官方文档
优化参考:
待更新

下载器篇

关于qbittorrent通过docker或者k8s的方式进行部署并使用

展开

部署

docker方式

挂载共享文件夹到本地

## 确认是否可以挂载
$ showmount -e 157.20.20.2
## 挂载
$ cd /mnt && mkdir media && mount -t nfs 157.20.20.2:/mnt/media /mnt/media
$  mkdir storage && mount -t nfs 157.20.20.2:/mnt/storage /mnt/storage
## 设置fstab开机挂载请参照前文

docker部署qbittorrent

docker run -d \
  --name=qbittorrent \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Asia/Shanghai \
  -e WEBUI_PORT=8080 \
  -p 8080:8080 \
  -p 49152:49152 \       
  -p 49152:49152/udp \   
  -v /mnt/storage/qb-config:/config \     
  -v /mnt/media/qb-downloads:/downloads \  
  --restart unless-stopped \
  lscr.io/linuxserver/qbittorrent:latest

上述代码中需要注意的内容有以下几点:

  1. 默认为6881端口, 一般情况下不用改,大部分PT站的6881端口是被ban的,所以可以修改为49152或其他
  2. -v设置的路径一定要创建好对应文件夹再使用命令部署
  3. -v /mnt/storage/qb-config:/config 中的路径 /mnt/storage/qb-config替换为你想存储的qbittorrent的配置路径,所有修改都会保存,如果容器挂掉,只要配置不丢失重新启动容器即可。
  4. -v /mnt/media/qb-downloads:/downloads 部分同样需要修改 /mnt/media/qb-downloads 部分

Tip
docker部署过程中值得主机的点在于端口和挂载路径,只要再docker hub上找到镜像后修改即可
后文不再详细赘述docker部署过程中的修改方式,基本注意点与本节相同

k8s部署qbittorrent

通过kuboard面板进行部署qbittorrent
找一个合适的命名空间(可以手动创建一个)进行创建工作负载

image

配置容器信息

image

挂载存储

image

发布应用

image

保存后等容器日志提示successfuly即可通过定义好的发布端口进行访问例如上图中设置30001映射容器的8080端口,因此可以通过http://157.20.20.3:30001进行访问,qb的默认账号admin/adminadmin

qb的基本设置

在qb页面的上方导航栏,有个小齿轮的图标,是qb设置的入口

  1. 关于下载选项,在保存管理中,需要设置下图中红框部分,第一处设置与sonarr和randarr相关,通过sonarr和randarr进行硬链接时会修改文件夹,设置成手动可以接管下载的文件夹设置。第二处作用是提取下载文件的种子并备份,通常情况下,下载的媒体文件不带有种子文件,此设置可以备份种子到一个指定文件夹。

image

  1. BitTorrent选项卡下,如果采用BT方案在EZTV、RARGB、ACG.RIP等站点搜索资源的话,勾选”启用 DHT (去中心化网络) 以找到更多用户“会有更好的效果,如果玩PT站则可以取消勾选。

tracker服务器的作用是帮助用户提高下载速度,搜索更多用户节点,tracker服务器可以在 trackerslist.com 这个网站中复制粘贴。

image

  1. 高级选项卡下,勾选两个tracker相关选项有助于连接更多track服务器从而提升速度。

image

刮削篇

关于刮削方式,本方案采用sonarr和radarr对下载来的资源文件做硬链接的方式
原理在于通过重命名的方式让emby、plex等媒体服务器可以连接tmdb、imdb等互联网电影资料库搜索对应信息从而实现在媒体库中展现影视剧的海报墙、简介、演员信息等
其中,sonarr对应TV剧集的刮削,randarr对应电影的刮削,而sonarr和radarr可以通过jackett对公开的bt站点进行索引,以达到本地搜索互联网剧集实现qb自动下载并刮削的目的

展开

部署

本节仅介绍docker的部署方式,jackett、sonarr和radarr部署方式、注意点均与前文qb部署方式相同,k8s部署方式参考qb的部署方式

Tip
注意创建对应文件夹

jackett

docker run -d \
  --name=jackett \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Asia/Shanghai \
  -e AUTO_UPDATE=true  \
  -e RUN_OPTS= \
  -p 9117:9117 \
  -v /mnt/storage/jackett-congfig:/config \
  -v /mnt/media:/downloads \
  --restart unless-stopped \
  lscr.io/linuxserver/jackett:latest

sonarr

docker run -d \
  --name=sonarr \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Asia/Shanghai \
  -p 8989:8989 \
  -v /mnt/storage/sonarr-config:/config \
  -v /mnt/media/tv:/tv  \
  -v /mnt/media/anime:/anime  \
  -v /mnt/media/qb-downloads:/downloads  \
  --restart unless-stopped \
  lscr.io/linuxserver/sonarr:latest

radarr

docker run -d \
  --name=radarr \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Asia/Shanghai \
  -p 7878:7878 \
  -v //mnt/media/radarr-config:/config \
  -v /mnt/media/movies:/movies  \
  -v /mnt/media/qb-downloads:/downloads  \
  --restart unless-stopped \
  lscr.io/linuxserver/radarr:latest

overseerr

docker run -d \
  --name=overseerr \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Asia/Shanghai \
  -p 5055:5055 \
  -v /mnt/storage/overseerr-config:/config \
  --restart unless-stopped \
  lscr.io/linuxserver/overseerr:latest

设置

jackett

通过 http://ip:9117 进行访问jackett,点击Add indexer即可添加

image

sonarr

通过 http://ip:8989 进行访问sonarr,

在settings-->mediamanagement中设置媒体文件夹监控,sonarr会自动从下载好的剧集文件夹中将媒体文件硬链接到此处

image

在settings-->profiles中设置好默认语言

image

在index中设置默认索引器,其中需要用到jackett中的API key,添加的订阅索引格式为Torznab

image

在settings-->connect中设置媒体中心,设置中需要获取emby的API key,这部分可以等到emby部署完成后进行

image

在settings-->downloadclients中设置qb下载器的连接,并创建对应监控目录

image

在settings-->metadata中设置检索的元数据信息

image

以上设置完成后即可在Series中设置中对剧集进行搜索和监控,也会添加监控就会通知qb进行下载,完成下载后自动硬链接到目标文件夹实现刮削

image

radarr

radarr基本设置通sonarr,单radarr可以设置中文

通过http://ip:7878 进行登录,在settings--> UI 中可以设置页面为中文

image

在媒体管理中添加":ZH"可以设置重命名为中文目录

image

Overseerr

overseerr是美观且强大的媒体管理工具,可以堪称是radarr和sonarr的集合,通过API key的方式对sonarr和radarr进行管理。部署完成后会进入引导设置页面,其中设置用到的api-key均在sonarr和radarr的settings-->general(通用)中可以找到。

值得注意的地方:

  1. 该软件依赖plex服务器,因此请在部署好plex服务器后进行
  2. 一般设置中选择显示语言为中文,地区为所有
    image
  3. 服务器中TV和动漫可以分开添加
    image
  4. 媒体刮削严重依赖TMDB访问,请注意设置全局代理,例如通过软路由进行代理访问,如果代理设置在overseerr所在的虚拟机内,请在部署docker过程中添加 -e https_proxy=http://172.17.0.1:7890 ,否则overseerr将无法设置代理

媒体库篇(emby及plex)

展开

DockerHub上搜索emby及plex的部署方式进行参考部署,以下是示例:

emby

docker run -d \
  --name=emby \
  -e UID=1000 \
  -e GID=1000 \
  -e TZ=Asia/Shanghai \
  -p 8096:8096 \
  -p 8920:8920 \
  -v /mnt/storage/emby-config:/config \
  -v /mnt/storage/emby-lib:/lib \
  -v /mnt/media:/media  \
  --restart unless-stopped \
  lscr.io/linuxserver/emby:latest

plex

docker run -d \
  --name plex \
  --network=host \
  --restart=always \
  -p 32400:32400/tcp \
  -p 8324:8324/tcp \
  -p 32469:32469/tcp \
  -p 1900:1900/udp \
  -p 32410:32410/udp \
  -p 32412:32412/udp \
  -p 32413:32413/udp \
  -p 32414:32414/udp \
  -e TZ="Asia/Shanghai" \
  -e PLEX_CLAIM="plex_clam_code" \
  -e ADVERTISE_IP="http://ip:32400/" \
  -e PUID=1000 \
  -e PGID=1000 \
  -v /mnt/storatge/plex/database:/config \
  -v /mnt/storatge/plex/transcode:/transcode \
  -v /mnt/media:/data \
  plexinc/pms-docker

plex_clam的获取页面:https://www.plex.tv/zh/claim/

Tip
plex并不是开源的媒体库软件,其账户管理方式需要在官网注册账号,plex_clam_code通过账号获取

字幕篇

下载资源过程中可能存在部分影片没有内嵌字幕,如果是外语,理解起来难以。配置字幕服务器可以解决这个问题

展开

部署

docker run -d \
  --name=bazarr \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Asia/Shanghai \
  -p 6767:6767 \
  -v /mnt/storage/bazarr-config:/config \
  -v /mnt/media/movies:/movies \
  -v /mnt/media/tv:/tv \
  -v /mnt/media/anime:/anime \
  --restart unless-stopped \
  lscr.io/linuxserver/bazarr:latest

设置

bazarr中的大体设置基本与radarr及sonarr一致

image

不同的地方在于有三处需要设置api-key 其中sonarr和radarr的apikey均可以从页面中获取,而字幕下载的api-key需要从对应的字幕网站上注册账号获取,我这里用的是射手网(伪)的,对应注册连接在文内

image

参考资料

  1. Rocky linux 8 docker安装及基本使用【精华极简】
  2. kuboard-spray文档
  3. Kuboard文档
  4. 高阶教程-追剧全流程自动化
Loading comments...