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.