阅读本文需要有一定的Linux、Docker等经验。什么?你不懂,那你点开干什么 那就折腾起来,学起来

成品展示

  • 我的豆瓣/IMDb影库-点击进入
  • 99%上榜影片均可在我的网站上观看(天朝特色,容易和谐)
  • 片源大部分为1080P HEVC,服务端不解码,请使用外部播放器
  • 推荐下载使用Potplayer、VLC、MX Player、Emby播放器

毒师镇楼

双榜入选,不同价值观的共同爱好doge

希望让你自由

安装 Alist

官方文档很详细了

配置阿里云盘Open很详细了

注:WebDAV 策略 选择 本地 可以直接通过emby刮削元数据及海报到阿里云盘

安装 Rclone

1
2
3
4
5
6
7
8
#安装 fuse3(防止报错,新版Rclone需要)
apt install fuse3
#安装 Rclone
curl https://rclone.org/install.sh | sudo bash
#配置
rclone config
#创建挂载目录(必须自行创建,否则启动rclone报错)
mkdir -p /mnt/aliyunpan

rclone config 新建配置,选择 webdav 进行配置即可

自行查看下面文章进行配置

群晖 / Linux 挂载阿里云盘实现 Emby 播放,打造属于自己的家庭影院!

挂载命令

1
rclone mount aliyunpan: /mnt/aliyunpan --use-mmap --umask 000 --default-permissions --no-check-certificate --allow-other --allow-non-empty --dir-cache-time 4h --cache-dir=/mnt/cache --vfs-cache-mode writes --buffer-size 32M --vfs-read-ahead 32M --vfs-read-chunk-size 64M --vfs-cache-max-size 1G --daemon
  • aliyunpan: /mnt/aliyunpan:挂载远程存储的名称及挂载远程存储的本地目录。
  • --use-mmap:使用内存映射加速文件读取。
  • --umask 000:设置文件和目录的默认权限掩码(000 所有用户都有读、写和执行权限)。
  • --default-permissions:使用默认文件权限,忽略远程权限。
  • --no-check-certificate:不检查SSL证书的有效性。
  • --allow-other:允许除挂载所有者外的其他用户访问挂载的文件系统。
  • --allow-non-empty:允许挂载到非空目录。
  • --dir-cache-time 4h:设置目录缓存的有效时间,减少对远程服务器的请求。
  • --vfs-cache-max-age 1h: 设置虚拟文件系统(VFS)缓存中文件的最大存活时间。***
  • --cache-dir=/home/cache:设置缓存目录的位置。
  • --vfs-cache-mode full:设置虚拟文件系统(VFS)缓存模式为完全缓存。
  • --buffer-size 32M:设置每个打开文件的缓冲区大小。
  • --vfs-read-ahead 32M:预读取数据量的大小,提高读取性能。
  • --vfs-read-chunk-size 64M:设置读取数据块的大小。
  • --vfs-read-chunk-size-limit off:设置读取块大小的上限。***
  • --vfs-cache-max-size 1G:设置VFS缓存的最大空间。
  • --low-level-retries 10:设置遇到错误时低级别重试的次数。***
  • --poll-interval 1m:设置轮询检查远程更新的时间间隔。***
  • --config /root/.config/rclone/rclone.conf:指定 rclone 配置文件的位置。
  • --daemon:在后台以守护进程方式运行

添加挂载守护进程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 普通单位文件(只能创建一个服务实例),单挂载
cat > /etc/systemd/system/rclone.service <<EOF
[Unit]
Description=Rclone Mount Service
AssertPathIsDirectory=/mnt/aliyunpan
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/rclone mount aliyunpan: /mnt/aliyunpan --use-mmap --umask 000 --default-permissions --no-check-certificate --allow-other --allow-non-empty --dir-cache-time 4h --cache-dir=/mnt/cache --vfs-cache-mode writes --buffer-size 32M --vfs-read-ahead 32M --vfs-read-chunk-size 64M --vfs-cache-max-size 1G
ExecStop=/bin/fusermount -qzu /mnt/aliyunpan
Restart=on-failure
User=root

[Install]
WantedBy=default.target
EOF

# 启动服务实例成功再启用自动启动
systemctl start rclone && systemctl enable rclone
# 停止服务实例
systemctl stop rclone
# 重启服务实例
systemctl restart rclone
# 查看服务状态
systemctl status rclone
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 模板单位文件(可以创建多个服务实例),多挂载
cat > /etc/systemd/system/rclone@.service <<EOF
[Unit]
Description=Rclone Mount Service for %i
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/rclone mount %i: /mnt/%i --use-mmap --umask 000 --default-permissions --no-check-certificate --allow-other --allow-non-empty --dir-cache-time 4h --cache-dir=/mnt/cache --vfs-cache-mode writes --buffer-size 32M --vfs-read-ahead 32M --vfs-read-chunk-size 64M --vfs-cache-max-size 1G
ExecStop=/bin/fusermount -qzu /mnt/%i
Restart=on-failure
User=root

[Install]
WantedBy=default.target
EOF

# 启动服务实例
systemctl start rclone@挂载的名称
# 使服务实例在系统启动时自动启动
systemctl enable rclone@aliyunpan
# 停止服务实例
systemctl stop rclone@aliyunpan
# 重启服务实例
systemctl restart rclone@aliyunpan
# 查看服务状态
systemctl status rclone@aliyunpan

安装 Emby

推荐使用Docker安装

amilys美化版(本文采用并推荐)

lovechen开心版(已停止更新)

阿里云盘直链版安装参考文章

阿里云盘直链

目前本地 webdav策略为兼容性最好的方式,在 emby 中观看视频时,是先从 webdav 下载到本地再推流到 emby 播放的,所以走的是服务器的流量
302 重定向能够获取到阿里云盘的直链,但是无法使用 emby 进行刮削。

如果只是为了方便观看,可以使用 302 重定向模式,然后用 nplayer 挂载 webdav,这样走的就是阿里云官方的流量了,4K 不卡

为了方便emby可以直接刮削数据到阿里云盘,采用本地 webdav并使用脚本 bpking1/embyExternalUrl/emby2Alist转直链,项目提供了Docker容器直接部署,但本文采用安装版Nginx+Emby(Docker)方式部署,如果你不太懂Nginx,建议选择Docker版本,参考教程

注:下文为Nginx+Emby(Docker)方式部署,需要有一定的Nginx经验

安装Njs模块

1
2
3
4
5
6
7
8
9
10
11
12
# 如果已经安装了Nginx,添加njs模块
apt update
apt install nginx-module-njs
## 在nginx.conf文件中添加
load_module modules/ngx_http_js_module.so;
## 重启nginx
systemctl restart nginx

# 编译安装Nginx时包含njs模块
./configure --add-module=实际的njs模块源代码路径
make
sudo make install

Nginx配置

下载emby2Alist的nginx目录,根据实际情况更改conf.d里的emby.conf和constant.js文件,放入Nginx的conf.d目录并重启Nginx

1
2
# 直链播放日志查看
tail -f -n 10 /var/log/nginx/access.log /var/log/nginx/error.log | grep js:

注:在constant.js文件中有一行配置为const embyMountPath = [“/data”];

如果采用Docker版的Emby,路径应该为容器内的路径,而不是宿主机的路径

Emby配置

  • 在emby设置中将 用户 –> 播放 允许转码关掉
  • 在emby设置中将 转码 –> 启用硬件加速 关掉

OverlayFS 可选优化

由于元数据和图片放在网盘上,加载速度会比放在本地慢一些

所以我们可以使用OverlayFS将图片和元数据文件储存到本地

OverlayFS(Overlay File System)是一种联合文件系统,它允许将不同目录挂载到同一个虚拟文件系统下,使得多个文件系统的内容可以被同时访问。OverlayFS特别适用于轻量级的容器虚拟化技术,例如Docker和Podman,因为它可以在不复制整个文件系统的情况下,为每个容器提供一个独立的视图。

OverlayFS的工作原理基于下面几个概念:

  1. 底层(Lower Layer):这是只读层,可以包含一个或多个只读目录。这些目录被叠加在一起,形成底层文件系统。
  2. 上层(Upper Layer):这是一个可写层,位于底层之上。所有对文件系统的写操作都会发生在这一层。
  3. 工作目录(Workdir):OverlayFS要求指定一个工作目录,用于存放一些必要的元数据和临时文件。工作目录必须和上层在同一个文件系统上。
  4. 合并层(Merged Layer):这是上层和底层合并后对用户可见的文件系统。当用户查看合并层时,他们可以看到底层的文件和目录,以及上层的任何更改或新增文件。

配置OverlayFS

1
2
# 创建目录
mkdir /mnt/ali-upper /mnt/ali-work /mnt/ali
  • ali-upper:上层目录,可写层
  • ali-work: 工作目录,存储临时文件
  • ali: 合并出的新目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 第一次运行建议加上--dry-run确保指令没有出错,同时可以查看图片和nfo总共的文件大小方便分配空间(仅用于测试命令是否正确,不会真正进行任何文件操作)
rclone copy aliyunpan:/movie /mnt/ali-upper/movie --include "*.{png,jpg,nfo}" -P -v --dry-run

# 方式一(命令指定筛选规则)
rclone copy aliyunpan:/movie /mnt/ali-upper/movie --include "*.{png,jpg,nfo}" -P -v --transfers=20

# 方式二(外部文件指定筛选规则)
cat > emby.txt <<EOF
+ *.jpg
+ *.png
+ *.nfo
- *
EOF

rclone copy aliyunpan:/movie /mnt/ali-upper/movie --filter-from emby.txt -P -v --transfers=20
  • aliyunpan:/movie: 这是源路径,也就是你rclone配置的路径。
  • /mnt/ali-upper/movie: 这是目的地路径,OverlayFS的上层目录。
  • -P: 这个参数用于显示进度信息,包括当前传输的百分比、速度和剩余时间。
  • -v: 这个参数用于增加命令的冗长输出(verbose),提供更多的详细信息,有助于调试或了解命令的执行情况。
  • --include "*.{png,jpg,nfo}": 这个参数指定一个匹配模式,只有符合该模式的文件才会被复制。
  • --filter-from emby.txt: 这个参数指定一个文件,按照文件的过滤规则复制。
  • --transfers=20: 这个参数用于指定同时进行的最大文件传输数目。
  • --dry-run: 模拟执行命令并展示详细信息,但不会真正地进行任何文件操作。

挂载OverlayFS命令

1
mount -t overlay overlay -o lowerdir=/mnt/aliyunpan,upperdir=/mnt/ali-upper,workdir=/mnt/ali-work /mnt/ali
  • lowerdir=/mnt/aliyunpan: 代表底层目录,只读层,进行读操作优先读取上层目录,读不到的才会读这里(比如视频文件)。
  • upperdir=/mnt/ali-upper:代表上层目录,可写层,所有对文件的更改在这个目录中进行。
  • workdir=/mnt/ali-work:代表工作目录,存储临时文件,用于 OverlayFS 的内部需要,必须和 upperdir 在同一个文件系统上。
  • /mnt/ali:合并出的新目录,也就是我们的挂载点,后续对该目录进行访问。

注意

如果使用该方案优化,请将Docker宿主机映射路径改为合并新目录的路径,也就是/mnt/ali,而不是使用rclone挂载路径

其他

本文是基于自己的阿里云盘资源搭建Emby影库,如果不想自己查找维护资源或者希望资源多而全的,可搭建小雅Alist,相关教程或资源已在下方

参考引用