0. 最终效果
用 Docker 容器部署多个容器:qBittorrent、moviePilot V2、emby
这套体系的核心价值在于:
- **搜索或订阅后自动下载
- **下载完自动分类整理
- 精美的海报墙
- 多成员隔离观看
- 多终端、多场地同步观影记录
0.1 存储结构:所有媒体资源统一归档到 /volume2/media
NAS 采用如下最终目录布局:
/volume1/docker/ ← 所有容器配置目录
/volume2/media/ ← 所有媒体数据(PT 下载、MP 整理)
├── downloads/ ← qb 与 emby 的资源目录和媒体库目录
│ ├── raw/ ← qB 下载目录(用于 pt 做种)
│ └── clean/ ← mp 输出(硬链接后的成品库)
│ ├── tv/
│ │ ├── 国产剧
│ │ ├── 欧美剧
│ │ └── 日韩剧
│ ├── movies/
│ ├── anime/ ← 大人番剧
│ └── kids/
│ ├── 动画片(剧)
│ └── 动画电影
│
└──(其余非 MP 管辖的目录略)
目录结构示意图

设计要点:
- 媒体数据全部放在大容量的 volume2
- Docker 配置全部放 volume1
- downloads/raw 是唯一下载入口
- downloads/clean 是唯一媒体成品库入口
- clean 下面子目录的设计可以根据自己需求建立,只需要在 mp 的<存储&目录>中相应设置好即可
0.2 Docker 映射规则:所有容器内部媒体路径统一
为了让 mp 能正常调用 qb 下载,并用硬连接的方式转移下载文件到 emby 的媒体库。
统一约定:容器内部媒体目录一律使用 /media。
示例:
/volume2/media/downloads/ → /media
0.3 权限要求:为 everyone 赋予“管理(Administration)”
如果没有“管理”权限,会出现:
- MoviePilot 无法在 raw 和 clean 中创建文件(deny)
- 无法硬链接
- 整理失败但无明显提示
因此必须为 /volume2/media 及其子目录设置:
用户:everyone
权限:管理 + 读写(Administration)
文件夹权限设置示意图

0.4 多用户体系:按家庭成员进行媒体隔离
在 Emby 中我采用如下多用户设计:
- 儿童账号
仅开放kids/
(动画片、动画电影) - 老人账号
仅开放tv/国产剧/与movies/ - 其它账号
全部开放
每个账户的:
- 观看记录
- 观看进度
- 推荐逻辑
全部互不干扰。
0.5 网络
- 局域网播放
- 外网播放利用Synology 官方免费 DDNS + 群晖登录门户反代即可 (本文不讨论)
1. 全链条系统概览
整体链条如下:
PT Tracker → qb (raw)
→ mp(清洗、刮削、分类、硬链接、整理)
→ clean(tv / movies / anime / kids)
→ Emby(媒体库、账号体系、跨平台播放)
→ TV / iPhone / Android /
链条逻辑非常清晰:
- qb 下载
- mp 识别 + 分类 + 硬链接
- emby 播放
- 各端同步观看记录
mp 是整个系统的核心枢纽,负责将“下载文件”转化成“可播放媒体资产”。
2. 下载层:qb
qB 是系统的下载入口层,负责从 PT 站拉取种子数据。
2.1 下载路径规划:所有源文件统一进入 raw
/volume2/media/downloads/raw
qBittorrent 的配置非常简单:
- 不重命名
- 不移动
- 不“完成后转移”
- 保持原始文件结构(为了做种)
这保证了:
- 硬链接不会破坏做种
- MoviePilot 能识别
- 原始文件完整可靠
2.2 Docker Compose(qBittorrent)
version: "3.8"
services:
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
environment:
PUID: 1000 # 更换成你的
PGID: 100 # 更换成你的
TZ: Asia/Shanghai
WEBUI_PORT: 8999
TORRENTING_PORT: 18036 # 更换成随机高位端口
volumes:
- "/volume1/docker/qbittorrent/config:/config"
- "/volume2/media/downloads/:/media"
ports:
- "8999:8999"
- "6881:6881"
- "6881:6881/udp"
restart: unless-stopped
关键点:
/volume2/media/downloads映射成/media- raw 路径必须与 MoviePilot 一致
3. 媒体库层:Emby(Media Layer)
Emby 是家庭多端播放的统一入口。
3.1 Docker Compose(Emby)
version: "2.3"
services:
emby:
image: emby/embyserver
container_name: embyserver
network_mode: host
environment:
PUID: 1000
PGID: 100
GIDLIST: 100
TZ: Asia/Shanghai
volumes:
- "/volume1/docker/emby/config:/config"
- "/volume2/media/downloads/clean:/media"
devices:
- "/dev/dri:/dev/dri"
ports:
- "8096:8096"
- "8920:8920"
restart: unless-stopped
Emby 只需要 clean(媒体库)。
4. 整理层:MoviePilot V2
MoviePilot 是本系统的“核心”。
它负责:
- 在 pt 网站搜索资源
- 下载资源到 raw
- 从 raw 读取文件
- 自动识别剧集/电影/番剧
- 按照你在<存储&目录>中的设置,把文件放置到 clean 的相应目录
- 自动生成 NFO / poster / backdrop
- 投递给 Emby 索引
4.1 Docker Compose(MoviePilot v2)
version: "3.3"
services:
moviepilot:
image: jxxghp/moviepilot-v2:latest
container_name: moviepilot-v2
hostname: moviepilot-v2
stdin_open: true
tty: true
network_mode: host
volumes:
- "/volume2/media/downloads/:/media"
- "/volume1/docker/moviepilot_2/config:/config"
- "/volume1/docker/moviepilot_2/core:/moviepilot/.cache/ms-playwright"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
environment:
NGINX_PORT: 3000
PORT: 3001
PUID: 1000
PGID: 100
UMASK: "000"
TZ: Asia/Shanghai
SUPERUSER: admin
SUPERUSER_PASSWORD: "你的初始登录密码"
restart: always
4.2 MoviePilot 成功的首要条件
MoviePilot 能硬链接整理的前提:
qBittorrent 与 MoviePilot 的容器内部文件都能以相同的路径访问,且都是以 media 开头。
示意图

5. 跨设备观看层(Apple / Android)
5.1 Apple 全链条(Infuse)
- iPhone / iPad
- Apple TV
- Infuse 自动识别 Emby
- HDR / 字幕兼容性最佳
- 本地网络直连性能极高
5.2 安卓设备
- Google TV / 小米盒子
- Android 手机 / 平板
- 直接使用 Emby App
- 观看记录与 Apple 端完全同步(由 Emby 控制)
5.3 外网访问(轻触)
- 使用 Synology 官方 DDNS
- 通过 WebStation / Nginx 做简单反代
6. 总结
把我自己使用的家庭版影视系统做了完整文档化,从存储结构到 Docker 编排,从路径一致性到硬链接机制,从多用户体系到跨设备观看。

