# 大致逻辑
普通的挂载大家应该都会,alist
挂载115
网盘,然后通过使用rclone
采用webdav
协议将alist
挂载至本地,然后emby
设置媒体库文件即可。但这样有个问题,就是会默认反代115
的链接,而我在国内肯定直链是更快的,因而寻找并采用了emby2Alist
的方式。这是项目链接,原理大致为:nginx
端进行分流判断,如果是请求文件则直接302跳转至alist
端而不是走emby
端,而alist
的115
返回302
直链,这样就实现了。
搭建教程
前置环境需求
- 挂载了
115
网盘的alist
(此处称为a1
)。文件为已经刮削完成了的 rclone
使用webdav
挂载a1
至本地。- 正常配置并能正常识别
a1
里文件的emby
(此处称为e1
)。 - 将该项目克隆至本地。
修改emby2Alist
项目的文件
进入emby2Alist/nginx/conf.d
目录,修改constant.js
文件。
//e1的链接
const embyHost = "http://0.0.0.0:48072";
// rclone 的挂载目录, 例如将od, gd挂载到/mnt目录下: /mnt/onedrive /mnt/gd ,那么这里就填写 /mnt
// 通常配置一个远程挂载根路径就够了,默认非此路径开头文件将转给原始emby处理,不用重复填写至disableRedirectRule
// 如果没有挂载,全部使用strm文件,此项填[""],必须要是数组
const embyMountPath = ["/data/alldrive/115"];
// emby/jellyfin api key, 在emby/jellyfin后台设置
const embyApiKey = "111111111111111";
// 访问宿主机上5244端口的alist地址, 要注意iptables给容器放行端口。我因为宿主机的alist带路径,所以此处使用的不是5244的宿主机alist,而是另外起的一个alist docker的端口
const alistAddr = "http://0.0.0.0:3988";
// alist token, 在alist后台查看,同上的alist
const alistToken = "alist-XXXXXXXXX";
// 选填项,用不到保持默认即可
// alist公网地址, 用于需要alist server代理流量的情况, 按需填写
const alistPublicAddr = "http://0.0.0.0:3988";
启动nginx镜像
进入emby2Alist/docker
文件夹,如果不需要另起一个alist
来获取直链,则可以将alist
部分注释掉。
按个人需求修改完docker-compose.yml
之后运行docker-compose up -d
。默认起的nginx
镜像是端口8091
。此时emby
客户端访问http://IP:8091
登录并进入,然后尝试播放视频,如果播放拖动视频的时候服务器几乎没有速度,则证明直链转发成功。
进阶操作
由于海报图、nfo
之类的小文件每次都需要从115网盘下载然后读取,体验并不好,所以我产生了将这类小文件提前缓存到本地的想法,而又因为我对备份转移有需求,所以传统的软链接也就不再适用了。幸好找到了Auto_Symlink
这个项目。逻辑是一样的,将指定后缀的文件提前下载到对应目录,然后视频文件软链接指向实际挂载网盘的目录。
由于我的emby也是docker,所以我的云端硬盘挂载至auto_symlink的目录与云端硬盘挂载至emby的目录需要完全一致,这样软链接才能成功读取
Auto_Symlink
按官方配置即可,可参考我的docker-compose.yml
。
同步功能中的元数据模式
选择本地模式,这样能直接从挂载目录复制至刮削读取目录。
以及这样修改之后nginx
转发直链的部分也需要更改,按我本文的所有逻辑,const embyMountPath = ["/data/alldrive/115"];
需要修改为const embyMountPath = ["/cloud"];
;
同时docker
端的alist
也需要更改,原本挂载115
的路径为/115
,现在修改为/cloud/115
。
一些文件参考
emby的镜像docker-compose.yml
x86
---
version: "2.1"
services:
emby:
image: codion/emby_crack:4.7.6.0-X86
container_name: emby
volumes:
- ~/emby/config:/config
#- ~/emby/data/115:/data/115
- ~/emby/drive:/data/alldrive
- /root/embydrive:/cloud
ports:
- 48072:8096
arm64
---
version: "2.1"
services:
emby:
image: codion/emby_crack:4.7.6.0-ARM
container_name: emby
volumes:
- ~/emby/config:/config
#- ~/emby/data/115:/data/115
- ~/emby/drive:/data/alldrive
- /root/embydrive:/cloud
ports:
- 48072:8096
emby2Alist
的docker-compose.yml
因为我宿主机的alist
带了路径,所以我就另起了一个alist
的docker
。挂载的115配置要和原来的一模一样
version: '3.5'
services:
service.nginx:
image: nginx:latest
container_name: nginx-emby
# 更改为默认host网络,纠正流量标识,直接占用宿主机端口,docker层会禁用端口映射
network_mode: host
# 如果需要使用bridge(桥接)网络,请取消ports(端口映射)注释,并注释network_mode
# 端口映射规则为,宿主机端口:容器内部端口
# ports:
# - 8091:8091
volumes:
- ../nginx/nginx.conf:/etc/nginx/nginx.conf
- ../nginx/conf.d:/etc/nginx/conf.d
- ../nginx/embyCache:/var/cache/nginx/emby
- ../nginx/log:/var/log/nginx
restart: always
depends_on:
- service.ali
service.ali:
image: xhofe/alist:latest
container_name: alist
ports:
- 3988:5244
volumes:
- ./alist:/opt/alist/data
restart: always
# service.ali-webdav:
# image: messense/aliyundrive-webdav
# container_name: ali-webdav
# ports:
# - 8080:8080
# volumes:
# - ./aliyundrive-webdav/:/etc/aliyundrive-webdav/
# environment:
# - REFRESH_TOKEN=1111111111111aaaaaaaaaa
# - WEBDAV_AUTH_USER=admin
# - WEBDAV_AUTH_PASSWORD=admin
# restart: always
rclone
挂载
rclone.conf
我的带了alist路径,如果没有带路径的就应该是127.0.0.1:5244/dav
[alist]
type = webdav
url = http://127.0.0.1:5244/alist/dav
vendor = Other
user = admin
pass = XXX
embyalist.service
[Unit]
Description=Rclone Emby
AssertPathIsDirectory=/root/emby
After=network-online.target alist.service
[Service]
Type=simple
ExecStart=/usr/bin/rclone mount alist: /root/emby/drive/115 --allow-other --allow-non-empty --dir-cache-time 24h --cache-dir=/root/cache --vfs-cache-mode full --buffer-size 32M --vfs-read-ahead 512M --vfs-read-chunk-size 64M --vfs-read-chunk-size-limit off --vfs-cache-max-size 3G --low-level-retries 200 --read-only
ExecStop=/bin/fusermount -u /root/emby/drive/115
Restart=on-abort
User=root
[Install]
WantedBy=default.target
Auto_Symlink
#version: '3.8'
services:
# auto_symlink:
image: shenxianmq/auto_symlink:latest
container_name: auto_symlink
environment:
- TZ=Asia/Shanghai
volumes:
# 左边为实际目录,右边与emby挂载到的视频目录完全一致
- /root/embydrive:/cloud
# 左边为emby刮削读取的目录
- /root/emby/drive/115:/Media
- ./config:/app/config
ports:
- "48315:8095"
# user: "0:0"
restart: unless-stopped