前言

MoviePilot 的资深玩家们,你的媒体库是不是越来越大了?你可能已经习惯了 MoviePilot 的自动化管理,从自动下载、重命名到刮削整理,一切都井井有条。但随着电影和剧集数量的飙升,你有没有感觉到,在执行批量任务或者同时进行多项操作时,软件响应开始有点迟缓?

这很正常,因为 MoviePilot 默认使用的 SQLite 数据库虽然轻巧,但在处理庞大的数据高并发请求时,性能会遇到瓶颈。这就像你的媒体库从一间小书房变成了国家图书馆,但你还在用一张 Excel 表格来管理,自然会力不从心。

不过好消息是,MoviePilot 最新版本已经支持 PostgreSQL 数据库!这是一个真正的企业级数据库,专为高并发和大数据量而生。切换到 PostgreSQL,能让你的 MoviePilot 瞬间“超频”,无论是元数据刮削、文件管理,还是各种自动化任务,都会变得无比丝滑。

这篇教程,就带你把你的 MoviePilot 媒体库管理系统,从“小作坊”升级为“自动化工厂”。

部署 PostgreSQL “中央数据库”

创建 Compose项目

由于各家 Nas面板部署多多少少会有 bug,建议使用 Compose 方式进行部署

version: '3.8'
services:
  postgresql:
    container_name: postgresql  # 定义容器名称
    image: postgres:latest      # 使用最新的 PostgreSQL 镜像
    network_mode: host          # 使用宿主机网络模式,容器直接使用宿主机 IP 和端口
    environment:
      - TZ=Asia/Shanghai      # 设置时区,确保时间同步
      - PGPORT=5432           # 设置数据库端口
      - POSTGRES_DB=moviepilot      # 设置数据库名称
      - POSTGRES_USER=moviepilot    # 设置数据库用户
      - POSTGRES_PASSWORD=moviepilot  # 设置用户密码(请务必修改为复杂密码!)
    volumes:
      - ./postgresql:/var/lib/postgresql/data  # 映射数据卷,持久化数据库数据到当前目录下的 postgresql 文件夹
    restart: always             # 容器异常退出时自动重启

Compose项目的 yaml 存放路径为:/volume1/docker/postgresql 后面需要用到

设置用户组

进入容器内部

为你的 moviepilot 用户设置好所有权限。

# 进入容器(Nas用户可以直接忽略,已经通过面板进入终端)
docker exec -it postgresql bash

# 连接到 PostgreSQL
psql -U moviepilot

# 授予所有权限
GRANT ALL PRIVILEGES ON SCHEMA public TO moviepilot;
GRANT ALL PRIVILEGES ON DATABASE moviepilot TO moviepilot;
ALTER USER moviepilot CREATEDB;

# 退出 psql
\q

SQLite数据库迁移到 PostgreSQL数据库

备份源数据库文件

找到旧版文件

复制到PostgreSQL容器配置根目录下

我的是这个路径:/volume1/docker/postgresql/postgresql/user.db

将旧文件改名为 user-Backup.db

再次强调,动手前请务必备份你的 user.db 文件!

进入 PostgreSQL 容器,安装 pgloader,然后让它开始工作。

如果长时间没有安装成功的话可以尝试运行文章最后热心群友提供的内容

# 进入容器(Nas用户可以直接忽略,已经通过面板进入终端)
docker exec -it postgresql bash

# 更新和安装 pgloader,慢是正常的,建议走全局代理
apt update
apt install pgloader

# 执行数据迁移,启动“搬家”,注意端口需要对应前面环境变量端口,第一个是moviepilot是用户名、第二个是密码、第三个是数据库名
pgloader sqlite:////var/lib/postgresql/data/user.db postgresql://moviepilot:moviepilot@localhost:5432/moviepilot

配置MoviePilot使用PostgreSQL

在MoviePilot的环境变量或配置文件中设置以下参数(请设置复杂密码,不要使用默认密码):

services:
  moviepilot:
    image: jxxghp/moviepilot-v2:latest
    container_name: moviepilot-v2
    hostname: moviepilot-v2
    stdin_open: true
    tty: true
    ports:
      - "3000:3000"
    volumes:
      - '/data:/media'
      - '/media/CloudDrive:/cloud:shared'
      - './moviepilot/config/data/EmbyReporter/res:/config/plugins/EmbyReporter'
      - './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=xxxx'
      - 'HHCLUB_USERNAME=xxx'
      - 'AUDIENCES_PASSKEY=xxxx'
      - 'API_TOKEN=xxxxx'
      - 'MOVIEPILOT_AUTO_UPDATE=release'
      - 'SUPERUSER=xxxxx'
      # 数据库环境变量配置以下内容
      - 'DB_TYPE=postgresql'
      - 'DB_POSTGRESQL_HOST=127.0.0.1'
      - 'DB_POSTGRESQL_PORT=5432'
      - 'DB_POSTGRESQL_DATABASE=moviepilot'
      - 'DB_POSTGRESQL_USERNAME=moviepilot'
      - 'DB_POSTGRESQL_PASSWORD=moviepilot'#修改为postgresql容器的值
    restart: always

验证配置

如果是先升级到了 v2.7.3+ 版本再切换数据库的,在PostgreSQL对应数据库中执行以下语句,并重启MP,以触发数据库升级:

# 进入容器(Nas 用户用面板进去则不用)
docker exec -it postgresql bash
# 连接到PostgreSQL
psql -U moviepilot
update alembic_version set version_num = 'd58298a0879f';

大功告成!

现在,重启你的 MoviePilot 容器。检查日志,如果看到它成功连接到 PostgreSQL,那么恭喜你!你已经成功给你的 MoviePilot 完成了一次“引擎大换血”。你会立刻感觉到,不管是页面加载、搜索,还是多任务操作,都变得无比丝滑流畅

享受你的全新体验吧,你的媒体库管理工具将变得前所未有的强大!

另一种一键迁移方案

docker run -d -p 5055:5055 --name sqlite-to-postgre baozaodetudou/sqlite-to-postgres