影视库主要由三部分组成,按数据流向分别是下载器,刮削器,媒体服务器。结构如下

因为上面这几个软件关联的地方主要在目录,所以这里整理下目录结构。我是固定了一个目录来放所有影视资源,我建议第一次部署按我这个简单的结构来。假定我们选择的影视资源目录是 /volume2/media
。然后我们将资源分为两类,电视剧和电影(更复杂的方式可以后面熟系 emby 的分类逻辑后再分)。
整体目录结构如下
/volume2/media/
/volume2/media/tv # emby 用的电视剧目录
/volume2/media/movie # emby 用的电影目录
/volume2/media/download/tv # 下载用的电视剧目录
/volume2/media/download/movie # 下载用的电影目录
(下载目录和 emby 用的目录放在一起的原因是刮削的时候方便挂载做硬链接。这里要注意,之前很多人这两个目录不在一个父目录下刮削失败)
为了简单,可以将上面页面权限置成 777 (chmod -R 777 /volume2/media),以免因为权限原因导致失败。下面镜像里挂载的 _data
_config
目录也一样,可以设置成 777。
接下来我们也按这样的顺序介绍相应软间的安装和配置
下载器
常用的下载软件主要是 Transmission 和 qBittorrent ,一般推荐的是使用 qb 下载,trans 保种。理由是 qb 下载快,但是当你有上千上万的种子要保种上传时,qb 占用资源非常高。这里我体验是 qb 下载确实比 trans 快。因为我维护的种子不多,所以也就顺便用 qb 保种了。
qBittorrent 的安装之前写过了,参考 https://note.laily.net/post/nas/download-tools/
刮削器
刮削的工具有很多,研究过很多,这里最推荐 MoviePilot,前身叫 NasTool,但是 NasTool 已经不维护了。
MoviePilot 作者更新了 v2 版本,不过我目前还是用的 v1。
services:
moviepilot:
image: jxxghp/moviepilot:1.9.17
stdin_open: true
tty: true
container_name: moviepilot
network_mode: host
volumes:
- "./_config:/config"
- "./_data/core:/moviepilot"
- "/volume2/media:/volume2/media"
- "/etc/hosts:/etc/hosts"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
environment:
# WEB服务端口,默认3000,可自行修改,不能与API服务端口冲突
- "NGINX_PORT=13000"
# API服务端口,默认3001,可自行修改,不能与WEB服务端口冲突
- "PORT=13001"
# 运行程序用户的uid,默认0
- "PUID=0"
# 运行程序用户的gid,默认0
- "PGID=0"
# 掩码权限,默认000,可以考虑设置为022
- "UMASK=000"
# 时区
- "TZ=Asia/Shanghai"
# 重启时自动更新,true/release/dev/false,默认release,需要能正常连接Github 注意:如果出现网络问题可以配置PROXY_HOST
- "MOVIEPILOT_AUTO_UPDATE=false"
# 网络代理,访问themoviedb或者重启更新需要使用代理访问,格式为http(s)://ip:port、socks5://user:pass@host:port
#- 'PROXY_HOST=socks5://127.0.0.1:7891'
# 认证站点
# - "AUTH_SITE=icc2022"
# - "ICC2022_UID=${ICC2022_UID}"
# - "ICC2022_PASSKEY=${ICC2022_PASSKEY}"
# 超级管理员用户名,默认admin,安装后使用该用户登录后台管理界面,注意:启动一次后再次修改该值不会生效,除非删除数据库文件!
# - "SUPERUSER=${SUPERUSER}"
# API密钥,默认moviepilot,在媒体服务器Webhook、微信回调等地址配置中需要加上?token=该值,建议修改为复杂字符串
# - "API_TOKEN=xxxx"
# 大内存模式,默认为false,开启后会增加缓存数量,占用更多的内存,但响应速度会更快
- "BIG_MEMORY_MODE=false"
# DNS over HTTPS开关,true/false,默认true,开启后会使用DOH对api.themoviedb.org等域名进行解析,以减少被DNS污染的情况,提升网络连通性
- "DOH_ENABLE=true"
# 元数据识别缓存过期时间(小时),数字型,不配置或者配置为0时使用系统默认(大内存模式为7天,否则为3天),调大该值可减少themoviedb的访问次数
- "META_CACHE_EXPIRE="
# Github token,提高自动更新、插件安装等请求Github Api的限流阈值,格式:ghp_****
- "GITHUB_TOKEN="
# 开发者模式,true/false,默认false,开启后会暂停所有定时任务
- "DEV=false"
# debug模式,开启后会输出debug日志
- "DEBUG=false"
# 启动时自动检测和更新资源包(站点索引及认证等),true/false,默认true,需要能正常连接Github
- "AUTO_UPDATE_RESOURCE=true"
# TMDB API地址,默认api.themoviedb.org,也可配置为api.tmdb.org、tmdb.movie-pilot.org 或其它中转代理服务地址,能连通即可
- "TMDB_API_DOMAIN=api.themoviedb.org"
# TMDB图片地址,默认image.tmdb.org,可配置为其它中转代理以加速TMDB图片显示,如:static-mdb.v.geilijiasu.com
- "TMDB_IMAGE_DOMAIN=image.tmdb.org"
# 登录首页电影海报,tmdb/bing,默认tmdb
- "WALLPAPER=tmdb"
# 媒体信息识别来源,themoviedb/douban,默认themoviedb,使用douban时不支持二级分类
- "RECOGNIZE_SOURCE=themoviedb"
# Fanart开关,true/false,默认true,关闭后刮削的图片类型会大幅减少
- "FANART_ENABLE=true"
# 刮削元数据及图片使用的数据源,themoviedb/douban,默认themoviedb
- "SCRAP_SOURCE=themoviedb"
# 新增已入库媒体是否跟随TMDB信息变化,true/false,默认true,为false时即使TMDB信息变化了也会仍然按历史记录中已入库的信息进行刮削
- "SCRAP_FOLLOW_TMDB=true"
# 远程交互搜索时自动择优下载的用户ID(消息通知渠道的用户ID),多个用户使用,分割,设置为 all 代表全部用户自动择优下载,未设置需要手动选择资源或者回复0才自动择优下载
- "AUTO_DOWNLOAD_USER=all"
# OCR识别服务器地址,格式:http(s)://ip:port,用于识别站点验证码实现自动登录获取Cookie等,不配置默认使用内建服务器https://movie-pilot.org
- "OCR_HOST=https://movie-pilot.org"
# 下载站点字幕,true/false,默认true
- "DOWNLOAD_SUBTITLE=true"
# 搜索时是否使用多个名称搜索,true/false,默认true,开启后会使用多个名称进行搜索,搜索结果会更全面,但会增加搜索时间;关闭时只要其中一个名称搜索到结果或全部名称搜索完毕即停止
- "SEARCH_MULTIPLE_NAME=true"
# 电影重命名格式
- "MOVIE_RENAME_FORMAT={{title}}{% if year %} ({{year}}){% endif %}/{{title}}{% if year %} ({{year}}){% endif %}{% if part %}-{{part}}{% endif %}{% if videoFormat %} - {{videoFormat}}{% endif %}{{fileExt}}"
# 电视剧重命名格式
- "TV_RENAME_FORMAT={{title}}{% if year %} ({{year}}){% endif %}/Season {{season}}/{{title}} - {{season_episode}}{% if part %}-{{part}}{% endif %}{% if episode %} - 第 {{episode}} 集{% endif %}{{fileExt}}"
# 插件市场仓库地址,仅支持Github仓库main分支,多个地址使用,分隔
- "PLUGIN_MARKET=https://github.com/jxxghp/MoviePilot-Plugins"
- "LIBRARY_PATH=/media"
- "LIBRARY_MOVIE_NAME=movie"
- "LIBRARY_TV_NAME=tv"
logging:
driver: json-file
options:
max-size: 5m
restart: always
挂载的目录要注意,我这里把 /volume2/media 挂载进去了。因为刮削是两个目路都要涉及的,是从 media/download/tv 这类目录里查询资源文件,然后搜索影视元信息补充后整理成 emby 需要的格式放到了 media/tv 目录下。
- "/volume2/media:/volume2/media"
有很多环境变量,可以参考 https://wiki.movie-pilot.org/configuration 了解具体含义。
这个不想用 admin 当管理员用户的可以注意下
SUPERUSER:这个是第一个用户的用户名,默认是 admin,不改也行。只是如果第一次没改,后面只能删了数据库改了。
然后如果自己有代理的话可以配置下 PROXY_HOST,主要是 TMDB 的一些域名正常访问不了(不过我记得 MP 内部处理过的,没有代理不配置应该也行)。
媒体服务器
常用的是 Jellyfin,Emby,Plex,按自己喜欢的来。Jellyfin 开源免费,Emby 和 Plex 收费。Emby 网上有开心版,不过有能力还是建议支持下。
整体来看用 Emby 的最多
services:
emby:
image: lovechen/embyserver:latest # 使用最新版本的 lovechen/embyserver 镜像
restart: always # 容器总是重新启动
ports:
- "8097:8096" # 将容器的 8096 端口映射到主机的 8096 端口
- "8921:8920" # 将容器的 8920 端口映射到主机的 8920 端口
- "1901:1900/udp" # 将容器的 1900 UDP 端口映射到主机的 1900 UDP 端口
- "7360:7359/udp" # 将容器的 7359 UDP 端口映射到主机的 7359 UDP 端口
volumes:
- ./config:/config # 将主机上的 ./config 目录挂载到容器的 /config
- /volume2/media/:/data2 # 将主机上的 /pt/downloads/link 目录挂载到容器的 /data
- /etc/localtime:/etc/localtime # 同步主机和容器的本地时间
- /etc/hosts:/etc/hosts
environment:
- UID=0 # 设置容器用户 ID 为 0 (通常是 root)
- GID=0 # 设置容器组 ID 为 0 (通常是 root)
- GIDLIST=0 # 设置容器组 ID 列表为 0
- NVIDIA_VISIBLE_DEVICES=all # 允许容器访问所有 NVIDIA 设备
- HTTP_PROXY=http://192.168.110.150:7890
- HTTPS_PROXY=http://192.168.110.150:7890
devices:
- /dev/dri:/dev/dri # 将主机的 /dev/dri 设备挂载到容器
我这里挂载目路进去的时候映射到了 /data2
目录,这个可以根据自己需要调整。
emby 服务端收费的最重要的功能就是硬解,所以需要把显卡驱动,加载进去。这里给驱动加上执行权限(这里细节我忘了,应该不需要做其它什么)。
ls -la /dev/dri
chmod -R a+x /dev/dri
这样所有的软件都装好了。
接下来开始配置。
配置
MoviePilot
连接
MoviePilot 是连接下载器和媒体服务器的桥梁,所以两边都要配。根据上面自己配置的 qb 和 emby 的账号密码即可。Emby 的 API 密钥要手动去 Emby 后台生成。

目录
配置刮削资源时资源在哪里(下载后存放的目录),刮削后放到哪里(Emby 读取的目录)。

(我不记得自己使用 qb 下载的文件会不会整理了。按下面 wiki 说的,要么就是干掉下载器配置里的标签,要么手动下载时也加上这个标签那它也会自动整理,我是装了目录监控插件的,所以没有注意这个配置)

source
目录监控插件

配置上下载目录

Emby
Emby 要配置的主要就是媒体库,新建两个媒体库,然后将上面配置的目录加进去就好了。


注意我上面配置镜像的时候将 /volume2/media/ 映射成了 /data2,所以这里上面文件夹就选的 /data2。
使用
按上面流程全部搭建好了之后,去 qb 里下载资源到 /volume2/media/download/tv 目录然后一会儿就会在 emby 看到刮削好的内容了。
qb 的下载异常可以在 qb 的页面查看,页面上也可以查看日志。
MoviePilot 的“历史记录”页面可以查看刮削记录,有的会说明失败原因,也可以在“文件管理”里找到文件目录,手动“整理”。MoviePilot 的日志要用 docker 命令查看(在 docker compose 文件所在目录执行 docker compose logs)。
Emby 的错误日志可以在后台页面查看。
其他
TMDB 的 host
TMDB 有时可能直接访问不通,如果没有代理的话,可以通过配置 host 解决,参考 LINK。在这类网站里查询本地可用的 ip,https://dnschecker.org/#A/image.themoviedb.org,然后填到 host 里。上面 MP 的镜像里已经把 host 挂载进去了。