月度归档:2023年01月

搭建 Jellyfin,影视媒体平台,DIY一条龙教程,安装部署使用 2023-01-15

前缀、文档修改记录

2023-01-15 初始化编辑此文章
2024-01-05 更新需要走代理的域名规则,主要为了刮削
2024-03-21 更新扩展SATA的内容,更新检索视频的内容,更新显卡的内容,以便服务端解码转码。

段落1、需求描述

搭建Jellyfin,影视媒体平台,自己看美剧、泰剧、日剧、韩剧,未删减版本,不求人,1080P/4K资源,统统可以。

搭建的资源,在自己的家里的私网,不对外开放。家里如果有公网IP,或者走云服务器转发,也就可以在公网访问到自己的影视资源了。(不推荐搭建后,给公众开放,这个版权问题,大家稍微注意一下)

Jellyfin,是全平台支持的,苹果、安卓、计算机PC、电视,都是有客户端软件的。

效果图:

段落2、硬件配置

我这里选择的架构是硬件直接安装Linux,然后直接部署Jellyfin,我没有选用Docker架构方式,后续的硬件直通问题,后续想要加独立显卡,也简单。使用该方式,对于增加存储盘,也非常简单。对CPU的利用率也最大。

Jellyfin 影视平台 规格选型如下:

  • 长城电源 300W * 1
  • 机箱 多盘位机箱 * 1
  • 主板 B75 含6个板载SATA口 * 1
  • 处理器 i5 3470 * 1
  • 内存 12GB
  • 硬盘供电线 1分5 SATA电源线 * 2
  • 硬盘SATA数据线 * 10
  • 系统盘 SSD 240GB * 1 , Debian 11
  • 缓存盘 SSD 1TB * 1
  • 存储盘 东芝 4TB * 1 ,利旧
  • 存储盘 西数 12TB 氮气盘 * 2
  • 1050TI 显卡 * 1
  • 公网 IP,带宽 Nginx + HTTPS/TLS * 1
  • 软件,BT下载 Transmission * 1
  • 软件,影视平台 Jellyfin * 1
  • 软件,削刮器 TinyMediaManager * 1

段落3、硬件组装,基础Linux系统安装

这个没啥说的,就是电脑台式机的组装而已,板载6个SATA口,注意一下,一般SATA0编号的,是连接系统盘。其他的,就是连接缓存盘,存储盘。

组装台式机,需要一定的动手能力,各位看DIY 一条龙教程的,量力而行。

操作系统的安装,也比较简单,我这里,就安装最常规安装Debian 11操作系统。你们也可以选择自己喜欢的Linux系统发行版本。

硬盘12TB格式化,选用GPT分区

对于磁盘的挂载,参考我 Ubuntu/Debian 的Linux环境,格式化超过2TB的磁盘 2022-4-24 这个教程,使用parted对磁盘格式化,我这里都是单盘挂载,让容量最大化,不使用RAID,你们对于磁盘的格式化,是否组RAID的架构,酌情考虑。

截至2024-03-21,更新此页博客的时间,我这台单机跑的磁盘容量,已经50多个TB了,共计存放了1000+电影,1800+电视剧,2300+音乐,因为都是这些影视文件,不是重要数据,不做RAID,硬盘真坏掉,也就更换硬盘就是了,没啥遗憾的。

硬盘,在主板SATA口全部用完的情况下,我用的这个PCIx1的4口SATA扩展的,供电用大4Pin转15Pin路的供电。

段落4、安装部署 Jellyfin

参考 https://jellyfin.org/docs/general/installation 这个是Jellyfin官方的安装指导,不管是群晖、Windows/Linux 或者 Docker方式的安装,都建议先看一看官方的安装知道文档,这个比任何其他文档都要靠谱。

由于我安装的是Debian 11 操作系统,这里就可以到官方教程的Debian位置

Debian 11,在添加Jellyfin源的地方,有2个方式,如果用extrepo方式,就不必1到3步骤编号

添加源

root@server:~# apt update
root@server:~# apt install extrepo
root@server:~# extrepo enable jellyfin

# 1
root@server:~# apt update
root@server:~# apt install curl gnupg

# 2
root@server:~# mkdir /etc/apt/keyrings
root@server:~# curl -fsSL https://repo.jellyfin.org/$( awk -F'=' '/^ID=/{ print $NF }' /etc/os-release )/jellyfin_team.gpg.key | gpg --dearmor -o /etc/apt/keyrings/jellyfin.gpg

# 3 
root@server:~# cat <<EOF | tee /etc/apt/sources.list.d/jellyfin.sources
Types: deb
URIs: https://repo.jellyfin.org/$( awk -F'=' '/^ID=/{ print $NF }' /etc/os-release )
Suites: $( awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release )
Components: main
Architectures: $( dpkg --print-architecture )
Signed-By: /etc/apt/keyrings/jellyfin.gpg
EOF

添加源后,就可以更新,安装Jellyfin

# 4
root@server:~# apt update
root@server:~# apt install jellyfin

# 5  重启Jellyfin
root@server:~# systemctl restart jellyfin

# 6  关闭Jellyfin
root@server:~# systemctl stop jellyfin

# 7  启动Jellyfin
root@server:~# systemctl start jellyfin

# 8  开机启动Jellyfin
root@server:~# systemctl enable jellyfin

安装后,启动Jellyfin,能在Linux上,看到对应业务端口 8096的监听

然后,就可以通过 http://IP地址:8096/ 访问jellyfin了。

段落5、初始化Jellyfin

登录Jellyfin,设置语言为 汉语(简体),设置登录Jellyfin的用户名,密码

首选无数据语言的语言选“Chinese”,国家/地区选择“People’s Republic of China”

设置远程访问两个都打勾

登录进入页面后,点击右上方的小头像,进入字幕,字幕语言偏好:Chinese简体中文,字幕模式:默认,烧录字幕:全部。

段落6、添加影视媒体资源

点击左上角三横线菜单,选择控制台,选择媒体库,选择加号+添加影视媒体。

我这里,就添加一个电视剧文件夹,一个电影文件夹。

其中,如下图的,如果是电影,文件夹,就选中对应磁盘上的电影目录,可以选中多个磁盘上,对应的电影目录。简而言之,就是,一个电影分类,可以从多个文件夹里提取资源清单。

还有下面的勾选框,基本除了最后2个,都勾上。

段落7、关于刮削

刮削,其实可以自动的,主要看你电影名字的命名,电视剧文件夹的命名。还有,刮削的几个源网站,基本都是被BLOCK的,所以,你需要一个Nice的网络环境,才可以正常刮削影视封面,专辑信息。

如下的域名,最好都把它们加入到软路由的代理里面。如果没有条件的,就增加到jellyfin的Linux主机hosts文件里。

repo.jellyfin.org
jellyfin.org
imdb.com
media-amazon.com
www.imdb.com
themoviedb.org
zap2it.com
bootstrapcdn.com
tmsimg.com
api.themoviedb.org
image.tmdb.org
tmdb.org
trakt.tv

文件命名方式如下,就可以自动刮削了

电影名称-年份.mp4

一般,遇到错误的刮削,很常见,可以在视频/电视剧,选择”识别”,输入该电影的名称或imdb里面的编号,进行人工查找,更新削刮信息。

如果遇到重名的,封面不同的,可以根据IMDB的ID进行检索,比如下图这部韩剧,用tt29311421这个参数,可以找到唯一的IMDB信息

在XX电视剧/识别/IMDB ID这个参数位置,检索tt29311421,即可

如果影视,特别一些短剧,没有被IMDB的收录,或其他错误,就可以自己上传封面,修改年份,修改完成后,记得锁定资源的刮削信息,勾选”锁定此项目防止改动”。

段落8、关于公网映射

配置Nginx的反向代理,需要修改配置DNS指向,配置域名证书,在路由器上配置端口转发到内部的IP端口即可。

访问 https://域名:端口/

server {
    listen 443 ssl;
    server_name 你的域名;

    client_max_body_size 100M;


    ssl_certificate /root/certs/你的域名/fullchain.cer;
    ssl_certificate_key /root/certs/你的域名/你的域名.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
    ssl_prefer_server_ciphers on;    




    location / {
        proxy_pass http://127.0.0.1:8096;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Protocol $scheme;
        proxy_set_header X-Forwarded-Host $http_host;

        # Disable buffering when the nginx proxy gets very resource heavy upon streaming
        proxy_buffering off;
    }

    location = /web/ {
        proxy_pass http://127.0.0.1:8096/web/index.html;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Protocol $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
    }

    location /socket {
        proxy_pass http://127.0.0.1:8096;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Protocol $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
    }
}

段落9、增加显卡,满足服务端解码的需求

当今,BT/PT影视站点,已经越来越多的4K视频资源了,此时台式机里面这颗桌面级旧CPU(Intel Core i5-3470 CPU @ 3.20GHz,各位垃圾佬勿嘲笑),已经无法满足解码4K视频的能力,CPU软解码会让CPU跑满负载,着实难为它了,后来思来想去,在满足省电费,低价,地板级满足解码4K,给设备补了一张显卡(GeForce GTX 1050 Ti @ 75W)。

买这种旧卡,没什么说的,直接插主板的PCI插槽即可。

// 增加apt源
// Debian Sid   /etc/apt/sources.list中增加如下的一行内容
# deb http://deb.debian.org/debian/ sid main contrib non-free non-free-firmware

// 安装驱动(一般需要重启)
# apt update
# apt install nvidia-driver firmware-misc-nonfree

// 测试GPU是否正常工作,如果如下图显示的,则表示正常工作
# nvidia-smi

NVIDIA-SMI 525.147.05 Driver Version: 525.147.05 CUDA Version: 12.0

同步需要做的是,在Jellyfin的WEB页面,控制台/播放/转码,选择”Nvidia NVENC”

同时,要注意,”FFmpeg 路径” 这个参数,选择的ffmpeg,必须为支持英伟达CUDA的版本

使用命令ffmpeg无参数运行,可以明显看到有CUDA参数,如图” –enable-cuda –enable-cuda-llvm –enable-cuvid –enable-nvdec –enable-nvenc,则表示,你选择的这个ffmpeg是正确的,这个务必要注意

如果ffmpeg版本正确,在需要转码的设备播放视频时候,通过nvidia-smi命令,可以看到GPU解码并占了解码带宽,有对应的程序。

如下图,可看到470MB/4096MB,被占了大概500MB的显存,下方是ffmpeg进程号240848。

如果ffmpeg版本不对,可以参考jellyfin官方,对于英伟达显卡支持的页面说明

https://jellyfin.org/docs/general/administration/hardware-acceleration/nvidia

安装它官方支持的ffmpeg大致步骤如下

9.1 确保官方的源已经添加到sources.list

// 增加apt源
// Debian Sid   /etc/apt/sources.list中增加如下的一行内容
# deb http://deb.debian.org/debian/ sid main contrib non-free non-free-firmware

9.2 安装jellyfin-ffmpeg5这个包

# apt update 
# apt install -y jellyfin-ffmpeg5

9.3 安装对应系统版本的驱动

// Debian
# apt update
# apt install -y libnvcuvid1 libnvidia-encode1

// Ubuntu
# apt update 
# apt install -y libnvidia-decode libnvidia-encode

操作完,一般显卡正常工作的,就可以支持显卡的硬件加速&服务端解码视频流了。

该章节补充于2024-3-21 21:00PM

附录1、视频讲解

1.1、搭建Jellyfin

1.2、修复字幕的框框问题

附录2、

博客内,所有教程为手打原创教程,如果技术教程对您有所帮助,欢迎打赏作者

对于博客内已提及的专业知识,如果需要技术指导,欢迎联系我,仅需支付工时费

Twitter: Dasmz

Youtube: @DasmzStudio

Donate
云乞讨

Proxmox Virtual Environment 配置双ISP上联的网络 2023-1-3

段落1、需求描述

在Proxmox Virtual Environment(以下简称PVE)环境中,除了当前管理网络,增加了一个网卡,接入另一个网络,以后,各个业务系统,可根据需求,选择默认的路由为某一个ISP运营商。

物理接网线:

整个PVE为单台台式机/工作站的独立环境,未配置PVE集群,故而,场景,还简单一点。

PVE 以太网卡1 — 网线 — 电信IP的路由器1(主管理PVE,管理地址)

PVE 以太网卡2 — 网线 — 联通IP的路由器2

假设,其中一个虚拟机VM,安装有Ubuntu 20.04 LTS,需要使用电信网络作为管理网络,使用联通网络为业务网络。

依据黑色加粗的需求,对PVE作出配置,登录PVE的WEB地址,进入数据中心内宿主机的网络选项

一般,初始时候,只有默认网络的桥接,这里我们需要对另一个桥接进行添加

创建 / Linux Bridge / 桥接端口 enp3s1 / 备注联通

完成添加的样子,PVE内,具备vmbr0(桥接电信网络),vmbr1(桥接联通网络)双ISP网络的能力了。

然后,就是对对应的虚拟机VM,增加网络设备

网络设备net1 ,桥接vmbr0,电信,限速5MB/s,管理网络

网络设备net0,桥接vmbr1,联通,限速30MB/s,业务网络

Linux系统内,按照我们需要的这个场景,还需要自定义一下路由表,让默认路由到 net0 联通网络,通过开机启动指定路由即可。

root@server:/etc/network/if-up.d# cat route.sh 
#!/bin/sh
# START
/sbin/ip  route del default via 电信网关IP地址 dev ens19  
/sbin/ip  route add default via 联通网关IP地址 dev ens18  
# END
root@server:/etc/network/if-up.d# 

# 其中,两个网关IP地址,需要自定义,按实际的来,网络在主机内部对应的名称,可能是ens18,ens19,ens3,ens5,eth0,eth1,根据实际来。

这样配置的好处是,即便是业务流量,在某个方向跑满带宽出现拥堵的场景,管理方向,永远可以保持一个空闲的可用状态。