Hi there,
It’s been a while, hasn’t it. Had a few stressful months, but I should be back now. So, to get back into it, I will start with something simple.
I’ve had my Paperless-ngx server running for years, using Docker to host my personal documents. The main application has been updated to the latest version, except for the database, which has remained on version 13 since its initial setup.
An in-place upgrade is not possible with PostgreSQL. We need to back up the database, deploy a new empty server, and then import the backup. However, for Paperless-ngx, there’s an easier way.
The integrated exporter in Paperless-ngx can export everything, including the database. This means we can redeploy a clean instance of Paperless-ngx and import the data, making the process much smoother.
Let’s begin.
Upgrading PostgreSQL
Create Paperless-ngx backup
FLet’s begin by examining the Docker Compose configuration file used in this setup, which has some differences from the standard image. We’ll focus on areas marked in red. Please note that this file is located at /root/paperless-ngx and ensure you’re within this directory when running commands.
The current PostgreSQL version is 13 und the folder path ist /etc/paperless-ngx.
version: "3.4"name: paperless-ngxservices: broker: image: docker.io/library/redis:7 restart: unless-stopped networks: - INTERNAL volumes: - redisdata:/data db: image: docker.io/library/postgres:13 restart: unless-stopped networks: - INTERNAL volumes: - pgdata:/var/lib/postgresql/data environment: POSTGRES_DB: paperless POSTGRES_USER: paperless POSTGRES_PASSWORD: paperless webserver: image: ghcr.io/paperless-ngx/paperless-ngx:latest restart: unless-stopped networks: - INTERNAL dns: - 10.10.0.50 depends_on: - db - broker - gotenberg - tika ports: - 8000:8000 healthcheck: test: ["CMD", "curl", "-fs", "-S", "--max-time", "2", "http://localhost:8000"] interval: 30s timeout: 10s retries: 5 volumes: - /etc/paperless-ngx/data:/usr/src/paperless/data - /etc/paperless-ngx/media:/usr/src/paperless/media - /etc/paperless-ngx/export:/usr/src/paperless/export - /etc/paperless-ngx/consume:/usr/src/paperless/consume env_file: docker-compose.env environment: PAPERLESS_REDIS: redis://broker:6379 PAPERLESS_DBHOST: db PAPERLESS_TIKA_ENABLED: 1 PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000 PAPERLESS_TIKA_ENDPOINT: http://tika:9998 PAPERLESS_CSRF_TRUSTED_ORIGINS: "YOUR-URL" gotenberg: image: docker.io/gotenberg/gotenberg:8.7 restart: unless-stopped networks: - INTERNAL command: - "gotenberg" - "--chromium-disable-routes=true" tika: image: ghcr.io/paperless-ngx/tika:latest restart: unless-stopped networks: - INTERNALvolumes: data: media: pgdata: redisdata:networks: INTERNAL: external: true
Confirm that paperless is running and execute the following command to export the database. I will be executing them as “root”
## Change folderpaperless-ngx :: ~ » cd /root/paperless-ngx## Create a Paperless-NGX backuppaperless-ngx :: paperless-ngx » docker compose exec webserver document_exporter ../export
The export will be within the /etc/paperless-ngx/export folder.
Once that’s done, stop the containers.
paperless-ngx :: paperless-ngx » docker compose stop
Restore Paperless-ngx Backup
Alright. The next few steps are irreversible, so make sure you either have a recent backup of the system, a snapshot or anything similar.
Next, we need to remove the PostgreSQL database. To do this, I will delete the volume associated with it. But first, we need to identify it.
## List the docker volumespaperless-ngx :: ~ » docker volume lslocal authentik_databaselocal authentik_redislocal graylog_graylog_datalocal graylog_log_datalocal graylog_mongo_datalocal mealie_mealie-datalocal paperless-ngx_pgdatalocal paperless-ngx_redisdatalocal portainer_data
Ok. We have the volume. It’s “paperless-ngx_pgdata” in my case. Make sure you have the correct one. Let’s remove it.
paperless-ngx :: ~ » docker volume rm paperless-ngx_pgdata
Next, delete (or move) the folders “data” and “media” within the paperless-ngx folder.
## Remove folders with datapaperless-ngx :: ~ » rm -rf /etc/paperless-ngx/datapaperless-ngx :: ~ » rm -rf /etc/paperless-ngx/media## Recreate folderpaperless-ngx :: ~ » mkdir /etc/paperless-ngx/datapaperless-ngx :: ~ » mkdir /etc/paperless-ngx/media
Great. We need to change the PostgreSQL version in the docker-compose.yml file. Change it to “16” and save the file.
... volumes: - redisdata:/data db: image: docker.io/library/postgres:16 restart: unless-stopped...
Pull the new image and start the stack.
## Switch to the docker-compose.yml folderpaperless-ngx :: ~ » cd /root/paperless-ngx## Pull the latest imagepaperless-ngx :: paperless-ngx » docker compose pull## Start the containerspaperless-ngx :: paperless-ngx » docker compose up -d
Now we can restore the backup.
## Restore the Backuppaperless-ngx :: paperless-ngx » docker compose exec webserver document_importer ../export
After a few seconds, the server should be restored.
That’s it.
Hope this helps. Till next time.
Kommentare