一文讲清本地部署emby+cd2+alist+strm+302重定向,实现畅快观影(完善配置中)

1 alist

1.1 作用

  • 网盘挂载,可通过webdav的方式访问
  • 网盘302重定向

1.2 docker部署

mkdir -p /media/docker/alist
docker run -d \
--restart=always \
-v /volume2/docker_dir/alist:/opt/alist/data \
-p 5244:5244 \
-p 6800:6800 \
-e PUID=0 \
-e PGID=0 \
-e UMASK=022 \
--name=alist \
-e TZ=Asia/Shanghai \
xhofe/alist-aria2:latest

2 cd2

2.1 作用

  • 网盘挂载,可通过本地映射路径访问(这里也可以用rclone,但是据其他博主说rclone的速度会比cd2慢)
  • 套娃挂载alist的webdav,以支持cd2暂不支持的网盘(如夸克网盘等)

2.2 docker部署

注意点:
这里映射了两个媒体目录,一个是cloud_media,一个是webdav_media

  • cloud_media用于挂载支持302重定向的网盘,如115,天翼等;
  • webdav_media用于挂载如夸克网盘等;
    docker部署前请确认docker开启了fuse
version: '3'

services:
  clouddrive:
    image: cloudnas/clouddrive2
    container_name: clouddrive
    restart: unless-stopped
    environment:
      - CLOUDDRIVE_HOME=/Config
    volumes:
      - /volume2/Media/mp_downloads:/CloudNAS:shared
      - /volume2/Media/cloud_media:/media:shared
      - /volume2/Media/webdav_media:/webdav_media:shared
      - /volume1/docker_dir/clouddrive2:/Config
    ports:
      - "8097:19798"
    pid: "host"
    privileged: true
    devices:
      - /dev/fuse:/dev/fuse

3 auto_symlink

3.1 作用

  • 实时监控目录变化,扫盘,入库

3.2 docker部署

需注意:

  • volume内的宿主机和容器路径最好一一对应,否则可能出现emby内软链接跳转失败的问题
  • 支持302重定向的网盘和其他网盘的根路径要分开,否则在emby播放时,其他网盘的资源会无法播放
version: '3'

services:
  auto_symlink:
    image: shenxianmq/auto_symlink:latest
    container_name: auto_symlink
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - /volume2/Media/cloud_media:/volume2/Media/cloud_media:rslave # cd2挂载目录
      - /volume2/Media/webdav_media:/volume2/Media/webdav_media:rslave
	  - /volume2/Media/strm:/volume2/Media/strm # emby扫描媒体目录
	  - /volume2/Media/webdav_strm:/volume2/Media/webdav_strm 
      - /volume1/docker_dir/auto_symlink/config:/app/config
    ports:
      - "8095:8095"
    user: "0:0"
    restart: unless-stopped

3.3 网页配置

4 emby

4.1 docker部署

需注意:

  • emby媒体库只需添加包含strm的相关文件夹
  • emby不要开启转码
version: '3'

services:
  emby-server:
    image: amilys/embyserver
    container_name: emby-local
    network_mode: bridge # DLNA and Wake-on-Lan需要bridge
    environment:
      - UID=0 # 设置容器用户 ID 为 0 (通常是 root)
      - GID=0 # 设置容器组 ID 为 0 (通常是 root)
      - GIDLIST=0 # 设置容器组 ID 列表为 0
      - TZ=Asia/Shanghai # 设置容器的时区为亚洲/上海
    devices:
      - /dev/dri:/dev/dri             # 将主机的 /dev/dri 设备挂载到容器 开启硬解
    ports:
      - 8096:8096 # 对外访问端口
    restart: unless-stopped
    privileged: true
    volumes:
      - /volume1/docker_dir/emby_local/config:/config
      - /volume2/Media/cloud_media:/volume2/Media/cloud_media:rslave
      - /volume2/Media/local_media:/volume2/Media/local_media
      - /volume2/Media/webdav_media:/volume2/Media/webdav_media:rslave
      - /volume2/Media/webdav_strm:/webdav_strm # 其他网盘的strm(夸克等)
      - /volume2/Media/strm:/strm # 支持302重定向的网盘strm(115,天翼等)

5 emby2alist

5.1 作用

  • 通过nginx重定向资源地址,将原先strm文件指向的挂载路径如/volume2/Media/cloud_media/115 直接指向 alist路径下的/115,从而实现302重定向网盘资源
  • 由于之前将两种网盘资源分开存放,这里只会匹配支持重定向网盘的根路径,其他网盘仍然会通过挂载在本地的/volume2/Media/webdav_media路径进行访问

5.2 部署

wget https://github.com/bpking1/embyExternalUrl/archive/refs/tags/v0.4.5.tar.gz
tar -zxvf v0.4.5.tar.gz
cd embyExternalUrl-v0.4.5/
cd emby2Alist

# modify nginx/conf.d/constant.js
# 参考下图1配置
# embyHost如果是本地docker部署的,就是图中的http://172.17.0.1:8096(端口自行确认)

# modify nginx/conf.d/config/constant-mount.js
# 参考下图2配置
# alistAddr如果是本地docker部署的,就是图中的http://172.17.0.1:5244(端口自行确认)

# modify nginx/conf.d/config/constant-pro.js
# 参考下图3配置
# 待替换路径需确认emby媒体库内资源路径和alist内的路径,填写多出来的部分(仅限支持302重定向的网盘资源)

nginx/conf.d/constant.js

nginx/conf.d/config/constant-mount.js

nginx/conf.d/config/constant-pro.js

5.3 常见问题

5.3.1 115资源无法播放

nginx-emby容器内日志如下:

[warn] 21#21: *155 js: redirect to: /d/115/xxx

5.3.1.1 原因

匹配到emby2alist里的115规则,并使用alist公网地址进行转发

5.3.1.2 临时解决方案

屏蔽位于constant-mount.jsclientSelfAlistRule中与115有关的规则

5.3.2 新增网盘后emby无法播放

问题描述:在上面的环境正常运转的情况下(emby启动后),新增了一个夸克盘通过alistcd2挂载到本地目录/volume2/Media/webdav_media,可以正常生成新的strm文件,emby也可以正常入库,但是无法播放,并提示无兼容的流。此时在emby中查看挂载在emby容器上的/volume2/Media/webdav_media路径,里面的夸克盘路径下是没有东西的

复现方式:

  • 在cd2内卸载之前的夸克盘挂载
  • 去emby内看路径/volume2/Media/webdav_media下是否已经没有文件夹
  • 在cd2内重新挂载夸克盘
  • 去emby内确认路径/volume2/Media/webdav_media下是否虽然有夸克盘的目录,但里面没东西

5.3.2.1 原因

这是因为在之前的步骤中,emby容器配置中与网盘相关的路径映射如cloud_media, webdav_media没有开启rslave模式,现已修正

5.3.2.2 解决方案

emby容器与网盘相关的路径挂载时开启rslave模式,详见4.1

以下操作可保留原先所有配置和刮削记录

# add :rslave to docker-compose.yml 按照4.1emby部署的compose文件更改
docker stop emby_container # emby_container替换成自己的容器名
docker rm emby_container # emby_container替换成自己的容器名
docker-compose up -d # 重新部署

5.3.3 emby提示无兼容的流

5.3.3.1 原因

该问题一般由指定路径下的文件不存在引起,可以检查下网盘是否正确挂载


参考教程:
佬友邱小晨的blog

Auto_Symlink 常见问题

168 个赞

感谢大佬分享

5 个赞

mark,后续看

3 个赞

大帅哥感谢大佬分享

2 个赞

为啥不整体弄个docker-compse,然后指定env,编写所有自定义参数呢。

4 个赞

感谢分享。很好的教程。请问一下整个思路都是网盘302重定向,应该不需要占用很多本地存储资源,如果vps部署应该也无需占用vps流量,为什么你要用aria2?扫库时你全部下载到本地了吗?

1 个赞

其实没必要用aria2,这里可以改成a list镜像

1 个赞

感谢大佬分享

1 个赞

这需要多大配置的鸡?

2 个赞

目前用的2C4G还是可以的,一会看下资源消耗,看看2C2G是不是也可以,带宽不需要多大的

12 个赞

吃灰鸡没这么大的 :joy:

4 个赞

mark mark

那可以本地部署的,本地体验是一样的

整个部署下来要多大磁盘空间,我想部署在远端vps,用302重定向,播放走网盘,不要消耗vps流量。

2c2g有点吃不消,还有就是emby2alist首次播放加载很慢…

基本上就是docker的服务占用磁盘,可能20G之内都够了

首次播放加载慢的问题我这好像还好,不过这两天体验下来感觉还需要精细的配一下cd2和auto_strmlink

我vps已经有本地部署的Nginx,已经承载了很多业务反代。不能再部署docker版Nginx,不知道怎么改造直接使用当前的Nginx。

或许可以参考引用文章内的映射关系,对比配置文件进行修改

讲的确实很清楚:+1: