Eine PostGRES DB für mehrere Docker Applikationen nutzen

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

FizzyMUC

Benutzer
Registriert
09. Feb. 2023
Beiträge
246
Reaktionspunkte
21
Punkte
18
Hi liebe Community,

Ich bräuchte mal euer Profi-Wissen.

Aktuell betreibe ich auf meiner Syno via Docker eine Paperless-NGX Installation, die zum Glück läuft wie geschmiert. Ich hab schon Sorge das mal was an der DB kaputt geht daher bin ich hier extra vorsichtig. Die PostGRES dort ist v15.

Nun will ich zwei weitere Applikationen installieren, die auch eine PostGRES brauchen, Immich und n8n. Mir hat mal jemand gesagt, dass es ja super ist dass ich bereits eine PostGRES laufen habe, dann kann ich die dort weiter benutzen.

Mir ist nicht ganz klar wie ich das mache… in meiner Docker-compose von Paperless selbst habe ich die db drin (neben redis und co). Wie kann ich nun aus einem anderen Container, den ich auch per docker-compose anlege, auf eben jene DB zugreifen? Und dort wuerde ich einfach eine zweite db, mit user/password einstellen?

Vielleicht (bestimmt) weiß jemand wie das geht.
 
Ich mache das so. Ich lege einen neuen User in der PostgreSQL Instanz an und eine neue DB. Der User hat nur auf diese DB Zugriff. Und dann musst du doch einfach die DB Instanz nutzen? Also die IP/Port vom Host angeben. Wo ist denn da das genaue Problem, was du nicht verstehst. Vielleicht kann man das dann besser erklären.
Aber für Immich würde ich eine seperate DB Instanz nutzen. Guck doch mal was die Entwickler für eine DB angeben:
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
 
Wie kann ich nun aus einem anderen Container, den ich auch per docker-compose anlege, auf eben jene DB zugreifen?
vom Prinzip ist es so:
Du legst ein weiteres Netzwerk an (z.B. psql-net 172.29.0.0/16)
Fügst den Container im Stack dem Netzwerk hinzu:
Code:
networks:
  - psql-net
  - default
und machst dem Stack das Netzwerk bekannt:
Code:
networks:
  psql-net:
    external: true
Das wars schon.

Hängt natürlich von den einzelnen Container ab, aber was machst Du wenn ein Container nach Update auch eine andere PSQL Version möchte.
Dann müsstest Du die Daten von PSQL-Version x nach PSQL-Version y händisch umziehen.
Daher würde ich das nicht empfehlen.
 
Naja das Problem ist nach meinem Verständnis dass die DB gar nicht außerhalb des Containers erreichbar ist. Ich muss ja aus einem anderen Container darauf zugreifen. Mir wurde mal gesagt man müsste dann irgendwie ein Netzwerk innerhalb des Docker-Containers erstellen. Leider weiß ich nicht wie man das macht?
 
Klar kannst du die aktuelle Postgres-Datenbank mit Vector-Plugin auch für andere Anwendungen nutzen. Das Vector-Plugin ist für die Verwendung von Immich vorgesehen und vorgeschrieben! Natürlich kannst du das Plugin auch aufwendig in dem originalen PostgresDB-Image einbauen, sofern du die Erfahrung hast und dieses auch warten willst.

Ich würde aber gleich auf die aktuelle Version 18 wechseln: https://github.com/immich-app/base-images/pkgs/container/postgres/658270704?tag=18-vectorchord0.5.3, damit bekommst du bis zum Herbst 2030 auch Sicherheitsupdates und hast erst einmal wieder Ruhe.

Vorhandene Datenbanken kannst du über die CLI oder Tools wie pgAdmin4 oder Adminer (beide GUI) exportieren bzw. importieren. Dabei kannst du die Anwendungen nativ installieren als auch in Docker laufen lassen. Wenn man eine Software benutzt, welche eine Datenbank im Hintergrund hat, sollte man schon wissen, wie ein Dump gemacht werden kann. Das Kopieren des Datenbankordners hilft dir bei einem Fehler nicht wirklich weiter. Den Dump kannst du einfach automatisiert und zeitlich gesteuert via Aufgabenplaner, direkt im DB-Container als Command oder über databasus (Container) machen. Dabei kannst du jede Datenbank einzeln exportieren als auch alle zusammen.

Immch verwendet bereits Valke, was ein Fork von Redis ist, nachdem es bei der Lizenzierungsänderung von Redis Ärger und Verstimmungen in der Open-Source-Community gab. Valke ist Redis-kompatibel. Ich würde je nachdem, welches Image du nutzen willst, auch dieses wie bei der PostgresDB bündeln. Ein Mount des Redis/Valke-Verzeichnisses ist nicht unbedingt notwendig, weil es sich hierbei um eine Wegwerfdatenbank handelt, welche im Arbeitsspeicher arbeitet und nur als „schneller“ Vermittler zwischen Anwendung und Datenbank fungiert.

Das größte Problem bei Immich sehe ich in der veralteten Compose incl. geänderter Einträge. Wie bei Paperless sollte man das Projekt einmal durcharbeiten und anpassen. Einfach die alten Compose-Files würde ich nicht übernehmen. Das wäre vergleichbar wie bei paperless>ng>ngx.

Was die Verbindung zur DB angeht, kannst du über das Hostsystem gehen als auch die Datenbank in den Immich- und Paperless-Stack einbinden. Es ist ja problemlos möglich, einen Container in mehreren Container-Netzwerken laufen zu lassen. Diese Möglichkeit gilt aber nicht für das Standard-Bridge-Netzwerk, da dort alle Container abgekapselt sind. Dort hast du die Möglichkeit, über die Host-IP (Synology) und den eingestellten Port zu gehen.
 
Ich nutze sowohl eine zentrale MariaDB als auch Postgres, auf die jeweils mehrere Container zugreifen. Container auf dem gleichen Host mit Datenbank-Anbindung laufen in dem gleichen Docker Netzwerk und greifen per Hostname auf die DB zu. Container auf anderen Hosts sprechen dann den Host per IP mit dem gemapten Container Port an.
Auf dem DB-Host wird automatisiert per Script täglich ein Dump aller Datenbanken aus beiden Instanzen exportiert.
 

Additional post fields

 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat