MoviePilotV2 自动化部署仓库简介NAS 上搭 MoviePilot qB Emby 这一套手动部署往往要在多个容器、目录、Web 页面之间来回折腾某宝某鱼找人代部署通常收费不低。本仓库用脚本把部署与初始化串成一条流水线尽量做到少人工介入。主要功能一键部署媒体栈生成 Docker Compose、.env与目录结构启动 MoviePilot、双 qB、Emby、ChineseSubFinder 等容器组件自动初始化依次完成 qB WebUI、Emby 媒体库、MoviePilot 下载器/规则/分类、ChineseSubFinder 配置预置目录与整理规则下载区与媒体库按类型、地区划分MoviePilot 自动分类并整理入库Emby 开箱即用批量建库、首页排序、库选项同步挂载仅暴露最终媒体目录不暴露下载临时目录部署前检查与权限Docker / Compose 环境校验、统一密码规则、目录权限修正适合新搭一套 MoviePilot V2 媒体栈、希望少手工配置的场景。旧库迁移不在本仓库范围内。目录与规则细节见下文「目录与规则速查」。推荐顺序§1 准备 → §3 生成目录 → §4 启容器 → §5 网页向导 → §6 写.env→ §7 init-qb → §8 init-emby → §9 init-mpv2 → §10 init-csf → §13 验证 → §15 插件可选以下路径默认根目录为/volume1/media-dataEmby 媒体库默认按二级地区建库。目录与规则速查1. 安装脚本创建的文件夹python3 mpv2-install.py会创建下载目录与媒体库目录--init-mpv2还会补建部分媒体子目录。下载目录路径用途MoviePilotqBdownloads/media日常订阅/搜索下载整理qB-media 默认分类downloads/brush刷流保种不整理qB-brush 默认分类downloads/manual手动/临时下载整理qB-media 分类manualdownloads/private私密视频暂存不处理qB-media 分类private媒体库目录路径说明media/真人电影/{地区}地区大陆、港澳台、日韩、欧美、东南亚、其他地区media/真人剧集/{地区}同上media/动漫电影/{地区}同上media/动漫剧集/{地区}同上media/综艺/{地区}同上media/纪录片/{地区}同上media/短剧一级目录无地区子目录media/小电影一级目录手动维护MoviePilot 不处理media/私享影库/{地区}地区国产、日韩、欧美、其他地区media/未分类/剧集MoviePilot 兜底目录脚本补建downloads/private、media/小电影面向非常规发行影片所以无法自动刮削整理需自行整理入库也可搜索或自行实现第三方插件实现对非常规影片的刮削整理刮削逻辑也比较简单扫描目录通过ffmpeg生成缩略图有条件的通过AI没条件的生成简单媒体信息转移入库即可。2. Emby 媒体库与文件夹python3 mpv2-install.py --init-emby默认创建以下媒体库可在.env用EMBY_LIBRARY_MODEprimary切回一级建库。按地区拆分的库电视节目 / 电影Emby 媒体库类型对应文件夹真人电影-{地区}电影media/真人电影/{地区}动漫电影-{地区}电影media/动漫电影/{地区}真人剧集-{地区}电视节目media/真人剧集/{地区}动漫剧集-{地区}电视节目media/动漫剧集/{地区}综艺-{地区}电视节目media/综艺/{地区}纪录片-{地区}电视节目media/纪录片/{地区}一级库无地区子目录Emby 媒体库类型对应文件夹短剧电视节目media/短剧小电影电影media/小电影私享影库建议单独做账号权限Emby 媒体库类型对应文件夹私享影库-国产电影media/私享影库/国产私享影库-日韩电影media/私享影库/日韩私享影库-欧美电影media/私享影库/欧美私享影库-其他地区电影media/私享影库/其他地区3. MoviePilot 转移规则python3 mpv2-install.py --init-mpv2写入的整理策略摘要如下。全局 Transfer 设置项目默认值整理方式移动move参与整理的资源目录downloads/media、downloads/manual排除目录downloads/brush不处理downloads/private目录规则资源目录 → 媒体库每条带地区的分类均有两套规则downloads/media下载器监控和downloads/manual手动目录监控规则名前缀手动-。分类媒体类型目标路径真人电影-{地区}电影media/真人电影/{地区}动漫电影-{地区}电影media/动漫电影/{地区}真人剧集-{地区}电视剧media/真人剧集/{地区}动漫剧集-{地区}电视剧media/动漫剧集/{地区}综艺-{地区}电视剧media/综艺/{地区}纪录片-{地区}电视剧media/纪录片/{地区}短剧电视剧media/短剧私享影库/{地区}电影media/私享影库/{地区}TMDBadulttrue自动匹配兜底规则规则目标路径未分类剧集media/未分类/剧集私享影库电影-日韩-未识别media/私享影库/日韩不在 MoviePilot 规则内media/小电影无对应转移规则downloads/private不参与整理1. 前置准备NAS1.1 网络环境部署前确认 NAS 网络环境满足上网环境能稳定访问 Docker Hub、GitHub、TMDB 等海外服务镜像拉取、MoviePilot 插件/索引、刮削元数据均依赖外网。可拉取 Docker Hub 镜像Container Manager / Docker 已配置可用镜像源或代理能正常docker pull首次docker compose up需下载多个镜像。上网环境改造可通过nas安装openwrt虚拟机虚拟机安装服务插件然后将nas网关设置为虚拟机IP这样通过旁路由方式实现上网环境改造1.2 共享目录先在 NAS 系统里创建 1 个共享文件夹作为媒体数据根目录。建议共享文件夹名media-data挂载路径/volume1/media-data该目录会存放下载目录/volume1/media-data/downloads最终媒体库/volume1/media-data/media1.3 Docker 支持在 NAS 上确认Docker / Container Manager 可用且当前用户可执行docker脚本启动时会自动检查 Docker 权限与 Compose 支持。有可执行 Python3 环境。当前用户对/volume1/docker和/volume1/media-data有读写权限。建议目录/volume1/docker/media-stack /volume1/media-data2. 脚本说明进入脚本目录cd/path/to/mpv2/install当前脚本mpv2-install.pyinit-qb.pyinit-emby.pyinit-mpv2.pyinit-csf.py插件配置文档见 §15需在插件市场安装后手工填写插件配置/ ├── 站点认证及站点添加.md ├── ChineseSubFinder插件配置.md ├── 目录实时监控插件配置.md ├── 媒体库刮削插件配置.md └── 站点刷流插件配置.md2.1 安装脚本参数表mpv2-install.py常用参数如下参数说明默认值--stack-dirdocker-compose.yml与服务配置目录/volume1/docker/media-stack--data-dir下载与媒体库根目录/volume1/media-data--puid容器运行用户 UID当前用户 UID--pgid容器运行用户 GID当前用户 GID--moviepilot-userMoviePilot 管理员用户名admin--password统一设置MoviePilot/qB-media/qB-brush/CSF密码无随机或由单独参数决定--moviepilot-password单独设置 MoviePilot 密码随机--qb-media-password单独设置 qB-media WebUI 密码随机--qb-brush-password单独设置 qB-brush WebUI 密码随机--github-token写入.env的 GitHub Token插件/资源访问空--postgres-dbPostgreSQL 数据库名moviepilotv2--postgres-userPostgreSQL 用户名moviepilotv2--postgres-passwordPostgreSQL 密码随机--redis-passwordRedis 密码随机--force覆盖已有.env和docker-compose.yml关闭--stop仅停止容器关闭--clean停止容器并清理脚本生成目录/下载目录内容关闭--init-qb初始化两个 qB 实例关闭--init-emby初始化 Emby 媒体库与 API Key关闭--init-mpv2初始化 MoviePilot 下载器/目录/规则关闭--init-csf写入 ChineseSubFinder 配置并重启容器关闭--csf-userChineseSubFinder WebUI 用户名admin--csf-passwordChineseSubFinder WebUI 密码A-Za-z0-9!#%-*随机或沿用--password--host-ip初始化脚本访问 NAS 服务的局域网 IP见 §2.3自动探测注意--password与--moviepilot-password/--qb-media-password/--qb-brush-password/--csf-password互斥。所有脚本管理的密码含--postgres-password/--redis-password统一规则仅英文大小写、数字及!#%-*不支持_、$等符号校验逻辑见password_utils.py。--init-qb、--init-emby、--init-mpv2、--init-csf前需先docker compose up -d且容器处于运行状态。--init-mpv2前需先完成--init-qb和--init-emby且.env中QB_INITIALEDtrue、EMBY_INITIALEDtrue。NAS 上建议用root执行安装脚本以便正确设置目录所有者PUID/PGID非 root 时可能只能改权限、不能chown。2.2--github-token说明MoviePilot 安装插件、拉取 GitHub 上的规则/资源时会访问 GitHub API。未配置 Token 时容易触发匿名 API 限流表现为插件市场加载失败、索引更新超时等。获取方式: GitHub → Settings → Developer settings → Personal access tokens → 生成classictoken勾选public_repo只读公开仓库一般够用可以通过–github-token将token写入.env文件由脚本自行填充到moviepilot设置中也可自行在moviepilot中设置示例# 初次安装时一并写入python3 mpv2-install.py--passwordYourStrongPassword--github-tokenghp_xxxxxxxx# 已安装后补写编辑 .env 增加 GITHUB_TOKEN...再重新初始化 MoviePilotpython3 mpv2-install.py --init-mpv22.3--host-ip说明--host-ip只在**--init-qb/--init-emby/--init-mpv2**时使用初次生成目录§3不需要。脚本在宿主机上通过「NAS 局域网 IP 端口映射」访问各服务 API与容器内 Docker 网络地址如qb-media:7097不同。未指定设备内网IP时脚本会自行探测并输出探测结果如果探测失败请通过–host-ip指定注意--host-ip只影响初始化脚本怎么连 APIMoviePilot 连接 qB/Emby 走的是 Docker 内网地址.env里MP_QB_MEDIA_HOSThttp://qb-media:7097等与--host-ip无关。3. 一键生成目录与 compose执行初始化会生成目录、.env、docker-compose.yml# 方式1统一设置 qb-media、qb-brush、MoviePilot 的密码用户名统一为admin推荐python3 mpv2-install.py--passwordYourStrongPassword# 方式2用户名统一为admin分别设置密码python3 mpv2-install.py\--moviepilot-user admin\--moviepilot-passwordMpPassword\--qb-media-passwordQbMediaPassword\--qb-brush-passwordQbBrushPassword如需指定路径python3 mpv2-install.py\--stack-dir /volume1/docker/media-stack\--data-dir /volume1/media-data\--moviepilot-user admin\--moviepilot-passwordMpPassword\--qb-media-passwordQbMediaPassword\--qb-brush-passwordQbBrushPassword说明--password只统一设置密码用户名统一为 admin同时写入 CSF 密码。MoviePilot 用户名通过--moviepilot-user设置默认admin。--password不能和--moviepilot-password/--qb-media-password/--qb-brush-password/--csf-password同时使用所有密码参数均须符合统一字符规则A-Za-z0-9!#%-*。首次安装若计划使用插件市场可加上--github-token见 §2.2。4. 启动容器cd/volume1/docker/media-stackdockercompose up-d启动后服务包括服务作用MoviePilot媒体栈中枢订阅/搜索、资源识别、元数据刮削、文件整理入库并同步 EmbyPostgreSQLMoviePilot V2 后端数据库保存用户配置、订阅、站点、历史记录等RedisMoviePilot 缓存与任务队列支撑后台调度与状态存储Emby媒体服务器刮削展示、播放、权限与首页库排序qB-media日常订阅与搜索下载的 BT 客户端对应downloads/media等目录qB-brush刷流保种专用 BT 客户端与 qB-media 隔离下载内容不参与自动整理ChineseSubFinder扫描media目录自动下载/匹配中文字幕并可联动 Emby 补字幕5. 首次网页初始化只需要对emby做webui的手动初始化5.1 Emby先内网打开http://NAS-IP:7096Emby webui 网页 选择语言等完成首次向导并创建管理员账号6. 配置.env关键项编辑/volume1/docker/media-stack/.env在--init-emby之前必须写入 Emby 管理员账号和密码§5.1 向导里创建的EMBY_USERadmin EMBY_PASSWORDEmbyPassword7. 初始化 qB容器运行中执行python3 mpv2-install.py --init-qb说明首次启动从容器日志读取 qB 临时密码并完成 WebUI 初始化。若日志中已无临时密码会回退使用.env中的QB_MEDIA_PASSWORD/QB_BRUSH_PASSWORD能登录则视为已初始化只更新配置、不改密码。完成后会写入QB_INITIALEDtrue QB_MEDIA_API_KEY... QB_BRUSH_API_KEY...8. 初始化 Emby 媒体库与 API Key确认.env已配置EMBY_USER、EMBY_PASSWORD后执行python3 mpv2-install.py --init-emby脚本会按固定顺序创建二级媒体库并为所有 Emby 用户写入首页排序真人电影{地区} → 真人剧集{地区} → 动漫电影{地区} → 动漫剧集{地区} → 综艺{地区} → 纪录片{地区} → 私享影库{地区} → 短剧 → 小电影地区顺序大陆 → 港澳台 → 日韩 → 欧美 → 东南亚 → 其他地区可通过.env的EMBY_REGIONS调整列表排序仍按此优先级。同时会为脚本管理的全部媒体库同步LibraryOptions新建与已存在库均适用元数据/图片语言zh-CN国家CN实时监控开字幕下载语言chi、zho不随媒体保存外挂字幕由 CSF 处理私享影库 / 小电影启用成人元数据EnableAdultMetadata完成后会写入EMBY_INITIALEDtrue EMBY_API_KEY... # 若脚本自动创建成功9. 初始化 MoviePilot下载器/媒体服务器/目录规则确保.env里QB_INITIALEDtrue且EMBY_INITIALEDtrue后执行python3 mpv2-install.py --init-mpv2完成后建议重启 MoviePilot使category.yaml生效dockerrestart mpv2-moviepilot10. 初始化 ChineseSubFinder字幕建议在--init-emby完成后执行需.env中已有EMBY_API_KEY。脚本会写入chinesesubfinder/config/ChineseSubFinderSettings.json跳过 Web 向导并配置WebUI 账号CSF_USER/CSF_PASSWORDAPI KeyCSF_API_KEY供 MoviePilot 插件调用电影 / 连续剧扫描目录容器内/media/...Emby 联动从 Emby 拉取近期入库视频并自动补字幕python3 mpv2-install.py --init-csf --csf-user admin --csf-passwordYourCsfPassword也可与安装时统一密码python3 mpv2-install.py --init-csf--passwordYourStrongPassword脚本固定写入以下项不通过.env配置电影目录/media/真人电影、/media/动漫电影、/media/小电影、/media/私享影库连续剧目录/media/真人剧集、/media/动漫剧集、/media/综艺、/media/纪录片、/media/短剧Emby 联动启用http://emby:8096路径映射{DATA_DIR}/media→/mediaAPI Key启用写入.env的CSF_API_KEY目录扫描间隔every 6h.env会写入CSF_USER、CSF_PASSWORD、CSF_API_KEY、CSF_INITIALEDtrueEMBY_API_KEY由--init-emby写入。完成后会重启mpv2-chinesesubfinder。WebUIhttp://NAS-IP:7035。新入库补字幕依赖Emby API 联动 定时扫目录无需 MoviePilot 额外插件。若希望在整理完成瞬间也触发补字幕可安装 MoviePilot「ChineseSubFinder」插件见 插件配置/ChineseSubFinder插件配置.md。11. 目录与挂载规则核对详细目录、Emby 库、MoviePilot 规则见文首「目录与规则速查」。此处仅列挂载要点挂载原则MoviePilot、qB 可访问/volume1/media-data。Emby 只映射/volume1/media-data/media看不到downloads。ChineseSubFinder 只处理/media对应/volume1/media-data/media。12. 常用访问端口服务端口说明MoviePilot Web9443主界面MoviePilot API3001API 服务qB-media7097日常下载 WebUIqB-brush7098刷流 WebUIEmby7096HTTPEmby HTTPS7020HTTPSChineseSubFinder7035WebUIChineseSubFinder7037视频列表缩略图CookieCloudMoviePilot 内置浏览器插件同步 PT Cookiehttp://NAS-IP:9443/cookiecloud/13. 验证清单docker compose ps全部容器Up。MoviePilot 能连接 qB 与 Emby。Emby 只看到最终媒体目录不看到downloads。订阅下载进入downloads/media整理后进入media对应分类目录。qB-media 分类media/manual/private路径正确。私享影库、小电影库在 Emby 中已创建私享影库已对普通账号隐藏权限。ChineseSubFinder WebUI 可登录CSF_INITIALEDtrue.env含CSF_API_KEYEmby 联动已启用。14. 常用维护命令停止python3 mpv2-install.py--stop清理会删除 compose 配置、服务数据目录、downloads下内容**media媒体库需手动输入 Y 才删除**python3 mpv2-install.py--clean重建后重新启动python3 mpv2-install.pycd/volume1/docker/media-stackdockercompose up-d15. MoviePilot 推荐插件可选脚本不会自动安装插件。建议完成 §9 init-mpv2、§10 init-csf 且 §13 验证通过后先按 站点认证及站点添加.md 完成 PT 站点配置再按需安装下列插件并参照插件配置/目录文档填写。项目配置文件用途站点认证与添加插件配置/站点认证及站点添加.md用户认证、PT 站点 Cookie/Token 添加、RSS 与影视订阅非插件使用搜索/订阅前建议先完成ChineseSubFinder插件配置/ChineseSubFinder插件配置.mdMP 整理完成后通知 CSF 补字幕可选Emby 联动已覆盖主场景目录实时监控插件配置/目录实时监控插件配置.md监控downloads/manual手动拷贝/外部导入资源自动识别、刮削、整理媒体库刮削插件配置/媒体库刮削插件配置.md对已入库历史媒体补海报/NFO默认关闭定时需要时手动跑一次站点刷流插件配置/站点刷流插件配置.md调度qB-刷流专用资源只进downloads/brush与日常下载隔离建议安装顺序1. 完成 §9 init-mpv2§10 init-csf§13 验证日常下载与整理正常 2. 配置 PT 站点 → 按 插件配置/站点认证及站点添加.md认证、添加站点、RSS、订阅 3. 可选整理完成立刻补字幕 → 安装「ChineseSubFinder」插件按 插件配置/ChineseSubFinder插件配置.md 配置 4. 需要手动整理 → 安装「目录实时监控」按 插件配置/目录实时监控插件配置.md 配置 5. 需要刷流保种 → 安装「站点刷流」按 插件配置/站点刷流插件配置.md 配置 6. 历史媒体缺元数据 → 临时安装/启用「媒体库刮削」按 插件配置/媒体库刮削插件配置.md 手动执行一次注意插件配置与脚本生成的目录/转移规则一致不要监控downloads/brush或最终media根目录避免重复整理。