- Mitglied seit
- 05. Mrz 2013
- Beiträge
- 2.152
- Punkte für Reaktionen
- 741
- Punkte
- 154
Da ja seit Version 1.9.0 von Paperless-ngx auch MariaDB unterstützt wird, hab ich mich gefragt, wozu also ein extra Container für die Datenbank wenn ich schon MariaDB auf der Syno habe.
Wie kann ich also meine bestehende Installation nach MariaDB migrieren.
Erst habe ich nach Möglichkeiten gesucht, Postgresql direkt nach MariaDB zu migrieren, was wohl geht, aber nicht so einfach läuft, wie ich mir vorgestellt habe. Dann ist mir eingefallen, dass Paperless-ngx eine Export-Funktion hat. Die Export-Funktion macht es tatsächlich einfach, von Postgresql zu MariaDB zu migrieren.
Hier meine Migration, die über eine Parallel-Installation geht, um einerseits sicherzustellen, dass die Ur-Installation erst mal unbeteiligt bleibt und andererseits die Daten nach der Migration zu testen.
Unter 6. habe ich zwei Compose-Files ergänzt, die für eine reine MariaDB-Installation genutzt werden können. Einmal mit der MariaDB der Syno, einmal mit einem MariaDB-Container in einem eigenen Netz.
1. Datenbank in MariaDB anlegen:
(Per SSH an der Syno anmelden)
2. Parallel-Installation erstellen
Das habe ich mit folgenden compose-Dateien gemacht:
.env
docker-compose.env
docker-compose.yml
In der Konsole mit "docker-compose up -d" starten. Dann mit "docker-compose run --rm webserver createsuperuser" einen Admin-Benutzer anlegen.
Nachdem die Container gestartet sind, einmal testen, ob man sich an Paperless-ngx anmelden kann. Geht das problemlos, kann die Datenmigration starten.
3. Datenexport:
Über SSH am produktiven Paperless-Container anmelden und Daten etc. exportieren:
4.Datenimport:
Den Inhalt des produktiven export-Ordners mit der File Station in den export-Ordner der Testinstallation verschieben. Drauf achten, dass wirklich alle Dateien verschoben wurden.
Über SSH am Paperless_Test-Container anmelden und Daten etc. importieren.
Jetzt könnt ihr euch wieder an der Testinstallation anmelden. Ihr werdet feststellen, dass das jetzt mit den Anmeldedaten der produktiven Umgebung geht und ihr solltet alles in der Testinstallation finden, was ihr auch in der produktiven Installation habt.
5. Umstellen des produktiven Containers
Ich hab mich jetzt dazu entschieden, den produktiven Container einfach von Postgresql auf die jetzt bestehende MariaDB umzuschwenken.
Das könnt ihr erreichen, wenn ihr eure compose-Datei für den produktiven Container entsprechend anpasst. Im folgenden Beispiel seht ihr meine compose-Datei. Die Zeilen mit <ENTF> am Anfang müssen auskommentiert oder gelöscht werden, die Zeilen mit <EINFG> müssen entsprechend der Testinstallation hinzugefügt werden.
Ihr könnt dann mit "docker-compose up -d --remove-orphans" den Container neu erstellen. "--remove-orphans" sorgt dafür, dass der nicht mehr benötigte Postgresql-Container gelöscht wird. Das Datenbankverzeichnis bleibt erst mal bestehen und kann später, wenn alles sauber läuft, auch gelöscht werden.
Die Testumgebung inklusive der Verzeichnisse könnt ihr dann ebenfalls löschen.
P.S. Alle compose-Dateien müsst ihr natürlich gemäß eurer Umgebung anpassen. Die Containernamen müssen ebenso eure sein, da ich meine bestehende Installation als Beispiel genommen habe.
6. Zwei Compose-Files für eine MariaDB-Installation
Paperless mit MariaDB der Synology:
Paperless mit MariaDB in extra Container und eigenem Netz:
Wie kann ich also meine bestehende Installation nach MariaDB migrieren.
Erst habe ich nach Möglichkeiten gesucht, Postgresql direkt nach MariaDB zu migrieren, was wohl geht, aber nicht so einfach läuft, wie ich mir vorgestellt habe. Dann ist mir eingefallen, dass Paperless-ngx eine Export-Funktion hat. Die Export-Funktion macht es tatsächlich einfach, von Postgresql zu MariaDB zu migrieren.
Hier meine Migration, die über eine Parallel-Installation geht, um einerseits sicherzustellen, dass die Ur-Installation erst mal unbeteiligt bleibt und andererseits die Daten nach der Migration zu testen.
Unter 6. habe ich zwei Compose-Files ergänzt, die für eine reine MariaDB-Installation genutzt werden können. Einmal mit der MariaDB der Syno, einmal mit einem MariaDB-Container in einem eigenen Netz.
1. Datenbank in MariaDB anlegen:
(Per SSH an der Syno anmelden)
Code:
mysql -u root -p
create database paperless;
create user 'paperless'@'localhost' identified by '<das geheime passwort>';
grant all privileges on paperless.* to 'paperless'@'%' identified by '<das geheime passwort>';
2. Parallel-Installation erstellen
Das habe ich mit folgenden compose-Dateien gemacht:
.env
Code:
COMPOSE_PROJECT_NAME=paperless_test
docker-compose.env
Code:
COMPOSE_PROJECT_NAME=paperless_test
USERMAP_UID=<uid>
USERMAP_GID=<gid>
PAPERLESS_OCR_LANGUAGE=deu
PAPERLESS_SECRET_KEY=<secret key>
PAPERLESS_TIME_ZONE=Europe/Berlin
PAPERLESS_OCR_IMAGE_DPI=300
PAPERLESS_TASK_WORKERS=2
PAPERLESS_THREADS_PER_WORKER=2
PAPERLESS_FILENAME_FORMAT={created_year}/{created_month}/{correspondent}/{created}_{document_type}
PAPERLESS_URL=<url:port>
PAPERLESS_ENABLE_UPDATE_CHECK=true
docker-compose.yml
Code:
version: "3.4"
services:
broker:
container_name: Paperless_Broker_Test
image: docker.io/library/redis:7
restart: unless-stopped
volumes:
- /volume1/docker/broker_test:/data
webserver:
container_name: Paperless_Test
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: unless-stopped
depends_on:
- broker
ports:
- 8101:8000
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 5
volumes:
- /volume1/docker/paperless_data_test:/usr/src/paperless/data
- /volume1/DockerData/Paperless_Test/media:/usr/src/paperless/media
- /volume1/DockerData/Paperless_Test/export:/usr/src/paperless/export
- /volume1/Temp/consume_test:/usr/src/paperless/consume
env_file: docker-compose.env
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBENGINE: mariadb
PAPERLESS_DBHOST: <ip der syno>
PAPERLESS_DBUSER: paperless
PAPERLESS_DBPASS: <das geheime passwort>
PAPERLESS_DBPORT: 3307
In der Konsole mit "docker-compose up -d" starten. Dann mit "docker-compose run --rm webserver createsuperuser" einen Admin-Benutzer anlegen.
Nachdem die Container gestartet sind, einmal testen, ob man sich an Paperless-ngx anmelden kann. Geht das problemlos, kann die Datenmigration starten.
3. Datenexport:
Über SSH am produktiven Paperless-Container anmelden und Daten etc. exportieren:
Code:
docker exec -u root -it Paperless /bin/bash
document_exporter ../export -c -f
exit
4.Datenimport:
Den Inhalt des produktiven export-Ordners mit der File Station in den export-Ordner der Testinstallation verschieben. Drauf achten, dass wirklich alle Dateien verschoben wurden.
Über SSH am Paperless_Test-Container anmelden und Daten etc. importieren.
Code:
docker exec -u root -it Paperless_Test /bin/bash
document_importer ../export
exit
Jetzt könnt ihr euch wieder an der Testinstallation anmelden. Ihr werdet feststellen, dass das jetzt mit den Anmeldedaten der produktiven Umgebung geht und ihr solltet alles in der Testinstallation finden, was ihr auch in der produktiven Installation habt.
5. Umstellen des produktiven Containers
Ich hab mich jetzt dazu entschieden, den produktiven Container einfach von Postgresql auf die jetzt bestehende MariaDB umzuschwenken.
Das könnt ihr erreichen, wenn ihr eure compose-Datei für den produktiven Container entsprechend anpasst. Im folgenden Beispiel seht ihr meine compose-Datei. Die Zeilen mit <ENTF> am Anfang müssen auskommentiert oder gelöscht werden, die Zeilen mit <EINFG> müssen entsprechend der Testinstallation hinzugefügt werden.
Code:
version: "3.4"
services:
broker:
container_name: Paperless_Broker
image: redis:latest
restart: unless-stopped
volumes:
- /volume1/docker/broker:/data
networks:
net:
<ENTF> db:
<ENTF> container_name: Paperless_DB
<ENTF> image: postgres:15
<ENTF> restart: unless-stopped
<ENTF> volumes:
<ENTF> - /volume1/DockerDB/Paperless/pgdata:/var/lib/postgresql/data
<ENTF> environment:
<ENTF> POSTGRES_DB: paperless
<ENTF> POSTGRES_USER: paperless
<ENTF> POSTGRES_PASSWORD: paperless
<ENTF> networks:
<ENTF> net:
webserver:
container_name: Paperless
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: unless-stopped
depends_on:
<ENTF> - db
- broker
ports:
- 8100:8000
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 5
volumes:
- /volume1/docker/paperless_data:/usr/src/paperless/data
- /volume1/DockerData/Paperless/media:/usr/src/paperless/media
- /volume1/DockerData/Paperless/export:/usr/src/paperless/export
- /volume1/Temp/consume:/usr/src/paperless/consume
env_file: docker-compose.env
environment:
PAPERLESS_REDIS: redis://broker:6379
<ENTF> PAPERLESS_DBHOST: db
<EINFG> PAPERLESS_DBENGINE: mariadb
<EINFG> PAPERLESS_DBHOST: <ip der syno>
<EINFG> PAPERLESS_DBNAME: paperless
<EINFG> PAPERLESS_DBUSER: paperless
<EINFG> PAPERLESS_DBPASS: <das geheime passwort>
<EINFG> PAPERLESS_DBPORT: 3307
networks:
net:
networks:
net:
Ihr könnt dann mit "docker-compose up -d --remove-orphans" den Container neu erstellen. "--remove-orphans" sorgt dafür, dass der nicht mehr benötigte Postgresql-Container gelöscht wird. Das Datenbankverzeichnis bleibt erst mal bestehen und kann später, wenn alles sauber läuft, auch gelöscht werden.
Die Testumgebung inklusive der Verzeichnisse könnt ihr dann ebenfalls löschen.
P.S. Alle compose-Dateien müsst ihr natürlich gemäß eurer Umgebung anpassen. Die Containernamen müssen ebenso eure sein, da ich meine bestehende Installation als Beispiel genommen habe.
6. Zwei Compose-Files für eine MariaDB-Installation
Paperless mit MariaDB der Synology:
Code:
version: "3.4"
services:
broker:
container_name: Paperless_Broker
image: redis:latest
restart: unless-stopped
volumes:
- /volume1/docker/broker:/data
networks:
net:
webserver:
container_name: Paperless
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: unless-stopped
depends_on:
<ENTF> - db
- broker
ports:
- 8100:8000
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 5
volumes:
- /volume1/docker/paperless_data:/usr/src/paperless/data
- /volume1/DockerData/Paperless/media:/usr/src/paperless/media
- /volume1/DockerData/Paperless/export:/usr/src/paperless/export
- /volume1/Temp/consume:/usr/src/paperless/consume
env_file: docker-compose.env
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBENGINE: mariadb
PAPERLESS_DBHOST: <ip der syno>
PAPERLESS_DBNAME: paperless
PAPERLESS_DBUSER: paperless
PAPERLESS_DBPASS: <das geheime passwort>
PAPERLESS_DBPORT: 3307
networks:
net:
networks:
net:
Paperless mit MariaDB in extra Container und eigenem Netz:
Code:
version: "3.4"
services:
broker:
container_name: Paperless_Broker
image: redis:latest
restart: unless-stopped
healthcheck:
test: [ 'CMD', 'redis-cli', 'ping' ]
interval: 30s
timeout: 10s
retries: 5
volumes:
- /volume1/docker/paperless/broker:/data
networks:
net:
webserver:
container_name: Paperless
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: unless-stopped
depends_on:
- broker
ports:
- 8100:8000
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 5
volumes:
- /volume1/docker/paperless/main:/usr/src/paperless/data
- /volume1/DockerData/Paperless/media:/usr/src/paperless/media
- /volume1/DockerData/Paperless/export:/usr/src/paperless/export
- /volume1/Temp/consume:/usr/src/paperless/consume
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBENGINE: mariadb
PAPERLESS_DBHOST: MariaDB #Name des MariaDB-Containers
PAPERLESS_DBNAME: paperless
PAPERLESS_DBUSER: paperless
PAPERLESS_DBPASS: <das geheime passwort>
PAPERLESS_DBPORT: 3306
networks:
net:
mariadb:
networks:
net:
mariadb:
external: true
Kleine Überarbeitung
Ergänzung Compose-Files unter 6.
Ergänzung Compose-Files unter 6.
Zuletzt bearbeitet: