Paperless-ngx Paperless-ngx: Migration Postgresql zu MariaDB

Nordlicht01

Benutzer
Mitglied seit
31. Aug 2014
Beiträge
273
Punkte für Reaktionen
10
Punkte
18
Ich habe auch meine bestehende MariaDB der Syno genutzt (da diese schon im Einsatz ist) und es klappt.

Dann muss ich alles nochmal in Ruhe prüfen. Meine, dass Deine Einstellungen mit meinen passen
 

Nordlicht01

Benutzer
Mitglied seit
31. Aug 2014
Beiträge
273
Punkte für Reaktionen
10
Punkte
18
Das Thema hat mir keine Ruhe gelassen. Ich habe einen Versuch mit einem MariaDB Container gestartet. Im Portainer habe ich für die Datenbank folgende Einträge berücksichtigt (User und Kennwörter zum Testen erstmal Standard):

db:
image: docker.io/library/mariadb:10
restart: unless-stopped
volumes:
- /volume1/docker/paperless/db:/var/lib/mysql
environment:
MARIADB_HOST: paperless
MARIADB_DATABASE: paperless
MARIADB_USER: paperless
MARIADB_PASSWORD: paperless
MARIADB_ROOT_PASSWORD: paperless

PAPERLESS_DBENGINE: mariadb
PAPERLESS_DBUSER: paperless
PAPERLESS_DBHOST: paperless
PAPERLESS_DBPASS: paperless
Der Container für die DB und Paperless befinden sich in einem Netzwerk (Paperless_default)

Die Verbindung zur Datenbank kann der Container Paperless offenbar nicht herstellen. Da ich FileRun als Container mit MariaDB (und dem Port 3306) nutze, habe ich die Container für FileRun gestoppt und den Start von Paperless erneut versucht. Das bringt kein anderes Ergebnis.

Im Logfile erhalte ich folgende Fehlermeldung:

/sbin/docker-prepare.sh: line 41: /dev/tcp/paperless/3306: Connection refused

Habe fast das Gefühl, dass ich den Wald vor lauter Bäumen nicht sehe.
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.189
Punkte für Reaktionen
766
Punkte
154
Wenn du die eingebaute MariaDB nutzt, dann muss der Eintrag für den Datenbank-Server natürlich auf die Syno zeigen:
Code:
PAPERLESS_DBHOST: <ip der syno>

Wenn du das über einen MariaDB-Container machst, muss der Paperless-Container auch einen Fuss im Netzwerk des MariaDB-Container haben. (Hast du ja)

Die Datenbank für Paperless hast du angelegt?
 
Zuletzt bearbeitet:

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.831
Punkte für Reaktionen
854
Punkte
154
Ich verstehe deine Stack Auszüge nicht bzw. was du genau gemacht hast. Willst du eine bestehende MariaDB Instanz nutzen oder eine mit im Stack von Paperless nutzen?
 

Nordlicht01

Benutzer
Mitglied seit
31. Aug 2014
Beiträge
273
Punkte für Reaktionen
10
Punkte
18
Ich hatte zuerst versucht, MariaDB der Syno zu nutzen; siehe Post 13. Dazu habe ich die Datenbank via SSH angelegt; ebenso User und Passwort. Da habe ich als DBHOST meine IP der Syno angegeben. Da lief u.a. folgender Fehler im Log auf:

MySQLdb.OperationalError: (1045, "Access denied for user 'paperless'@'192.168.240.3' (using password: YES)")

Vorhin (Post 22) war der Ansatz, einen eigenen Container für die MariaDB zu nutzen. Die heutigen Auszüge aus dem Stack von Paperless hatte ich oben gepostet. Ich bin dabei davon ausgegangen, dass mit dem Stack auch die Datenbank paperless nebst User angelegt wird. So habe ich das zumindest aus anderen Containern im Kopf. Der gemountete Order /volume1/docker/paperless/db wird beim Start des DB-Containers auf jeden Fall angesprochen und mit Files gefüllt.
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.189
Punkte für Reaktionen
766
Punkte
154
Der User "paperless" hat auch die nötigen Rechte auf die Datenbank?

Warum nimmst du eigentlich nicht das offizielle MariaDB-Image:
Code:
image: mariadb:latest
 

Nordlicht01

Benutzer
Mitglied seit
31. Aug 2014
Beiträge
273
Punkte für Reaktionen
10
Punkte
18
@Adama Habe die Datenbank und den User über SSH entsprechend Deiner Angaben im Post 1 angelegt; Screenshot füge ich bei.

Das von mir verwendetet Image war hier in der docker-compose hinterlegt. Habe aber testweise auch das andere Image verwendet,

@alexhell Soweit ich das sehe, darf der User paperless sich mit allen Hosts verbinden; da steht % als Hostname.

Vorhin habe ich nochmal versucht, die Sync MariaDB via SSH anzulegen und habe dafür die von @Adama verwendeten Einstellungen verwendet. Auch hier tritt Access denied auf.

Bin so langsam ratlos. Frage mich natürlich, ob das eine blöde Idee war, Paperless auf MariaDB aufzusetzen anstatt bei Postgres zu bleiben. Habe den Stack via Postgres wieder aufgesetzt und jetzt hier den letztes Wochenende überwundenen Fehler

"Error while converting email to PDF: Server error '503 Service Unavailable' for url 'http://gotenberg:3000/forms/libreoffice/convert#/forms/chromium/convert/html".

Das ist aber ein anderes Thema.

Bei MariaDB im Container laufe ich auch weiter auch in die bisherigen Probleme. Wobei der Port 3306 schon für einen anderen Container verwendet wird. Den Stack habe ich aber auch schon auf inaktiv geschaltet; ohne Ergebnis. Habe auch schon versucht, den Port für MariaDB anders zu defenieren via Ports: - "3309:3306" ... hat aber auch nicht gebracht.
 

Anhänge

  • Bildschirmfoto 2023-08-08 um 21.30.32.png
    Bildschirmfoto 2023-08-08 um 21.30.32.png
    140,4 KB · Aufrufe: 11

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.189
Punkte für Reaktionen
766
Punkte
154
Ah, ok, das Original-Compose-File nutze ich nicht, ich arbeite ja mit einer externen MariaDB, erst mit der Syno-MariaDB, jetzt mit einem Container. Hab das aber letztlich natürlich aus dem Original-Compose entwickelt.

Wie @alexhell schon schrieb, hast du bei PAPERLESS_DBHOST als Host "db" genommen? Du musst entweder den Service- oder den Container-Namen nehmen. Stell doch mal dein Compose-File hier ein...

Ich lege bei meinen Containern sowieso immer den Namen fest.
 

Nordlicht01

Benutzer
Mitglied seit
31. Aug 2014
Beiträge
273
Punkte für Reaktionen
10
Punkte
18
Das ist jetzt mein aktueller Stand des Stack. Habe seit gestern etliche Varianten versucht.

Dies kommt als (wesentliche) Fehlermeldung:

/sbin/docker-prepare.sh: line 41: /dev/tcp/Paperless-Test-DB/3308: Connection refused

Bin mir nicht sicher, ob ich den Port 3308 noch in der Form "MYSQL_TCP_PORT: 3308" für die db angeben muss. Hatte da vorhin mit gespielt. Allerdings ohne Ergebnis.

YAML:
version: "3.4"
services:
  broker:
    image: docker.io/library/redis:7
    container_name: Paperless-Test-REDIS
    restart: unless-stopped
    volumes:
      - redisdata:/data

  db:
    image: mariadb:latest
    restart: unless-stopped
    container_name: Paperless-Test-DB
    volumes:
      - dbdata:/var/lib/mysql
    environment:
      MARIADB_HOST: paperless
      MARIADB_DATABASE: paperless
      MARIADB_USER: paperless
      MARIADB_PASSWORD: paperless
      MARIADB_ROOT_PASSWORD: paperless
    ports:
      - "3308:3306"

  webserver:
    image: ghcr.io/paperless-ngx/paperless-ngx:latest
    restart: unless-stopped
    container_name: Paperless-Test
    depends_on:
      - db
      - broker
      - gotenberg
      - tika
    ports:
      - "8101:8000"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000"]
      interval: 30s
      timeout: 10s
      retries: 5
    volumes:
      - /volume1/docker/paperless_test/data:/usr/src/paperless/data
      - /volume1/docker/paperless_test/media:/usr/src/paperless/media
      - /volume1/docker/paperless_test/export:/usr/src/paperless/export
      - /volume1/docker/paperless_test/consume:/usr/src/paperless/consume
    environment:
      USERMAP_UID: 1042
      USERMAP_GID: 100
      PAPERLESS_TIME_ZONE: Europe/Berlin
      PAPERLESS_OCR_IMAGE_DPI: 300
      PAPERLESS_FILENAME_FORMAT: "{created_year} / {correspondent} / {title}"
      PAPERLESS_FILENAME_FORMAT_REMOVE_NONE: True
      PAPERLESS_REDIS: redis://broker:6379
      PAPERLESS_DBENGINE: mariadb
      PAPERLESS_DBHOST: db
      PAPERLESS_DBNAME: paperless
      PAPERLESS_DBUSER: paperless
      PAPERLESS_DBPASS: paperless
      PAPERLESS_DBPORT: 3308
    
volumes:
  data:
  media:
  dbdata:
  redisdata:
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.189
Punkte für Reaktionen
766
Punkte
154
Ich glaube nicht, dass das was mit dem DB-Port zu tun hat. Aber klar, der Port sollte der selbe sein. Ich würde es wieder auf 3306 umstellen, das ist ja der Standard.

Hast du mal in den DB-Container geschaut. Was zeigt der im Log an?

P.S. Ich sehe gerade, du hast noch Tika und Gotenberg drin. Du hast aber keinen Container dafür festgelegt. Die beiden brauchst du übrigens nur, wenn du Word o.ä. direkt einlesen willst.
 
Zuletzt bearbeitet:

Grischabock

Benutzer
Mitglied seit
10. Sep 2009
Beiträge
282
Punkte für Reaktionen
10
Punkte
24
Mir schwirrt irgendwas im Kopf rum das ich da an den Ports gebastelt habe aber dann zurück bin auf den 3306, vielleicht hat das ändern der Ports dann den 3306 erst angenommen. Weiss aber gerade nicht mehr was genau da war. Bin mir aber sicher dass ich sonst nichts gemacht habe als wie du eigentlich so auch.
 

Nordlicht01

Benutzer
Mitglied seit
31. Aug 2014
Beiträge
273
Punkte für Reaktionen
10
Punkte
18
Vor der Änderung des Ports 3306 wurde dieser mit einer Fehlermeldung ähnlicher Natur abgeblockt. Den Port 3306 nutze ich für einen anderen Container. Kommen die sich nicht ins Gehege? Oder stört das nicht, weil die in einem anderen Netzwerk sind?

Kurz nach Abschicken meiner letzten Nachricht habe ich im Eintrag für die db nochmal "MYSQL_TCP_PORT: 3308" ergänzt. Jetzt steht schön länger und offenbar in einer Schleife:

Code:
Operations to perform:

  Apply all migrations: admin, auth, authtoken, contenttypes, django_celery_results, documents, guardian, paperless_mail, sessions

Running migrations:
und später:

Code:
django.db.utils.OperationalError: (1050, "Table 'auth_permission' already exists")

  Applying auth.0001_initial...

Habe schon versucht, den Stack zu stoppen und alle Container gelöscht und den Stack danach wieder zu starten.

Eben habe ich wieder auf den Port 3306 umgestellt. Jetzt kein Problem mit dem Zugang. Wieder der Fehler Table 'auth_permission' already exists"
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.189
Punkte für Reaktionen
766
Punkte
154
Hmm, das ist ja nicht unbedingt ein Fehler, das sagt ja nur, dass eine Tabelle vorhanden ist.

Aber um alles zurückzusetzen, reicht es nicht, nur die Container zu löschen. Du musst auch die zugewiesenen Verzeichnisse leeren.
 

Nordlicht01

Benutzer
Mitglied seit
31. Aug 2014
Beiträge
273
Punkte für Reaktionen
10
Punkte
18
Das Datenbankverzeichnis "- dbdata:/var/lib/mysql" ist doch im Container der db oder täusche ich mich? Zumindest kann ich das Verzeichnis über die Console des Containers sehen.
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564
/var/lib/mysql ist der Ordner in dem Container, ja. Aber du hast ihn rausgemountet. Eigentlich solltest du statt dbdata einen Ordner auf der DS angeben, wo der Container die Daten ablegt. So wie du es jetzt gemacht hast, sollten die Daten unter /volume1/@docker/volumes/dbdata liegen
 
  • Like
Reaktionen: Nordlicht01

Nordlicht01

Benutzer
Mitglied seit
31. Aug 2014
Beiträge
273
Punkte für Reaktionen
10
Punkte
18
@plang.pl Du hast natürlich Recht mit dem Order
Code:
/var/lib/mysql
. Diesen Ordner habe ich gelöscht und meinen Stack umgebaut.

Bei der Gelegenheit habe ich gesehen, dass ich auch zwei Container habe, die die Datenbank unter
Code:
/volume1/@docker/volumes/
ablegen. Da muss ich in der Folge mal ran und aufräumen.

Nach etlichen Versuchen habe ich es gestern Abend geschafft, paperless-ngx in einem Stack mit der MariaDb aufzusetzen. Die Datenbank wird jetzt über den Port 3308 angesprochen. Über phpMyadmin (starte bei Bedarf einen Container, der sich im entsprechenden Netztwerk befindet) habe ich Zugriff auf die Datenbank.

Es war ein wenig undurchsichtig für mich, was da vorher schief gelaufen war. Die Fehlermeldung
Code:
django.db.utils.OperationalError: (1050, "Table 'auth_permission' already exists")
tauchte gestern Abend auch wieder auf. Auf der DB habe ich testweise die Tabelle (die erst beim Start des Containers angelegt wurde) gelöscht. Danach startetet der Container für Paperless weiter. Es dauerte allerdings 30 Minuten, bis die Tabellen für Paperless angelegt waren und diverse Checks mit ok durchliefen.

Danach war aber alles grün, die Container liefen und ich konnte mich anmelden.

Was ich gestern noch einstellen wollte im Stack und letztlich gescheitert bin, war die Vorgabe eines Namens für das gemeinsame Netzwerk. Das heißt jetzt bei mir paperless-default.

Auf jeden Fall laufen jetzt die neue und die alte Installation parallel auf unterschiedlichen Datenbanken. Werde am Wochenende die Daten umziehen in die neue Datenbank.
 
Zuletzt bearbeitet:

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564
  • Like
Reaktionen: Nordlicht01

Nordlicht01

Benutzer
Mitglied seit
31. Aug 2014
Beiträge
273
Punkte für Reaktionen
10
Punkte
18
  • Like
Reaktionen: plang.pl

zabulus666

Benutzer
Mitglied seit
09. Feb 2023
Beiträge
3
Punkte für Reaktionen
0
Punkte
1
Hallo zusammen,

vielen Dank für die Anleitung die bei wunderbar funktioniert hat.
Meine grundsätzliche Frage:
Was waren für euch die Gründe um auf MariaDB (von Postgres) zu wechseln?

Performance? Oder andere Themen?
Gruss
Andy
 


 

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