Docker

MoviePilot在docker境像中同时还内置了虚拟显示浏览器仿真内建重启代理缓存等特性,推荐使用docker方式安装。 使用 docker run -itd 命令安装时,请去除其中的 # 开头的注释行,以防报错。

docker-cli {.tabset}

V2版本

docker run -itd \
    --name moviepilot-v2 \
    --hostname moviepilot-v2 \
    --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 'SUPERUSER=admin' \ #超级管理员用户名
    -e 'SUPERUSER_PASSWORD=你的初始登录密码' \ #超级管理员初始密码
    --restart always \
    jxxghp/moviepilot-v2:latest

V1版本

docker run -itd \
    --name moviepilot \
    --hostname moviepilot \
    -p 3000:3000 \
    -v /media:/media \
    -v /moviepilot/config:/config \
    -v /moviepilot/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=iyuu' \
    -e 'IYUU_SIGN=xxxx' \
    -e 'SUPERUSER=admin' \
    -e 'API_TOKEN=建议大于16位的复杂字符串' \
    --restart always \
    jxxghp/moviepilot:latest

docker-compose {.tabset}

V2-全功能版

services:

  moviepilot:
    stdin_open: true
    tty: true
    container_name: moviepilot-v2
    hostname: moviepilot-v2
    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' #重启MP权限
      - '/tr/config/torrents:/torrents'  #TR种子位置
      - '/qbittorrent/data/data/BT_backup:/BT_backup' #QB种子位置
    environment:
      - 'NGINX_PORT=3000'
      - 'PORT=3001'
      - 'PUID=0'
      - 'PGID=0'
      - 'UMASK=000'
      - 'TZ=Asia/Shanghai'
      - 'SUPERUSER=admin'
      - 'SUPERUSER_PASSWORD=你的初始登录密码'
      - 'DB_TYPE=postgresql'
      - 'DB_POSTGRESQL_HOST=postgresql'
      - 'DB_POSTGRESQL_PORT=5432'
      - 'DB_POSTGRESQL_DATABASE=moviepilot'
      - 'DB_POSTGRESQL_USERNAME=moviepilot'
      - 'DB_POSTGRESQL_PASSWORD=pg_password'
      - 'CACHE_BACKEND_TYPE=redis'
      - 'CACHE_BACKEND_URL=redis://:redis_password@redis:6379'
    restart: always
    depends_on:
      postgresql:
        condition: service_healthy
      redis:
        condition: service_healthy
    image: jxxghp/moviepilot-v2:latest

  redis:
    volumes:
        - /volume1/docker/redis/data:/data
    image: redis
    command: redis-server --save 600 1 --requirepass redis_password
    healthcheck:
      test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5

  postgresql:
    image: postgres
    restart: always
    environment:
      POSTGRES_DB: moviepilot
      POSTGRES_USER: moviepilot
      POSTGRES_PASSWORD: pg_password
    volumes:
    	# 仅 postgresql 18.0+ 及以上版本可用,根据版本二选一即可
      - /volume1/docker/postgresql:/var/lib/postgresql
      # 仅 postgresql 17.6 及以下版本可用,根据版本二选一即可
      #- /volume1/docker/postgresql/data:/var/lib/postgresql/data 
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U moviepilot -d moviepilot"]
      interval: 10s
      timeout: 5s
      retries: 5
  
	# 最后这个迁移数据库的    
  pgloader:
    image: dimitri/pgloader:latest
    volumes:
      - <MP配置文件路径>:/mp_config
    command: >
      pgloader 
      sqlite:///mp_config/user.db 
      postgresql://moviepilot:pg_password@postgresql:5432/moviepilot
    depends_on:
      postgresql:
        condition: service_healthy

V2-纯净版

version: '3.3'
services:
  moviepilot:
    stdin_open: true
    tty: true
    container_name: moviepilot-v2
    hostname: moviepilot-v2
    network_mode: host
    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'
      - 'SUPERUSER=admin' #超级管理员用户名
      - 'SUPERUSER_PASSWORD=你的初始登录密码' #超级管理员初始密码

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

V2-小白版

version: '3.3'
services:
  moviepilot:
    stdin_open: true  #是否打开标准输入流(交互模式),为 true 时容器可以保持运行并与用户交互
    tty: true  #是否分配伪终端,使容器的终端行为更像一个真实的终端
    container_name: moviepilot-v2  #容器的名称
    hostname: moviepilot-v2  #容器主机名
    
    # 网关设置
    network_mode: host  #内置的网关
    # networks:  #自定义网关
    #  - moviepilot  

    # 端口映射,当network_mode的值为 host 时,将失效
    # ports:
    	# 前端 UI 显示
      # - target: 3000  #容器内部端口设置为 3000
      #   published: 3000  #映射到宿主机的 3000 端口,允许外部访问
      #   protocol: tcp  #TCP 协议,可选udp
      # API 接口
      # - target: 3001  #容器内部端口设置为 3001
      #   published: 3001  #映射到宿主机的 3001 端口,允许外部访问
      #   protocol: tcp  #TCP 协议,可选udp

    # 目录映射:宿主机目录:容器内目录
    volumes:
      - '/media:/media'  #媒体库或下载库路径
      - '/moviepilot-v2/config:/config'  #moviepilot 的配置文件存放路径
      - '/moviepilot-v2/core:/moviepilot/.cache/ms-playwright'  #浏览器内核存放路径
      - '/var/run/docker.sock:/var/run/docker.sock:ro'  #用于获取宿主机的docker管理权,一般用于UI页面重启或自动更新
      
    # 环境变量:- '变量名=值‘
    environment:
      - 'NGINX_PORT=3000'  #UI页面的内部监听端口
      - 'PORT=3001'  #API接口的内部监听端口
      - 'PUID=0'  #设置应用运行时的用户 ID 为 0(root 用户)
      - 'PGID=0'  #设置应用运行时的组 ID 为 0(root 组)
      - 'UMASK=000'  #文件创建时的默认权限掩码,000 表示不限制权限
      - 'TZ=Asia/Shanghai'  #设置时区为上海(Asia/Shanghai)
      - 'SUPERUSER=admin'  #设置超级用户为 admin
      - 'SUPERUSER_PASSWORD=你的初始登录密码' #超级管理员初始密码
      - 'ADVANCED_MODE=false' #关闭高级模式,只显示简化设置项
      
    # 重启模式: 
    restart: always  #始终重启
    image: jxxghp/moviepilot-v2:latest
    
# 当使用内置网关时,可不启用
# networks:
#   moviepilot:  #定义一个名为 moviepilot 的自定义网络
#     name: moviepilot  #网络的名称


V1版本

version: '3.3'

services:

    moviepilot:
        stdin_open: true
        tty: true
        container_name: moviepilot
        hostname: moviepilot
        networks:
            - moviepilot
        ports:
            - target: 3000
              published: 3000
              protocol: tcp
        volumes:
            - '/media:/media'
            - '/moviepilot/config:/config'
            - '/moviepilot/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'
            - 'IYUU_SIGN=xxxx'
            - 'SUPERUSER=admin'
            - 'API_TOKEN=建议大于16位的复杂字符串'
        restart: always
        image: jxxghp/moviepilot:latest

networks:
  moviepilot:
    name: moviepilot

相关说明:

  • /media为媒体文件目录,根据实际情况调整,需要注意的是,如果你计划使用硬链接来整理文件,那么文件下载目录和整理后的媒体库目录只能映射一个根目录不能分开映射,否则将会导致跨盘无法硬链接。 这是由docker的目录映射机制决定的,下面这些情况都会导致跨盘无法硬链接:
    1. 下载目录和媒体库目录分别属于两个不同的磁盘
    2. 下载目录和媒体库目录属于同一磁盘,但在两个不同的分区/存储空间/存储池中
    3. 下载目录和媒体库目录分别作为两个目录路径映射到docker容器中
  • /moviepilot/config为配置文件、数据库文件、日志文件、缓存文件使用的文件目录,该目录将会存储所有设置和数据,需根据实际情况调整。
  • /moviepilot/core为浏览器内核下载保存目录(避免容器重置后重新下载浏览器内核),需根据实际情况调整。
  • /var/run/docker.sock用于内建重启时使用,建议映射。
  • 默认使用3000为WEB服务端口,3001为Api服务端口,可根据实际情况调整。
  • AUTH_SITESUPERUSERAPI_TOKEN等其它变量请根据 配置参考 说明调整和补充,上述为最基础配置,实际可以根据需要补充其它变量。

Windows

Windows环境下提供两种安装方式,推荐使用安装版本

可执行文件版本

项目在编译时,将Python以及相关的代码打包到一个exe文件中使用,点击 此处 下载exe文件,双击运行后会自动生成config配置文件目录,以及nginx前端资源目录,正常运行后会操作系统任务栏会生成MoviePilot图标,输入localhost:3000可访问后端管理WEB。

  • 如运行后无法正常解压,请使用管理员权限运行。
  • 如被杀毒软拦截,则需要将运行目录加入白名单放行,因打包方式的原因有的杀毒软件会识判为病毒。
  • 还需根据 配置参考 ,在 Windows 系统属性 -> 高级设置 -> 环境变量中添加认证等环境变量。
  • 由于该版本是预编译后再打包的方式,在功能上存在一定的限制,比如不支持内建重启、除内置插件库外不支持安装其它第三方插件库插件等。

安装版本

Windows-MoviePilot 项目提供,参考项目说明使用。

V2版本:https://github.com/developer-wlj/Windows-MoviePilot/tree/v2

Synology套件

DSM7 添加套件源:https://spk7.imnks.com/ ,安装后通过MoviePilot配置入口,根据 配置参考 进行配置使用。

该套件由套件源作者维护,如有问题需要向套件源维护方寻求帮助。

源代码运行

MoviePilot项目已拆分为多个项目,使用源码运行时需要手动将相关项目文件进行整合:

  1. 使用git clone或者下载源代码包等方式下载主项目 MoviePilot 文件到本地。
git clone https://github.com/jxxghp/MoviePilot
  1. 将工程 MoviePilot-Plugins plugins目录下的所有文件复制到app/plugins目录,icons目录下的所有文件复制到前端项目的public/plugin_icon目录下
  2. 将工程 MoviePilot-Resources resources目录下的所有文件复制到app/helper目录
  3. 执行命令:pip install -r requirements.txt 安装依赖
  4. 执行命令:PYTHONPATH=. python app/main.py 启动主服务(部分IDE提供一键启动、调试功能,请先设置工作目录为/app,并将环境变量文件设置为/config/app.env)
  5. 根据前端项目 MoviePilot-Frontend 说明,启动前端服务

反向代理

如需开启域名访问MoviePilot,则需要搭建反向代理服务。以nginx为例,需要添加以下配置项,否则可能会导致部分功能无法访问(ip:port修改为实际值):

location / {
    proxy_pass http://ip:port;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

反向代理使用SSL时,还需要开启http2,否则会导致日志加载时间过长或不可用:

server {
    listen 443 ssl;
    http2 on;
    # ...
}

代理服务连接超时时间应尽量长⼀些,比如10分钟,避免代理服务器强制中断请求。