好吧,其实不是升级,单纯是unraid升级之后发现mp起不起来了,再加上之前的v1一直有些奇奇怪怪的小问题(过滤规则改动导致资源老是下错地方,tg机器人搜索电视剧得加季导致挂削错误等等),想着干脆升级到V2算了,说不定会有些改善。


1 V1数据备份

尽管我很想把我存储的几个站点相关的cooke全部拉下来,还有什么类型下到什么文件夹的规则设置,哦还有各种搜索过滤设置,但很可惜我启动不起来了,只能暂时存储了v1的app.envcategory.yaml以及整个appdata打包。

2 安装V2

访问Wiki,查看环境准备以及安装指引。

2.1 环境准备

部分功能基于文件系统监控实现(如目录监控等),监控的文件较多时,往往会因为操作系统默认允许的文件句柄数太小导致报错,相关功能失效,需在宿主机操作系统上(不是docker容器内)执行以下命令并重启生效:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
echo fs.inotify.max_user_instances=524288 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

经实验,我的文件规模不使用这个命令,目录监控已经无效了。

2.2 Docker 部署

直接使用Docker CLI:

docker run -itd \
    --name moviepilot-v2 \
    --hostname moviepilot-v2 \
    --network host \
    # --network bridge \
    # -p 3000:3000 \
    # -p 3001:3001 \
     -v /media:/media \
    -v /moviepilot-v2/config:/config \
    -v /moviepilot-v2/core:/moviepilot/.cache/ms-playwright \
    -v /var/run/docker.sock:/var/run/docker.sock:ro \
    -e 'NGINX_PORT=3000' \
    -e 'PORT=3001' \
    -e 'PUID=0' \
    -e 'PGID=0' \
    -e 'UMASK=000' \
    -e 'TZ=Asia/Shanghai' \
    # -e 'AUTH_SITE=v2.0.7+版本以后可不设置,直接通过 UI 配置' \
    # -e 'IYUU_SIGN=xxxx' \
    -e 'SUPERUSER=admin' \
    # -e 'API_TOKEN=无需手动配置,系统会自动生成。如果需要自定义配置,必须为16位以上的复杂字符串' \
    --restart always \
    jxxghp/moviepilot-v2:latest

Docker Compose:

version: '3.3'
services:
  moviepilot:
    stdin_open: true
    tty: true
    container_name: moviepilot-v2
    hostname: moviepilot-v2

    network_mode: host
    # networks:
    # - moviepilot

    # ports:
    #  - '3000:3000'
    #  - '3001:3001'

    volumes:
      - '/media:/media'
      - '/moviepilot-v2/config:/config'
      - '/moviepilot-v2/core:/moviepilot/.cache/ms-playwright'
      - '/var/run/docker.sock:/var/run/docker.sock:ro'

    environment:
      - 'NGINX_PORT=3000'
      - 'PORT=3001'
      - 'PUID=0'
      - 'PGID=0'
      - 'UMASK=000'
      - 'TZ=Asia/Shanghai'
      # - 'AUTH_SITE=iyuu'  # v2.0.7+版本以后,可不设置,直接通过 UI 配置
      # - 'IYUU_SIGN=xxxx'
      - 'SUPERUSER=admin'  # 设置超级用户
      # - 'API_TOKEN=无需手动配置,系统会自动生成。如果需要自定义配置,必须为16位以上的复杂字符串'

    restart: always
    image: jxxghp/moviepilot-v2:latest

# networks:
#   moviepilot:
#     name: moviepilot

由于我使用的是Unraid,还有几个选项需要配置下。

Repository URL:https://hub.docker.com/r/jxxghp/moviepilot
Icon LInk:https://raw.githubusercontent.com/jxxghp/MoviePilot-Frontend/main/public/logo.png
WebUI:http://[IP]:[PORT:3000]
AUTH_SITE:*****
HDFANS_UID:*****
HDFANS_PASSKEY:********

容器运行成功后查看日志

FFMPEG playwright build v1009 downloaded to /moviepilot/.cache/ms-playwright/ffmpeg-1009
INFO:    config.py - 'API_TOKEN' 未设置,已随机生成新的【API_TOKEN】***
INFO:    294b007932ef_2_0_0.py - 【超级管理员初始密码】
请登录系统后在设定中修改。 注:该密码只会显示一次,请注意保存。
...
INFO:    category.py - 已加载二级分类策略 category.yaml
...
INFO:    torrents.py - 站点资源版本:1.8.3
INFO:    torrents.py - 认证资源版本:2.1.1
INFO:    torrents.py - 开始清理种子缓存数据 ...
INFO:    torrents.py - 种子缓存数据清理完成
INFO:     Started server process [130]
INFO:     Waiting for application startup.
INFO:    resource.py - 开始检测资源包版本...
INFO:    resource.py - 最新资源包版本:v61
INFO:    resource.py - 所有资源已最新,无需更新
INFO:    modules_initializer.py - 用户认证失败,站点认证参数未设置,无法自动进行用户认证!
INFO:    chain - 发送消息:channel=None,source=None,title=MoviePilot用户认证, text=用户认证失败,站点相关功能将无法使用!,userid=None
INFO:    chain - NotificationType.Manual 的消息已设置发送给管理员
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:3001 (Press CTRL+C to quit)

也可以使用强哥版。进入 SSH 后运行以下命令导入模板,然后新增容器时,选择刚刚导入的模板:

curl -sL https://gist.githubusercontent.com/hbq0405/8d6ebbeafe5681fc01d03deb04f8f992/raw/moviepilot.xml -o /boot/config/plugins/dockerMan/templates-user/MoviePilot-V2.xml

3 配置设置

3.1 用户认证

当然可以像以前一样在环境变量或者app.env里面设置,或者更先进一点,点击用户头像 -> 用户认证。

3.2 基础配置

3.3 目录配置(旧)

目录配置稍微有点绕。

设定 中可统一设定下载和媒体库目录,可添加多个目录配置项,系统按先后顺序依次匹配,匹配到的第一个附合条件的目录做为使用目录。通过拖动卡片调整目录项的优先顺序,一般情况下需要细化的目录需要调整到前面才能生效。

下载目录和媒体库目录均支持两级分类体系:

目录设置时请关注以下特性:

3.3.1 二级分类策略

可以通过编辑 /config/category.yml 文件来自定义二级分类策略,也可以通过插件二级分类策略编辑。

####### 一个范例 #######
# 1. 该配置文件用于配置电影和电视剧的分类策略,配置后程序会按照配置的分类策略名称进行分类,配置文件采用yaml格式,需要严格附合语法规则
# 2. 配置文件中的一级分类名称:`movie`、`tv` 为固定名称不可修改,二级名称同时也是目录名称,会按先后顺序匹配,匹配后程序会按这个名称建立二级目录
# 3. 支持的分类条件:
#   `original_language` 语种,具体含义参考下方字典
#   `production_countries` 国家或地区(电影)、`origin_country` 国家或地区(电视剧),具体含义参考下方字典
#   `genre_ids` 内容类型,具体含义参考下方字典
#   themoviedb 详情API返回的其它一级字段
# 4. 配置多项条件时需要同时满足,一个条件需要匹配多个值是使用`,`分隔

# 配置电影的分类策略
movie:
  # 分类名同时也是目录名
  动画电影:
    # 匹配 genre_ids 内容类型,16是动漫
    genre_ids: '16'
  华语电影:
    # 匹配语种
    original_language: 'zh,cn,bo,za'
  日语电影:
    # 匹配语种
    origin_country: 'JP'
  韩语电影:
    origin_country: 'KR'
  欧美电影:
    # 匹配语种
    original_language: 'en'
  # 未匹配以上条件时,分类为外语电影
  外语电影:

# 配置电视剧的分类策略
tv:
  # 分类名同时也是目录名
  国漫:
    # 匹配 genre_ids 内容类型,16是动漫
    genre_ids: '16'
    # 匹配 origin_country 国家,CN是中国大陆,TW是中国台湾,HK是中国香港
    origin_country: 'CN,TW,HK'
  日番:
    # 匹配 genre_ids 内容类型,16是动漫
    genre_ids: '16'
    # 匹配 origin_country 国家,JP是日本
    origin_country: 'JP'
  美漫:
    # 匹配 genre_ids 内容类型,16是动漫
    genre_ids: '16'
    # 匹配 origin_country 国家,US是美国
    origin_country: 'US'
  其它动漫:
    # 匹配 genre_ids 内容类型,16是动漫
    genre_ids: '16'
  纪录片:
     # 匹配 genre_ids 内容类型,99是纪录片
    genre_ids: '99'
  儿童:
    # 匹配 genre_ids 内容类型,10762是儿童
    genre_ids: '10762'
  综艺:
    # 匹配 genre_ids 内容类型,10764 10767都是综艺
    genre_ids: '10764,10767'
  国产剧:
    # 匹配 origin_country 国家,CN是中国大陆,TW是中国台湾,HK是中国香港
    origin_country: 'CN,TW,HK'
  欧美剧:
    # 匹配 origin_country 国家,主要欧美国家列表
    origin_country: 'US,FR,GB,DE,ES,IT,NL,PT,RU,UK'
  日剧:
    # 匹配 origin_country 国家,主要亚洲国家列表
    origin_country: 'JP'
  韩剧:
    # 匹配 origin_country 国家,韩国朝鲜
    origin_country: 'KR'
  # 未匹配以上分类,则命名为未分类
  其它剧集:

## genre_ids 内容类型 字典,注意部分中英文是不一样的
#	28	Action
#	12	Adventure
#	16	Animation
#	35	Comedy
#	80	Crime
#	99	Documentary
#	18	Drama
#	10751	Family
#	14	Fantasy
#	36	History
#	27	Horror
#	10402	Music
#	9648	Mystery
#	10749	Romance
#	878  Science Fiction
#	10770	TV Movie
#	53	Thriller
#	10752	War
#	37	Western
#	28	动作
#	12	冒险
#	16	动画
#	35	喜剧
#	80	犯罪
#	99	纪录
#	18	剧情
#	10751	家庭
#	14	奇幻
#	36	历史
#	27	恐怖
#	10402	音乐
#	9648	悬疑
#	10749	爱情
#	878	科幻
#	10770	电视电影
#	53	惊悚
#	10752	战争
#	37	西部

## original_language 语种 字典
#	af	南非语
#	ar	阿拉伯语
#	az	阿塞拜疆语
#	be	比利时语
#	bg	保加利亚语
#	ca	加泰隆语
#	cs	捷克语
#	cy	威尔士语
#	da	丹麦语
#	de	德语
#	dv	第维埃语
#	el	希腊语
#	en	英语
#	eo	世界语
#	es	西班牙语
#	et	爱沙尼亚语
#	eu	巴士克语
#	fa	法斯语
#	fi	芬兰语
#	fo	法罗语
#	fr	法语
#	gl	加里西亚语
#	gu	古吉拉特语
#	he	希伯来语
#	hi	印地语
#	hr	克罗地亚语
#	hu	匈牙利语
#	hy	亚美尼亚语
#	id	印度尼西亚语
#	is	冰岛语
#	it	意大利语
#	ja	日语
#	ka	格鲁吉亚语
#	kk	哈萨克语
#	kn	卡纳拉语
#	ko	朝鲜语
#	kok	孔卡尼语
#	ky	吉尔吉斯语
#	lt	立陶宛语
#	lv	拉脱维亚语
#	mi	毛利语
#	mk	马其顿语
#	mn	蒙古语
#	mr	马拉地语
#	ms	马来语
#	mt	马耳他语
#	nb	挪威语(伯克梅尔)
#	nl	荷兰语
#	ns	北梭托语
#	pa	旁遮普语
#	pl	波兰语
#	pt	葡萄牙语
#	qu	克丘亚语
#	ro	罗马尼亚语
#	ru	俄语
#	sa	梵文
#	se	北萨摩斯语
#	sk	斯洛伐克语
#	sl	斯洛文尼亚语
#	sq	阿尔巴尼亚语
#	sv	瑞典语
#	sw	斯瓦希里语
#	syr	叙利亚语
#	ta	泰米尔语
#	te	泰卢固语
#	th	泰语
#	tl	塔加路语
#	tn	茨瓦纳语
#	tr	土耳其语
#	ts	宗加语
#	tt	鞑靼语
#	uk	乌克兰语
#	ur	乌都语
#	uz	乌兹别克语
#	vi	越南语
#	xh	班图语
#	zh	中文
#	cn	中文
#	zu	祖鲁语

## origin_country/production_countries 国家地区 字典
#	AR	阿根廷
#	AU	澳大利亚
#	BE	比利时
#	BR	巴西
#	CA	加拿大
#	CH	瑞士
#	CL	智利
#	CO	哥伦比亚
#	CZ	捷克
#	DE	德国
#	DK	丹麦
#	EG	埃及
#	ES	西班牙
#	FR	法国
#	GR	希腊
#	HK	香港
#	IL	以色列
#	IN	印度
#	IQ	伊拉克
#	IR	伊朗
#	IT	意大利
#	JP	日本
#	MM	缅甸
#	MO	澳门
#	MX	墨西哥
#	MY	马来西亚
#	NL	荷兰
#	NO	挪威
#	PH	菲律宾
#	PK	巴基斯坦
#	PL	波兰
#	RU	俄罗斯
#	SE	瑞典
#	SG	新加坡
#	TH	泰国
#	TR	土耳其
#	US	美国
#	VN	越南
#	CN	中国 内地
#	GB	英国
#	TW	中国台湾
#	NZ	新西兰
#	SA	沙特阿拉伯
#	LA	老挝
#	KP	朝鲜 北朝鲜
#	KR	韩国 南朝鲜
#	PT	葡萄牙
#	MN	蒙古国 蒙古

3.3.2 界面配置

如图所示(动漫在新版本已经不被认为是一级分类):

300
PS: 并不完全正确

3.4 目录配置(新)

从群里loot了一份强哥版的配置文件,感觉比自己琢磨的要好用,关键点在于摈弃mp界面上复杂的目录识别设置,直接把多级目录写在category.yaml中。

3.4.1 目录规划

第一步:目录规划,首先要确认存放媒体的地方以及如何规划。大佬可以跳过这一段,小白最好老老实实按部就班操作。

  1. 先设置个共享目录,例如:media,然后在该目录下分别创建downloads目录存放下载源文件,和links目录存放硬链接后的媒体库文件。小白放心,这两个目录只会占用一份磁盘空间

  2. 相关容器(MP、QB、EMBY)分别映射该共享目录保持映射一致,例如:/vol3/1000/media:/media

  3. 确认以上操作无误后,即可开始正式配置。

3.4.2 qBittorrent 相关

3.4.3 MoviePilot 相关

qBittorret自动分类管理
开启该功能,则会在qBittorrent自动生成分类并按分类路径下载,不开启则没有分类全部下载到默认目录。权衡之后我选择了关闭。

二级分类策略配置(根据自身情况做了一些改动)
movie:
  电影/动画电影:
    genre_ids: '16'
  电影/港台电影:
    origin_country: 'TW,HK'
  电影/国产电影:
    origin_country: 'CN'
  电影/日语电影:
    origin_country: 'JP'
  电影/韩语电影:
    origin_country: 'KP,KR'
  电影/欧美电影:
    original_language: 'en'
  电影/外语电影:
    
tv:
  动漫/国漫:
    genre_ids: '16'
    origin_country: 'CN,TW,HK'
  动漫/美漫:
    genre_ids: '16'
    origin_country: 'US,FR,GB,DE,ES,IT,NL,PT,RU,UK'
  动漫/日番:
    genre_ids: '16'
    origin_country: 'JP'
  其他/纪录片:
    genre_ids: '99'
  其他/综艺:
    genre_ids: '10764,10767'
  电视剧/港台剧:
    origin_country: 'TW,HK'
  电视剧/国产剧:
    origin_country: 'CN'
  电视剧/日剧:
    origin_country: 'JP'
  电视剧/韩剧:
    origin_country: 'KP,KR'
  电视剧/南亚剧:
    origin_country: 'TH,IN,SG'
  电视剧/欧美剧:
    origin_country: 'US,FR,GB,DE,ES,IT,NL,PT,RU,UK'
  电视剧/其它剧集:

敲重点:此分类方案不再依靠TMDB划分电影、电视剧大类。分类名斜杠前面的即是一级分类,斜杠后面的则是二级分类。也就是你完全可以把TMDB电影类的动画电影,强行塞进动漫大类,具体怎么玩可以自由发挥。

目录结构

300

重点:一定要关闭按类型分类,开启按类别分类,其他建议按图设置。仅需设置一个目录,不要画蛇添足设置多个目录。

3.5 刮削设置

默认语法:

{{title}}{% if year %} ({{year}}){% endif %}/{{title}}{% if year %} ({{year}}){% endif %}{% if part %}-{{part}}{% endif %}{% if videoFormat %} - {{videoFormat}}{% endif %}{{fileExt}}

{{title}}{% if year %} ({{year}}){% endif %}/Season {{season}}/{{title}} - {{season_episode}}{% if part %}-{{part}}{% endif %}{% if episode %} - 第 {{episode}} 集{% endif %}{{fileExt}}

电视剧缺失了集标题,不是很爽,做一些改动

{{title}}{% if year %} ({{year}}){% endif %}/Season {{season}}/{{title}} - {{season_episode}}{% if part %}-{{part}}{% endif %}{% if episode_title %} - {{episode_title}}{% elif episode %} - 第 {{episode}} 集{% endif %}{{fileExt}}

是否有用存疑(你好有的)。

3.6 优先级配置

[{"name":"分辨率4K & 1080P","rule_string":" 4K > 1080P ","media_type":"","category":""},{"name":"高动态优先","media_type":"","category":"","rule_string":" DOLBY > HDR > !3D "},{"name":"BD优先","media_type":"","category":"","rule_string":" BLU > BLURAY > !3D "},{"name":"特效中文字幕优先","media_type":"","category":"","rule_string":" SPECSUB > CNSUB > !3D "},{"name":"4K only","media_type":"","category":"","rule_string":" UHD > 4K "}]

3.7 站点配置

cookiecloud配置好了并同步过了应该在站点管理中发现站点自己添加完毕了(馒头等除外),如果有需求自己生成并添加RSS。设置搜索使用的站点。

3.8 订阅配置

一言以蔽之:使用配置的优先级规则,画质从高到低筛选。设置订阅使用的站点。

3.9 通知配置

调整通知发送范围。

3.9.1 Telegram

方法一: bot查询

比较方便快捷,这种信息用第三方好像也没什么大问题。

@userinfobot&@groupinfobot

方法二: Api调用

使用https://api.telegram.org/bot<token>/getUpdates该网址能够查看Bot发送和接收的消息,从中获得想要让目标地址的chat id,群组和频道的id前面带横杠。大概如以下形式:

{
    "ok": true,
    "result": [
        {
            "update_id": 113527511,
            "message": {
                "message_id": 2,
                "from": {
                    "id": 8888,
                    "is_bot": false,
                    "first_name": "A",
                    "last_name": "B",
                    "username": "C",
                    "language_code": "zh-hans"
                },
                "chat": {
                    "id": 8888,
                    "first_name": "A",
                    "last_name": "B",
                    "username": "C",
                    "type": "private"
                },
                "date": 1523352556,
                "text": "hello"
            }
        },
        {
            "update_id": 115523124,
            "channel_post": {
                "message_id": 4,
                "sender_chat": {
                    "id": -123456,
                    "title": "Jenkins通知",
                    "type": "channel"
                },
                "chat": {
                    "id": -123456,
                    "title": "Jenkins通知",
                    "type": "channel"
                },
                "date": 152352051,
                "text": "channel"
            }
        },
    ]
}

里面的8888便是用户id,-123456便是 Jenkins通知 这个频道的id。

获得了id之后,可以直接使用curl来让bot发送消息

curl -s -X POST https://api.telegram.org/bot${TOKEN}/sendMessage -d "chat_id=${CHAT_ID}

3.9.2 企业微信

// TODO