Einleitung
In meinem Homelab betreibe ich eine Paperless-NGX Instanz, die eine PostgreSQL-Datenbank zur Datenverwaltung verwendet. Lange Zeit habe ich es vermieden, meine Postgres-Datenbanken auf die nächste Major-Version zu aktualisieren. Der Hauptgrund dafür war die Notwendigkeit, Migrationen über Dumps durchzuführen, da PostgreSQL keine interne Migration von Major-Versionen unterstützt.
Mit der Veröffentlichung eines verständlicheren Guides von Paperless-NGX habe ich mich nun endlich getraut, das Update durchzuführen.
Vorbereitungen und Backup
Bevor ich mit dem Update begann, habe ich ein vollständiges Backup meiner Proxmox LXC Instanz erstellt.
Diese Sicherheitsmaßnahme ist essenziell, um bei eventuellen Problemen während des Updates jederzeit einen Wiederherstellungspunkt zu haben.
Schritt-für-Schritt-Anleitung zum Update
Folgend ist die detaillierte Anleitung, die ich befolgt habe.
Bitte beachtet, dass diese Anleitung auf meine spezifische Konfiguration abgestimmt ist und eventuell Anpassungen für andere Setups erforderlich sind.
1. Alte docker-compose.yml Konfiguration
services:
db:
image: docker.io/library/postgres:15
volumes:
- db_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: database
POSTGRES_USER: username
POSTGRES_PASSWORD: password
volumes:
db_data:
2. Herunterfahren der gesamten Docker Compose Instanz
docker compose down
Damit nicht mehr auf die Datenbank zugegriffen wird und es zum Datenverlust kommen könnte.
3. Starten des Postgres Containers (Version 15)
docker compose up -d db
Hier wird explizit nur der PostgreSQL Container db
detached hochgefahren.
4. Datenbank-Dump erstellen
Der Datenbank-Dump wird jetzt über pg_dumpall erzeugt. Dies schreibt den gesamten Inhalt der Dankenbank in ein File und kann je nach Datenbankgröße einige Zeit andauern.
docker compose exec db pg_dumpall -U username > dump.sql
An dieser Stelle ist es sinnvoll die dump.sql
Datei zu überprüfen, um sicherzustellen, dass der Dump korrekt erstellt wurde.
Die dump.sql
Datei wird hier im Ordner, in dem der Befehl ausgeführt wurde, erzeugt.
5. Herunterfahren des Postgres Containers
docker compose down db
6. Löschen des Datenbankvolumes
Um sicherzustellen, dass keine alten Datenreste verbleiben, wird das Datenbankvolume gelöscht:
docker volume rm db_data
7. Aktualisieren der docker-compose.yml für Postgres 16
services:
db:
image: docker.io/library/postgres:16
volumes:
- db_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: database
POSTGRES_USER: username
POSTGRES_PASSWORD: password
volumes:
db_data:
8. Neues Postgres Image herunterladen
docker compose pull
9. Starten des neuen Postgres Containers (Version 16)
docker compose up -d db
10. Import des Datenbank-Dumps
Mit folgendem Befehl wird der Dump in die neue Postgres-Instanz eingespielt:
cat dump.sql | docker exec -i db psql -U username
11. Erneutes Herunterfahren des Postgres Containers
docker compose down
12. Starten der gesamten Docker Compose Instanz
docker compose up
Fazit
Der Prozess des Updates von PostgreSQL 15 auf 16 war dank der klaren Anleitung relativ unkompliziert. Es ist jedoch wichtig, vor solch einem Upgrade stets vollständige Backups zu erstellen und sich ausreichend Zeit zu nehmen, um den Vorgang sorgfältig durchzuführen.
Mit der neuen Postgres-Version kann nun die Paperless-NGX Instanz von den neuesten Features und Verbesserungen profitieren.
Alle weiteren Postgres Instanzen in meinem Homelab werden folgen!
Schreibe einen Kommentar