NAS搭建家庭影视库:Jellyfin+Docker从零开始

📝 本文基于作者实际部署经验,已在群晖 NAS 上成功部署 Transmission、Jellyfin、NASTool 等工具,实现自动下载、刮削、播放全流程。
在家准备搭建个影视库,之前都是七拼八凑,这次完整的做个教程。全部采用docker的方式部署,由于国内镜像源被封了,推荐使用轩辕镜像
我这里选用的工具如下,括号内的是平替:
- 下载工具——Transmission (qbittorrent)
- 视频播放器——emby (jellyfin)
- 媒体工具——nastool (moviepliot)
- 资源搜索工具——jacktt
我用的是黑群晖(新手建议先看玩转群晖——入门看这一篇足够了了解基础操作),共享目录主要就是video,用来存储影视资源。里面会进行电影和电视的分类,然后link文件夹是用来存储整理过后的媒体数据,和外层的目录一致即可。(ps:link文件夹主要是因为pt站,要进行保种不能变名称,所以整理后通过硬链接的方式放到link下,不影响原本的下载文件)
video文件夹的层级
video:.├─movie #电影下载目录├─tv #电视剧下载目录└─link ├─movie #电影资源访问目录 └─tv #电视剧资源访问目录为了比较好的权限控制,我们先创建两个群组,一个是downloads,另一个是mediaSharers。然后再创建downloader和mediaShare用户,在两个群组下。他们的权限都是对video进行增加和删除。
1.下载器
第一步是先下载资源,这里介绍两种下载器的docker安装。直接用downloader用户进行安装,接下来你要存放种子的文件夹都给他读写权限,包括docker底下安装软件的文件夹也给他读写权限。
1.1 Transmission
这里我采用docker-compose安装,介绍下安装文件
version: "3.3"services: transmission: image: docker.1panel.live/linuxserver/transmission #镜像版本 container_name: transmission #容器名称 environment: - PUID=1000 #downloader的用户id(ssh下使用命令'id downloader获取') - PGID=1000 #downloader的群组id - TZ=Asia/Shanghai #时区 - USER=admin #账号 - PASS=****** #密码(请自行修改) volumes: - /docker/transmission/config:/config #配置文件夹 - /video:/video #下载文件夹,建议统一使用video,避免后续媒体服务器访问异常 ports: - 9091:9091 - 51413:51413 - 51413:51413/udp restart: unless-stopped启动完就安装完了,但是界面太丑了根本没法用,去github上下个皮肤,然后放到对应的目录即可。下载传送门

我这里介绍命令行操作,先连接终端,然后输入下列命令。
#进入目录cd /html
#下载皮肤文件wget https://github.com/ronggang/transmission-web-control/archive/refs/tags/v1.6.1-update1.tar.gz
#解压tar -zxvf v1.6.1-update1.tar.gz
#进入皮肤文件夹,复制src下的所有文件放到html下面cd transmission-web-control-1.6.1-update1/src/cp -rd * /html安装完成,打开上方的设置齿轮图标,选中Base栏,下方的Language改成中文,然后save保存即可。
1.2 qBittorrent
qb安装要注意以下几点:
- WEBUI_PORT要和你映射的端口改成一致,要不然会访问出现“Unauthorized”。然后新版本容器改成了随机密码,账户是admin,密码要去看下日志。
- TORRENTING_PORT端口不要用6881这类低端口,很多被封掉了。设置52000没有问题。记得要添加下tracker,网址:https://trackerslist.com/#/zh
---services: qbittorrent: image: linuxserver/qbittorrent:latest container_name: qbittorrent environment: - PUID=1028 - PGID=65536 - TZ=Asi/Shanghai - WEBUI_PORT=8086 - TORRENTING_PORT=52000 volumes: - /volume1/docker/qbittorrent/config:/config - /volume1/video:/video ports: - 8086:8086 - 52000:52000 - 52000:52000/udp restart: unless-stopped2.iyuu
实现qb下载,tr保种,然后绑定合作站点,后面moviesite就可以直接登录iyuu。
iyuu一定要注意把qb的种子下载路径映射进去,转种需要他。然后只要是你需要的下载路径也要一并映射进去,并且保持qb、tr、iyuu在容器内的路径名称一致,这样才不会出现找不到文件的情况。
转种:在计划任务里面,自己多设置几次测试下能不能成功,成功后再删除原来的种子。
---services: iyuu: image: iyuucn/iyuuplus:latest #镜像版本 container_name: iyuu #容器名称 volumes: - /volume1/docker/iyuu/config:/config #配置文件夹 - /volume1/docker/iyuu/data:/data - /volume1/Download:/Download - /volume1/video:/video - /volume1/docker/iyuu/logs:/var/log/nginx - /volume1/docker/qbittorrent/config/qBittorrent/BT_backup:/qb/BT_backup ports: - 8787:8787 - 3131:3131 restart: always3.媒体播放方案
下载器安装好了,现在我们安装个播放器。emby个人感觉更好用,就是ios端收费,并且官方版硬解也是付费解锁。jellyfin是基于emby某个版本后的开源软件,所有都是免费,使用人群也比较多。接下来我会介绍两种安装方法。
3.1 Emby
这里用docker-compose安装emby开心版,如果不采用这种安装方式就得用命令行先进行容器创建,因为要透传核显,界面化安装暂时不知道怎么设置,下面的jellyfin同理。
version: '3'services: emby: image: docker.1panel.live/zishuo/embyserver:latest container_name: happy-emby environment: #这里就是id xxx之后照着写 UID: 1035 GID: 100 GIDLIST: 100,65537 volumes: - /volume1/docker/happy-emby/config:/config - /volume1/docker/happy-emby/mnt/share1:/mnt/share1 - /volume1/docker/happy-emby/mnt/share2:/mnt/share2 - /volume1/vide:/video #影视资源 devices: - /dev/dri:/dev/dri #核显透传,为了硬解 ports: - "8098:8096" restart: unless-stopped映射完直接访问端口地址,进行配置就好,切换成中文一步一步往下就行
3.2 Jellyfin
docker下建议用nyanmisaka/jellyfin,免去使用官方版很多插件不足的情况,当然喜欢纯净版那就用官方的,安装没什么区别。
有个注意事项,如果你cpu比较旧,在镜像img那里换成latest-legacy的版本:即image: nyanmisaka/jellyfin
version: '3'services: jellyfin: image: docker.1panel.live/nyanmisaka/jellyfin:latest-legacy container_name: jellyfin user: "1032:65537" #用户权限,前面是用户id,后面是组id volumes: - /volume1/docker/jellyfin/config:/config - /volume1/docker/jellyfin/cache:/cache - /volume1/video:/media #视频目录 devices: - /dev/dri:/dev/dri #核显透传 ports: - "8097:8096" restart: unless-stopped然后下一步直接运行,等待一下,然后访问即可,不行就多刷新两下,启动需要时间。然后正常按照提示进行设置,注意下媒体库路径选择link里面的即可。
设置硬件解码:播放-硬件加速-选VAAP(intel用这个,兼容性比较强,具体根据你cpu型号决定) 后面保持默认即可,控制权限的话就是新建用户,给他不同的媒体库就好。
4.媒体工具 —— NASTool
下载器、播放器都有了,最后介绍媒体管理工具Nastool。建议下载2.9.1的未阉割版。 有几个坑:
- 官方的最新版本进去如果你没有pt站的用户,就用不了完整的功能。
- 官方的2.9.1下载部署完会自动升级,不提供别的内置索引器,对于想使用jackett,使用pt站搜资源就没法实现。
所以我这里最后选择下载了其他大神的2.9.1存档版本,19970688/nastools-bt。
version: '3.7'services: nas-tools: container_name: nas-tools image: 19970688/nastools-bt:latest ports: - "3001:3000" volumes: - /volume1/docker/nastools/config:/config - /volume1/video:/video #视频资源目录 environment: - PUID=1032 - PGID=65537 - UMASK=000 - NASTOOL_AUTO_UPDATE=false #关闭自动更新 restart: unless-stopped访问端口,默认账号密码:admin/password 接下来要开始配置NASTool,步骤比较多。
- 在基础设置里面,修改密码
- 增加TMDB密钥 网址在这里,直接去注册个。themoviedb(https://www.themoviedb.org/login)在右上角我的-账户设置-API-请求API密钥。这里选择developer开发者申请,全部填满唯一要注意的就是简介里面加上一句话:
Application summary please elaborate on how you plan to use our API- BT保种,基础设置-默认文件转移方式-改成硬链接,实现BT保种
- 设置媒体库,都设置link文件夹底下的目录。
- 新增目录同步,跟上述的类似,就是把真实目录的资源改名后同步到目的目录,依次设置电影和电视剧。根目录用video/movie,目的目录video/link/movie
- 配置下载器,点击下载器输入网址,输入账号密码,测试成功后点击完成。
- 配置媒体服务器,先进入emby/jellyfin控制台,找到API密钥后添加一个,然后回到nastool进行设置。
- 配置消息通知,试了企业微信这种,门槛有点高得有固定的公网ip。我这里只是用云服务的公网进行测试,介绍下流程:
- 先去企业微信注册一个账号,传送门
- 通过企业微信创建一个应用
- frp把你局域网里的nastool穿透出去
- 在nastool里面创建一个应用
- 企业微信进行回调配置
- 企业微信开放白名单
- nastool测试连接
企业微信端:我的企业,拉到最下面拿到企业id;
企业微信端:点击应用管理,创建一个应用;
Nastool端:新增一个消息通知,主要取个名字,不知道的可以先不填保存;
企业微信端:编辑api配置,主要是url,用你frp穿透出来的公网地址加上/你的消息通知的名称;
Nastool端:开始填写参数;
企业微信端:配置完成点击微信插件,扫描关注,然后点击nastool的测试成功就可以看到消息了。
然后在聊天框,随便输入一个电影名字,他会返回带序号的搜索结果,你输入序号,就可以开始自动下载。
5.jackett
玩种子站会用到,内置索引器往往资源不够,所以用jackett来实现索引。
version: '3.7'services:jackett: container_name: jackett image: linuxserver/jackett:latest environment: - PUID=1000 - PGID=100 - TZ=Asia/shanghai - AUTO_UPDATE=true ports: - "9117:9117" volumes: - /volumn/docker/jackett/config:/config - /volumn/docker/jackett/downloads:/downloads restart: unless-stopped然后就是启动访问端口就好,然后都是中文界面自行操作。
6.metatube
主要是用来给jellyfin刮削小姐姐
services:
metatube:
image: docker.unsee.tech/metatube/metatube-server:latest
container_name: metatube
volumes:
- /volume1/metatube/data:/var/www/html/data
ports:
- 8089:80 restart: unless-stopped文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!