3712 字
19 分钟

Docker 部署 自动化观影平台MoviePilot

  • 2024年7月11日更新:重写了docker-compose.yaml文件,按照新版本参数方式调整

[admonition color=“red”]MoviePilot 是NasTools作者的新项目,是一款Nas媒体库自动化管理工具,仅用于学习交流使用,请勿在国内的平台宣传此项目。[/admonition]

由于MoviePilot的部署依赖多个服务,以及相关的基础知识,需要一定的技术。在安装之前,默认你已经掌握或了解以下的内容

  • Docker

    • 安装及基础的指令使用

    • Docker-compose 安装和使用

  • Linux 下的相关知识和指令操作

    • UID id -u

    • PID id -g

    • 查看端口占用命令 lsof -i:

    • 软链接、硬链接

    • Cron表达式

    • 查看主机IP ifconfig

  • PT 下载器

    • qbittorrent

    • transmission

  • 媒体服务器

    • emby

    • plex

    • jellyfin

  • PT站点

安装#

本指南默认采用Debian12 Linux系统进行安装部署,NAS用户请自行按照相关变量自行修改配置。

获取UID GID#

ssh 服务器 ,输入 id -u id -g 分别获取UID GID

  • UID=0

  • GID=0

创建目录#

1. MoviePilot目录#

需要设置三个目录,存放配置和core数据,以及媒体数据

在MoviePilot 目录下新建如下的目录结构

  • /MoviePilot/moviepilot/config → config 信息

  • /MoviePilot/moviepilot/core → 核心数据

  • /hdd/media → 媒体数据(文件硬链接目录)

2.QBitTorrent 目录#

需要设置两个目录,一个用来映射下载目录,一个用来映射QBitTorrent 的配置

在MoviePilot 目录下新建如下的目录结构

  • /MoviePilot/qbittorrent → config信息

  • /MoviePilot/media/downloads → 下载数据

4.Emby 目录#

需要设置两个目录,一个映射媒体数据,一个映射配置目录

在MoviePilot 目录下新建如下的目录结构

  • /MoviePilot/emby → config信息

  • /MoviePilot/media → 媒体数据(文件硬链接目录)

Terminal window
文件目录一览:
MoviePilot
├── emby
├── media
└── downloads
├── moviepilot
├── config
└── core
└── qbittorrent

依赖安装#

1.安装CookieCloud(不推荐安装,建议使用MoviePilot内置CookieCloud,见下方红字)#

CookieCloud是一个和自架服务器同步Cookie的小工具,可以将浏览器的Cookie及Local storage同步到手机和云端,它支持端对端加密,可设定同步时间间隔。主要用来同步各大PT站点的cookie信息供MoviePilot自动同步导入使用。

Terminal window
docker run -d --name=cookiecloud -p 8088:8088 --restart=always easychen/cookiecloud:latest

【测试是否安装成功】

打开 http://:8088 出现hello world 提示即安装服务端成功

【安装浏览器插件】

注意需要登录你的PT站点,一定要先登录上,否则后续MoviePilot启动时可能没有站点信息。

chrome商店 下载安装插件后,进行参数配置后保存,然后手动测试是否同步成功。

  • 服务器地址 如果是局域网,填写 http://<ip>:8088 ,如果有公网,则填写公网地址

  • 用户KEY 可以自定义,也可以使用默认生成的,后面会用到

  • 端对端加密密码 可以自定义,也可以使用默认生成的,后面会用到

由于外部CookieCloud 极其不稳定,容易同步cookie失败以及无法正常建立连接。因此建议不要使用自建的CookieCloud方案。优先使用MoviePilot的内置模块,填写方法同外部一样,只需要按照要求修改地址就行。即 服务器地址是 http(s):你的MoviePilot的IP:端口/cookiecloud

2.安装MoviePilot Emby qBitTorrent#

下面给出完整的docker-compose 文件,需要自行修改其中的变量

Terminal window
version: '3.3'
# MoviePilot 地址:https://github.com/jxxghp/MoviePilot
services:
qbittorrent:
image: 'linuxserver/qbittorrent:latest'
container_name: qbittorrent
restart: always
tty: true
hostname: qbittorrent
volumes:
- '/root/MoviePilot/qbittorrent/config:/config' # 目录已提前创建好
- '/hdd/media/download:/media/download' # 目录已提前创建好
tmpfs:
- '/tmp'
environment:
- 'QB_USERNAME=你的名称' # 自行修改
- 'QB_PASSWORD=你的密码' # 自行修改
- 'BT_PORT=49678'
- 'PUID=0'
- 'PGID=0'
ports:
- target: 8080
published: 8080
protocol: tcp
- target: 49678
published: 49678
protocol: tcp
- target: 49678
published: 49678
protocol: udp
network_mode: bridge
emby:
container_name: emby
ports:
- target: 8096
published: 8096
protocol: tcp
- target: 8920
published: 8920
protocol: tcp
- target: 11900
published: 11900
protocol: udp
- target: 7359
published: 7359
protocol: udp
volumes:
- '/root/MoviePilot/emby/config:/config' # 目录已提前创建好
- '/hdd/media:/data' # 目录已提前创建好
environment:
- TZ=Asia/Shanghai
restart: always
hostname: emby
network_mode: bridge
image: 'amilys/embyserver:latest'
moviepilot:
ports:
- target: 3000
published: 3000
protocol: tcp
environment:
# WEB服务端口,默认3000,可自行修改,不能与API服务端口冲突
- 'NGINX_PORT=3000'
# API服务端口,默认3001,可自行修改,不能与WEB服务端口冲突
- 'PORT=3001'
# 运行程序用户的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=true'
# 网络代理,访问themoviedb或者重启更新需要使用代理访问,格式为http(s)://ip:port、socks5://user:pass@host:port
- 'PROXY_HOST='
# 观众认证
- 'AUTH_SITE=audiences'
- 'AUDIENCES_UID=你的id' # 自行修改获取
- 'AUDIENCES_PASSKEY=你的key'
# 超级管理员用户名,默认admin,安装后使用该用户登录后台管理界面,注意:启动一次后再次修改该值不会生效,除非删除数据库文件!
- 'SUPERUSER=admin'
# API密钥,默认moviepilot,在媒体服务器Webhook、微信回调等地址配置中需要加上?token=该值,建议修改为复杂字符串
- 'API_TOKEN=moviepilot'
# 大内存模式,默认为false,开启后会增加缓存数量,占用更多的内存,但响应速度会更快
- 'BIG_MEMORY_MODE=true'
# 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=true'
# 启动时自动检测和更新资源包(站点索引及认证等),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'
# 电影重命名格式
- '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/,https://github.com/thsrite/MoviePilot-Plugins/,https://github.com/honue/MoviePilot-Plugins/,https://github.com/InfinityPacer/MoviePilot-Plugins/,https://github.com/dandkong/MoviePilot-Plugins/,https://github.com/Aqr-K/MoviePilot-Plugins/,https://github.com/AnjoyLi/MoviePilot-Plugins/,https://github.com/WithdewHua/MoviePilot-Plugins/,https://github.com/HankunYu/MoviePilot-Plugins/,https://github.com/baozaodetudou/MoviePilot-Plugins/,https://github.com/almus2zhang/MoviePilot-Plugins/,https://github.com/Pixel-LH/MoviePilot-Plugins/,https://github.com/lightolly/MoviePilot-Plugins/,https://github.com/suraxiuxiu/MoviePilot-Plugins/,https://github.com/gxterry/MoviePilot-Plugins/'
restart: always
tty: true
volumes:
- '/root/MoviePilot/moviepilot/config:/config'
- '/root/MoviePilot/moviepilot/core:/moviepilot'
- '/var/run/docker.sock:/var/run/docker.sock:ro'
- '/hdd/media:/media'
network_mode: bridge
hostname: moviepilot
container_name: moviepilot
image: 'jxxghp/moviepilot:latest'

下面是一些具体的参数解析

需要填写的参数和环境变量有很多,参考官方文档,建议复制后使用

  • 容器名称 随意填写,或者使用默认值

  • 勾选 启用自动重新启动

  • 端口设置-本地端口 设置为3000

  • 存储空间设置

    • /MoviePilot/moviepilot/config/config

    • /MoviePilot/moviepilot/core/moviepilot

    • /var/run/docker.sock/var/run/docker.sock 映射宿主机docker.sock文件到容器/var/run/docker.sock,以支持内建重启操作。

    • /MoviePilot/media/media

  • 环境变量 设置(key=value)

    • PUID=0 根据实际获取到的为准,填写错误有文件读写权限问题!

    • PGID=0 根据实际获取到的为准,填写错误有文件读写权限问题!

    • UMASK=022

    • TZ=Asia/Shanghai 时区

    • MOVIEPILOT_AUTO_UPDATE=release 重启更新

    • NGINX_PORT=3000 WEB服务端口

    • SUPERUSER=xxxx 超管名,自己定义

    • SUPERUSER_PASSWORD=xxxxxx 超管密码,自定义即可,新版本会默认在log下生成,需要查看

    • WALLPAPER=tmdb 登录首页电影海报,tmdb/bing,默认tmdb

    • API_TOKEN=moviepilot API密钥,在媒体服务器Webhook、微信回调等地址配置中需要加上?token=<该值>

    • PROXY_HOST= 网络代理,可选

    • TMDB_API_DOMAIN=api.themoviedb.org TMDB API地址

    • DOWNLOAD_PATH=/media/downloads 下载保存目录,不要自定义

    • DOWNLOAD_MOVIE_PATH=/media/downloads/movies 电影下载目录,不要修改

    • DOWNLOAD_TV_PATH=/media/downloads/tv 电视剧下载目录,不要修改

    • DOWNLOAD_ANIME_PATH=/media/downloads/anime 动画下载目录,不要修改

    • DOWNLOAD_SUBTITLE=false 下载站点字幕

    • DOWNLOAD_CATEGORY=false 下载二级目录开关

    • DOWNLOADER_MONITOR=true 下载器监控

    • SUBSCRIBE_MODE=spider 订阅模式默认为spider

    • SUBSCRIBE_RSS_INTERVAL=30 RSS订阅模式刷新时间间隔(分钟)

    • SCRAP_METADATA=true 刮削入库的媒体文件

    • SCRAP_FOLLOW_TMDB=true 新增已入库媒体是否跟随TMDB信息变化

    • TORRENT_TAG=MOVIEPILOT 下载器种子标签

    • LIBRARY_PATH=/media 媒体库目录

    • LIBRARY_MOVIE_NAME=movies 电影媒体库目录名称

    • LIBRARY_TV_NAME=tv 电视剧媒体库目录称

    • LIBRARY_ANIME_NAME=anime 动漫媒体库目录称

    • LIBRARY_CATEGORY=false 媒体库二级分类开关

    • TRANSFER_TYPE=link 整理转移方式,支持link/copy/move/softlink/rclone_copy/rclone_move ,推荐使用硬链接

    • OVERWRITE_MODE=size 转移覆盖模式,默认为size,支持nerver/size/always/latest,分别表示不覆盖同名文件/同名文件根据文件大小覆盖(大覆盖小)/总是覆盖同名文件/仅保留最新版本,删除旧版本文件(包括非同名文件)

    • COOKIECLOUD_HOST=http://:8088 cookie cloud 服务器地址

    • COOKIECLOUD_KEY=xxx cookie cloud 浏览器插件中设置的key

    • COOKIECLOUD_PASSWORD=xxx cookie cloud 浏览器插件中设置的端对端加密秘钥

    • COOKIECLOUD_INTERVAL=20 CookieCloud同步间隔(分钟)

    • USER_AGENT=USER_AGENT=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 CookieCloud对应的浏览器UA,可选,设置后可增加连接站点的成功率,同步站点后可以在管理界面中修改

    • SUBSCRIBE_SEARCH=false 订阅搜索,true/false,默认false

    • PLUGIN_MARKET=https://raw.githubusercontent.com/jxxghp/MoviePilot-Plugins/main/

    • MESSAGER=telegram 消息通知渠道,支持 telegram/wechat/slack/synologychat,开启多个渠道时使用,分隔。同时还需要配置对应渠道的环境变量,非对应渠道的变量可删除,推荐使用telegram。非必选项,如果不设置就不会有消息通知。

    • TELEGRAM_TOKEN=xxxx Telegram Bot Token 教程

    • TELEGRAM_CHAT_ID=xxxxx Telegram Chat ID

    • DOWNLOADER=qbittorrent 下载器,支持qbittorrent/transmission

    • QB_HOST=http://:8080 qbittorrent地址,根据你自己设置的填写

    • QB_USER=admin qbittorrent 用户名,根据你设置的填写

    • QB_PASSWORD=adminadmin qbittorrent密码,根据你设置的填写

    • QB_CATEGORY=false qbittorrent分类自动管理

    • QB_SEQUENTIAL=true qbittorrent按顺序下载

    • QB_FORCE_RESUME=false qbittorrent忽略队列限制,强制继续

    • MEDIASERVER=emby 媒体服务器,支持emby/jellyfin/plex

    • EMBY_HOST=http://:8096 Emby服务器地址,,根据你设置的填写

    • EMBY_API_KEY=xxxxxxx Emby Api Key,在Emby设置->高级->API密钥处生成,可以先不填,后面部署完成补充然后更新容器配置就行

    • MEDIASERVER_SYNC_INTERVAL=6

    • AUTH_SITE=hdfans 认证站点非常重要!需要填写MoviePilot支持的认证PT站点信息,完整的列表请看官方的支持,如果没有站点可以去电报群求药

    • HDFANS_UID=<站点id>

    • HDFANS_PASSKEY=<站点秘钥>

    • BIG_MEMORY_MODE=false 大内存模式

    • 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}} 电视剧重命名格式

【测试】

打开 http://:3000 登录进入,密码使用 docker logs moviepilot 查看

使用#

二级目录 插件安装#

前往插件下 安装 二级分类策略 - 配置 插件

Terminal window
# 配置电影的分类策略
movie:
# 分类名同时也是目录名
动画电影:
# 匹配 genre_ids 内容类型,16是动漫
genre_ids: '16'
华语电影:
# 匹配语种
original_language: 'zh,cn,bo,za'
# 未匹配以上条件时,分类为外语电影
外语电影:
# 配置电视剧的分类策略
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 内容类型,99是纪录片
genre_ids: '99'
综艺:
# 匹配 genre_ids 内容类型,10764 10767都是综艺
genre_ids: '10764,10767'
儿童:
# 匹配 genre_ids 内容类型,10762是儿童
genre_ids: '10762'
国产剧:
# 匹配 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,KP,KR,TH,IN,SG'
# 未匹配以上分类,则命名为未分类
未分类:

目录设定#

在设定 目录 选项中,根据 你的 下载目录 和预想 的刮削目录 进行修改。

我的目录结构

Terminal window
media
├── download
├── AV
├── 动漫
├── 手动整理
├── 电影
└── 电视剧
├── 动漫
├── 儿童
└── 番剧
├── 电影
├── 动画电影
├── 华语电影
└── 外语电影
└── 电视剧
├── 国产剧
├── 日韩剧
├── 未分类
├── 欧美剧
├── 纪录片
└── 综艺

站点同步#

按照上文红色的cookiecloud进行设置。

如果上述步骤都完成,恭喜你,大概率已经搭建完成。现在可以同步站点进行测试

如果同步成功,站点管理 栏目 里面应该会有相关的站点。

下载器和媒体管理器#

这部分应该没人不会吧,根据你自己的部署情况进行修改调整。

如此,一个最基础的MoviePilot已经搭建完成,剩下的可以自由探索。

Docker 部署 自动化观影平台MoviePilot
https://catcat.blog/docker-moviepilot.html
作者
猫猫博客
发布于
2024-02-28
许可协议
CC BY-NC-SA 4.0