Selbst betreiben

Postgres

Welche Postgres-Version DDM braucht, wie Fehlerbehebungen ankommen und wie Sie auf eine neue Hauptversion umziehen.

DDM läuft mit Postgres 18 – genau dieser Hauptversion, aus unserem Image postgres:18. Es bringt das deutsche Wörterbuch mit, mit dem DDM sucht. Eine andere Hauptversion, auch eine neuere, nutzen Sie erst, wenn wir sie mit einem Image anbieten und hier beschreiben.

Fehlerbehebungen von Postgres

Die Fehlerbehebungen von Postgres 18 (18.1, 18.2 …) kommen mit jeder DDM-Version unter demselben Tag, postgres:18. Sie brauchen keine Umstellung der Daten – ein Neustart mit dem neuen Image genügt, DDM ist dabei ein paar Sekunden nicht erreichbar. Watchtower und Keel lassen Postgres aus; Sie holen sie von Hand, am besten mit jedem DDM-Update:

# Docker Compose
docker compose pull postgres
docker compose up -d postgres

# Kubernetes – ddm.yaml holt das Image bei jedem Start neu
kubectl -n ddm rollout restart statefulset/postgres

Auf eine neue Hauptversion umziehen

Eine neue Hauptversion (18 → 19) liest die Daten der alten nicht: Sie werden gesichert und in die neue eingespielt. Das machen Sie nur, wenn wir die neue Version anbieten – wir sagen es Ihnen mit dem Update. Planen Sie eine halbe Stunde ein, in der DDM nicht erreichbar ist; bei großen Datenbanken länger.

Die neue Version bekommt ein eigenes Volume. Das alte bleibt unangetastet – geht etwas schief, gehen Sie damit zur alten Version zurück. Erst wenn alles läuft, löschen Sie es.

Mit Docker Compose

  1. Die Apps anhalten und die Datenbank sichern – in eine Datei neben compose.yaml:
    cd /opt/ddm
    docker compose stop cms render-worker client
    docker compose exec -T postgres pg_dump -U ddm -d ddm -Fc > ddm-18.dump
    docker compose stop postgres
    
  2. In compose.yaml drei Stellen ändern: beim Dienst postgres das Image auf …/postgres:19 und das Volume von postgres:/var/lib/postgresql auf postgres-19:/var/lib/postgresql; unter volumes: am Ende postgres-19: ergänzen.
  3. Die neue Version starten und die Sicherung einspielen:
    docker compose up -d postgres
    docker compose exec -T postgres pg_restore -U ddm -d ddm --no-owner < ddm-18.dump
    docker compose up -d
    

Mit Kubernetes

  1. Die Apps anhalten und die Datenbank sichern:
    kubectl -n ddm scale deployment cms render-worker client --replicas=0
    kubectl -n ddm exec postgres-0 -- pg_dump -U ddm -d ddm -Fc > ddm-18.dump
    
  2. In ddm.yaml drei Stellen ändern: beim StatefulSet postgres das Image auf …/postgres:19, und den Namen des Volumes von postgres auf postgres-19 – unter volumeMounts und unter volumeClaimTemplates.
  3. Das StatefulSet neu anlegen. Sein Volume bleibt dabei erhalten – Kubernetes löscht es nicht mit:
    kubectl -n ddm delete statefulset postgres
    kubectl -n ddm apply -f ddm.yaml
    kubectl -n ddm rollout status statefulset/postgres
    
  4. Die Sicherung einspielen und die Apps starten:
    kubectl -n ddm exec -i postgres-0 -- pg_restore -U ddm -d ddm --no-owner < ddm-18.dump
    kubectl -n ddm scale deployment cms render-worker client --replicas=1
    

Danach

Prüfen Sie im CMS, ob Ihre Dokumente da sind und die Suche findet. Behalten Sie ddm-18.dump und das alte Volume ein paar Tage, dann löschen Sie es:

docker volume rm ddm_postgres                    # Docker Compose
kubectl -n ddm delete pvc postgres-postgres-0    # Kubernetes

Zurück zur alten Version, falls nötig: die drei Stellen wieder zurücksetzen und neu starten – bei Kubernetes wie in Schritt 3 mit delete statefulset und apply. Das alte Volume hat die Daten von vor dem Umzug.