Skip to main content

Migrer de Mariadb Vers PostgreSQL

Pourquoi

PostgreSQL est la base de donnée sur laquelle les devs de Paperless travaillent, pour ensuite adapter le tout pour Mariadb. PostgreSQL est un peu plus gourmand mais on s'assure que s'est ce avec quoi les devs imagine Paperless.

Prérequis

Lors de la migration, Paperless doit rester à la même version.

Export

Créez un dossier Export à la racine du projet, puis :

docker compose -f paperlessngx-compose.yaml exec -T paperless document_exporter ../export

Migration

Arrêter le stack

docker compose -f paperlessngx-compose.yaml down

Vider les dossiers db et media

PostgreSQL refusera de se lancer si ses dossiers ne sont pas vides.

# ça ou simplement vider le dossier db à la main si vous avez un backup.
mv /volume1/docker/paperlessngx/db /volume1/docker/paperlessngx/db-mariadb-backup
mkdir /volume1/docker/paperlessngx/db

Lancer la nouvelle stack en .override

Mise à part les variable de la base de donnée (nom de la db, utilisateur, mot de passe), veillez à ce que toute la config reste similaire à votre précédente config.

[Nouveau fichier : docker-compose.override.yaml]

version: "3.9"
services:
  db:
    image: postgres:15
    container_name: PaperlessNGX-DB
    hostname: paper-db
    environment:
      POSTGRES_DB: paperless
      POSTGRES_USER: paperlessuser
      POSTGRES_PASSWORD: [Nouvau mot de passe, pas ancien]
      TZ: Europe/Zurich
    networks:
      - paperless-ngx-network
    volumes:
      - /volume1/docker/paperlessngx/db:/var/lib/postgresql/data:rw
    restart: on-failure:5

  paperless:
    environment:
      PAPERLESS_DBENGINE: postgresql
      PAPERLESS_DBHOST: paper-db
      PAPERLESS_DBNAME: paperless
      PAPERLESS_DBUSER: paperlessuser
      PAPERLESS_DBPASS: [Nouvau mot de passe, pas ancien]

Et lancer la nouvelle stack + override :

docker compose -f paperlessngx-compose.yaml -f docker-compose.override.yaml up -d

Vérifiez les logs pour être sûr que PostgreSQL se soit bien lancé.

 Appliquer les migrations Django (Sécurité)

docker compose -f paperlessngx-compose.yaml exec paperless python3 manage.py migrate

Si vous voyez une erreur type column documents_document.deleted_at does not exist, c’est précisément qu’il faut faire cette migration Django.

Importer l'export

docker compose -f paperlessngx-compose.yaml exec paperless document_importer ../export

ça prend un petit temps.

Vérification

Tester de vous connecter comme d'habitude, aucun changement ne devrait être perceptible, à part le logo de l'application si modifié.

Regénérer les thumbnails (optionnel)

# Miniatures
docker compose -f paperlessngx-compose.yaml exec paperless document_thumbnails
# Archiver PDF/A + OCR (peut être long)
docker compose -f paperlessngx-compose.yaml exec paperless document_archiver --overwrite
# Variante: contrôler la charge CPU
docker compose -f paperlessngx-compose.yaml exec paperless document_archiver --overwrite --processes 2

Finalisation

Mixer le compose et l'override

Remplacer les service paperless et db sur fichier compose par les service du fichier override.