- Hinweis: Änderungen ab docspell v0.24
- Installation von Docspell in Unraid Docker
- Installation of Docspell in Unraid with Docker
- Variablen und Konfigurationsdateien
Variables and configuration files
Bis Version 0.23 funktioniert die alte Version Reamde hier.
Ab Version 0.25 (vermutlich schon ab v0.24) muss diese Vorgehensweise verwendet werden.
Warum nicht ab v0.24? Ich bin von v0.23 direkt auf die v0.25, da ich die Änderungen von ekek0 schlicht nicht mibekonnen habe.
- Wechsel des Repository: von "
eikek0/docspell
" zu "docspell
" - Wechsel von Postgresql: von 11.7 zu Postgresql 13.3
Achtung: kein einfaches Upgrade über Major Versionen möglich (siehe Beschreibung unten)! - Erneut Benutzung der
.env
Datei für globale Variablen
TODO:
- Aktualisierung der Container Variablen.
Die Templates und die Installation funktionieren zwar, aber ich denke ich kann die Angabe der Variablen und mitgegebenen Docker commands (in "Post Arguments") noch optimieren
DONE :
- Aktualisierung der Templates (v0.23 > v0.25)!
Installation funktioniert mit hier angegebenen Variablen und mitgegebenen Docker commands (in "Post Arguments").
Info: Diese Dokumentation is getestet bis Version 0.27 von Docspell
Docspell ist ein Dokumentenmanagementsystem (DMS).
Getestet habe ich auch Teedy, Mayan, Paperless, Perpermerge.
Aber Docspell hat mich überzeugt. Es ist einfach gehalten und übersichtlich.
In Unraid müssen mehrere Container für Doscspell installiert werden, die untereinander kommunizieren müssen.
Den Containern müssen diverse Variablen mitgegeben werden.
Zu den Variablen gehören auch die Pfade der Dateien docspell.conf
und .env
.
Diese Dateien müssen vor dem (ersten) Start des Dockers vorhanden sein!.
Dokumentation/Quellen für Docspell:
- https://hub.docker.com/r/eikek0/docspell/
- https://github.com/eikek/docspell
- https://docspell.org/docs/
Thread im Unraid Forum:
br0
Vorteil:
Jeder Container erhält eine eigene IP. Über die Vergabe von Ports muss man sich so weniger Gedanken machen (siehe unten). Zudem kann jeder Container dank eigener IP besser über eine Firewall "kontrolliert" werden.
Diese Variante ist am einfachsten...
Vorgehen:
- Beim anlegen der Docker Container als Netzwerk
br0
verwenden (anstelle vonbridge
) - Mit "br0" kann jedem Container eine eigene IP aus der selben Range wie dem Unraid Server zugewiesen werden.
VLan
Vorteil:
Jeder Container erhält eine eigene IP aus dem verwendetem VLAN. Über die Vergabe von Ports muss man sich so weniger Gedanken machen (siehe unten). Zudem kann jeder Container dank eigener IP besser über eine Firewall "kontrolliert" werden.
- Damit VLANs verwendet werden können muss der verwendete Router/Switch VLANs unterstützen!
- in Unraid unter "Settings" => "Network Settings" => "Enable VLANs" auf "Yes" stellen und die notwendigen Einstellungen vornehmen (Docker- und VM-Dienst muss vorher beendet werden).
- Das neu erstellte VLAN (z.B. "br0.5") kann nun bei der Container Erstellung ausgewählt werden.
Custom Docker Netzwerk
Vorteil:
Die Kommunikation zwischen den Containern kann über deren Namen erfolgen (siehe z.B. unten bei "docspell.conf").
Ich habe anfangs ein "custom docker network" verwendet, habe dann aber zugunsten der eigenen IP-Adressen je Container auf ein VLAN gewechselt, zumal ich eh VLANs verwende.
- Damit das Netzwerk bei der Erstellung der Container verfügbar ist muss in Unraid zuerst unter "Settings" => "Docker" der Punkt "Preserve user defined networks" auf "Yes" gestelt werden (Docker Dienst muss vorher beendet werden).
- Nun per SSH oder über die Unraid GUI auf die Console des Servers wechseln.
- Ein Custum Docker Netzwerk erstellen:
Einfach:docker network create dnet-docspell
Erweitert:docker network create --driver=bridge --subnet=192.168.3.0/25 --gateway=192.168.3.1 dnet-docspell
- Das neu erstellte custum network "dnet-docspell" kann nun bei der Container Erstellung ausgewählt werden
-
Verzeichnisse anlegen
Verzeichnis "docspell
" unter "appdata
" anlegen.
Verzeichnis "docspell/opt
" unter "appdata
" anlegen. -
Konfigurationsdatei anlegen
"docspell.conf
" in "/docspell/opt
" anlegen.
Es kann die Datei von github genommen werden: https://github.com/eikek/docspell/blob/master/docker/docker-compose/docspell.confIch habe folgende Änderungen vorgenommen:
- alle Dockernamen durch ihre IP-Adresse ersetzt
also z.B. "http://joex:7878
"
=> "http://192.168.3.1:7878
" - alle Variablen durch ihre Werte ersetzt
also z.B. "jdbc:"\${DB_TYPE}"://"\${DB_HOST}":"\${DB_PORT}"/"\${DB_NAME}
=>"jdbc:postgresql://192.168.3.2:5432/dbname"
Ich habe es NICHT getestet aber:
Wird ein custom Docker Network verwendet, sollte die Namensauflösung funktionieren und eine Ersetzung der Dockernamen durch ihre IP-Adresse sollte nicht notwendig sein.
Da die Variablen in den Docker Templates und der.env
Datei (wenn verwendet) enthalten sind, sollten sie hier funktionieren (Ersetzen nicht notwendig). - alle Dockernamen durch ihre IP-Adresse ersetzt
-
Variablen
Die Docspell Container benötigen selbst und gemeinsame genutzte Variablen (siehe auch in "docspell.conf"). Die Variablen können in jedem Telmplate angepasst werden (Die Variablen sind dort vordefiniert und beschrieben).
Für gemeinsam genutzte Variablen die kann die Verwendung einer zentralen Datei.env
praktisch sein um Vorgaben zentral zu speichern, erfordert aber das Anlegen der Datei vor Erstellung der Docker unter "../appdata/docspell
".
Sie wird unter "Extra Parameters" angegeben:
"--env-file=/mnt/user/appdata/docspell/.env
"
Es kann die Datei von github genommen werden: https://github.com/eikek/docspell/blob/master/docker/docker-compose/.env -
Unraid Templates einbinden
In Unraid unter "Docker" => "Template Repositories" (ganz unten) folgende URL eintragen und auf "Save" klicken: https://github.com/vakilando/unraid-docker-templates -
Postgresql upgrade!
Wenn bereits eine ältere Postgresdatenbank mit docspell vorhanden ist sollte sie ein Upgrade erfahren.
Ein Upgrade von Version 11.7 auf 13.3 wird hier beschrieben:-
Postgresql 13.3 in Unraid parallel zu 11.7 installieren (official repository)
Der neue Postgresql 13.3 bekommt die selben Einstellungen wie der 11.7 nur:- einen anderen Namen (sonst ist eine parallele Installation nicht möglich)
- eine andere IP (temporär..., sonst ist ein paraleller Start nicht möglich)
- eine andere MAC Adresse (temporär..., sonst ist ein paraleller Start nicht möglich)
-
BACKUP der alte Postgresql 11.7 Datenbank JETZT
Auf Unraid, Backup Verzeichnis in appdata von postgres 11.7 erstellen und betreten:
mkdir /mnt/cache/appdata/postgres-11.7/BACKUPS
cd /mnt/cache/appdata/postgres-11.7/BACKUPS
Für eine Vollsicherung des ganzen DB-Servers:
docker exec postgres-11.7 pg_dumpall -U pgadmin > pg_dumpall_pg11.7.bkp
Für eine Sicherung nur der Datenbank "docspell":
docker exec postgres-11.7 pg_dump -U pgadmin -Fc docspell > pg_dump_docspell_pg11.7.bkp
-
Importieren des Postgresql 11.7 Datenbank Backups in Postgresql 13.3
Auf Unraid, Backup Verzeichnis in appdata von postgres 13.3 erstellen und betreten:
mkdir /mnt/cache/appdata/postgres-13.3/BACKUPS
cd /mnt/cache/appdata/postgres-13.3/BACKUPS
Kopieren der 11.7 Backups nach appdata des neuen Postgresql 13.3
Vollsicherung:cp /mnt/cache/appdata/postgres-11.7/BACKUPS/pg_dumpall_pg11.7.bkp .
Datenbank:cp /mnt/cache/appdata/postgres-11.7/BACKUPS/dpg_dump_docspell_pg11.7.bkp .
Vollsicherung zurückspielen:
Die Console des Postgresql 13.3 Container starten und in das Backup Verzeichnis wechseln:
cd /var/lib/postgresql/data/BACKUPS
Vollsicherung zurückspielen:
psql -U pgadmin -f pg_dumpall_pg11.7_2.bkp postgres
Datenbanksicherung zurückspielen:
Über das Unraid "Webterminal" oder über SSH (z.B. mit Putty bei Unraid anmelden):docker exec -i -u pgadmin postgres-13.3 pg_restore -C -d postgres < dpg_dump_docspell_pg11.7.bkp
-
-
Container anpassen
Alter Container postgresql-11.7: Autostart AUS
Neuer Container postgresql-13.3: IP- und MAC-Adresse auf die Werte des alten setzen und Autostart AN -
Container einrichten
In Unraid unter "Docker" unten auf "ADD CONTAINER" klicken.
Wähle die Container "vakilando-docspell-xxx" aus
Siehe unten für weitere Informationen bzgl. der Templates.
-
postgres
Ich verwende Postgresql aus dem original Repository.
Verwendet wird die Version wie in der dockspell docker-compose.yml: postgres:13.3.
Ich habe bereits eine Installation mit Postgres:11.7, also ist ein Upgrade notwendig: siehe oben. Docker: https://hub.docker.com/\_/postgres/Wichtige Einstellungen: sind fett markiert.
Sie müssen bei jedem Container identisch sein und mit Angaben in der "docspell.conf" übereinstimmen.
Feld Wert (anzupassen!) Repository: postgres:13.3 Network Type: custom-network oder VLAN wählen Fixed IP address: ...sofern gewünscht... Extra Parameters --hostname db POSTGRES_PASSWORD somesafepassword POSTGRES_USER dbuser POSTGRES_DB dbname Database Storage Path /mnt/cache/appdata/postgres/ Web Interface Port 5432
-
solr
Ich verwende Solr aus dem Repository "bitnami"
Docker: https://hub.docker.com/r/bitnami/solr/
Support: https://forums.unraid.net/topic/89502-support-a75g-repo/
Project: https://lucene.apache.org/solr/Wichtige Einstellungen sind fett markiert.
Die Variable "SOLR_CORE" wird in der "docspell.conf" verwendet (solr URL).Feld Wert (anzupassen!) Repository: bitnami/solr:8 Network Type: custom-network oder VLAN wählen Fixed IP address: ...sofern gewünscht... Port: 8983 Appdata: z.B. /mnt/user/appdata/solr_data SOLR_PORT_NUMBER: 8983 SOLR_CORE: docspell
-
vakilando-docspell-joex
Wichtige Einstellungen: sind fett markiert.
Sie müssen bei jedem Container identisch sein und mit Angaben in der "docspell.conf" übereinstimmen.
Feld Wert Repository: docspell/joex:latest Extra Parameters (NEU) --mac-address 04:32:C1:12:02:13 --env-file=/mnt/user/appdata/docspell/.env -e JAVA_OPTS="-Xmx2500m" --no-healthcheck Erklärung: --mac-address: optional
-e JAVA_OPTS: optional (mehr RAM für Java)Post Arguments: (NEU) /opt/docspell.conf Network Type: br0, custom-network oder VLAN wählen Fixed IP address: ...sofern gewünscht... Host Port 1: 7878 /opt/docspell.conf /mnt/user/appdata/docspell/opt/docspell.conf
(muss vorhanden sein!!)TZ Europe/Berlin DOCSPELL_HEADER_VALUE SomeRandomString DB_TYPE postgresql DB_HOST Name des DB-Containers z.B. "db"
oder IP-Adresse "192.168.3.2"DB_PORT 5432 DB_NAME dbname DB_USER dbuser DB_PASS somesafepassword
-
vakilando-docspell-restserver
Wichtige Einstellungen: sind fett markiert.
Sie müssen bei jedem Container identisch sein und mit Angaben in der "docspell.conf" übereinstimmen.
Feld Wert Repository: docspell/restserver:latest Extra Parameters (NEU) --mac-address 04:42:E2:13:03:11 --env-file=/mnt/user/appdata/docspell/.env --hostname docspell.domain.com Erklärung: --mac-address: optional Post Arguments: (NEU) /opt/docspell.conf Network Type: custom-network oder VLAN wählen Fixed IP address: ...sofern gewünscht... Host Port 1: 7880 /opt/docspell.conf /mnt/user/appdata/docspell/opt/docspell.conf
(muss vorhanden sein!!)TZ Europe/Berlin DOCSPELL_HEADER_VALUE SomeRandomString DB_TYPE postgresql DB_HOST Name des DB-Containers z.B. "db"
oder IP-Adresse "192.168.3.2"DB_PORT 5432 DB_NAME dbname DB_USER dbuser DB_PASS somesafepassword
-
vakilando-docspell-consumedir
Wichtige Einstellungen: sind fett markiert.
Sie müssen bei jedem Container identisch sein und mit Angaben in der "docspell.conf" übereinstimmen.
Feld Wert (anzupassen!) Repository: docspell/dsc:latest Extra Parameters (NEU) --mac-address 22:42:E1:55:21:03 --env-file=/mnt/user/appdata/docspell/.env --restart=unless-stopped Erklärung: --mac-address: optional Post Arguments: (NEU) dsc "-vv" "-d" "http://ip.add.re.ss:7880" "watch" "--delete" "-ir" "--header" "Docspell-Integration:SomeRandomString" "/opt/docs" Network Type: custom-network oder VLAN wählen Fixed IP address: ...sofern gewünscht... Consumedir: z.B. /mnt/user/appdata/docspell/docs TZ Europe/Berlin DOCSPELL_HEADER_VALUE SomeRandomString DB_TYPE postgresql DB_HOST Name des DB-Containers z.B. "db"
oder IP-Adresse "192.168.3.2"DB_PORT 5432 DB_NAME dbname DB_USER dbuser DB_PASS somesafepassword CONSUMEDIR_INTEGRATION y
-
-
Die Reihenfolge in der die Container starten ist wichtig!
Daher ist diese nach der Installation durch verschieben mit der Maus ggf. zu korrigieren:- postgres
- solr
- docspell-joex
- docspell-restserver
- docspell-consumedir
Info: This documentation is tested up to version 0.25.1 of docspell
Docspell is a personal document organizer / management system (DMS) like Teedy, Mayan, Paperless, Perpermerge,...
To run Docspell under unraid as docker, several containers have to be installed that have to communicate with each other.
Various variables and a configuration file must be given to the containers.
Documentation/Sources for Docspell:
- https://hub.docker.com/r/eikek0/docspell/
- https://github.com/eikek/docspell
- https://docspell.org/docs/
Thread in the Unraid Forum:
br0
Advantage: Each container gets an IP from the IP-range your unraid server is in. You don't have to worry about any ports that may already be used (see below). In addition, each container can be better "controlled" via a firewall thanks to its own IP.
- When configuring the docker container use "br0" and not "bridge"
- Using "br0" each container has its own IP address that is in the IP range the Unraid Server is in.
VLAN
Advantage: Each container gets an IP from the VLAN IP-range. You don't have to worry about any ports that may already be used (see below). In addition, each container can be better "controlled" via a firewall thanks to its own IP.
- To use VLANs the router / switch used must support VLANs!
- In Unraid go to "Settings" => "Network Settings" => "Enable VLANs", set it to "Yes" and make the necessary settings (Docker and VM service must be terminated beforehand).
- The newly created VLAN (e.g. "br0.5") can now be selected when creating the container.
Custom Docker Network
Advantage: The communication between the containers can take place via their names (see e.g. below under "docspell.conf").
At the beginning I used a "custom docker network", but then switched to a VLAN in favor of the own IP addresses for each container and beeing able to better control the container communication with my firewall and switches.
- In order for the network to be available when creating the container:
In Unraid go to "Settings" => "Docker". Choose the item "Preserve user defined networks" and set it to "Yes" (Docker service must be terminated beforehand). - Now switch to the server console via SSH or the Unraid GUI.
- Create a Custum Docker network:
Simple:docker network create dnet-docspell
Extended:docker network create --driver = bridge --subnet = 192.168.3.0 / 25 --gateway = 192.168.3.1 dnet-docspell
- The newly created custom network "dnet-docspell" can now be selected when creating the container.
-
Create directories
Create the directory "docspell
" in "appdata
".
Create the directory "docspell/opt
" in "appdata
". -
Create configuration files
Create the file "docspell.conf
" in "/docspell/opt
".
The file can be taken from github: https://github.com/eikek/docspell/blob/master/docker/docker-compose/docspell.confI made the following changes:
- all docker names replaced by their IP address:
e.g.: "http://joex:7878
" => "http://192.168.3.1:7878
" - replaced all variables with their values:
e.g. "jdbc:"\${DB_TYPE}"://"\${DB_HOST}":"\${DB_PORT}"/"\${DB_NAME}
=>"jdbc:postgresql://192.168.3.2:5432/dbname"
I have NOT tested but:
- when using a custom Docker network the Docker name resolution should work (no need to replace names by IP's)...
- since the variables are contained in the Unraid Docker templates, the variables should work here too (no need to replace them)...
- all docker names replaced by their IP address:
-
Common used variables
The Docker containers need common variables (see "docspell.conf").
The variables are-
EITHER individually adapted and used in the telmplates
(The variables are already specified and described there) -
OR specified via a central file under "Extra Parameters":
"--env-file=/mnt/user/appdata/docspell/.env
"
The file can be taken from github: https://github.com/eikek/docspell/blob/master/docker/docker-compose/.env
It is saved under "../appdata/docspell
".The ".env" file is useful for storing specifications centrally, but requires the file to be created before the Docker is created.
-
-
Using the Unraid templates
In Unraid got to "Docker" => "Template Repositories" (at the bottom) and add this URL: https://github.com/vakilando/unraid-docker-templates
Click "Save" -
Install th containers
In Unraid go to "Docker" and at the bottom click on "ADD CONTAINER".
Choose the Containers "vakilando-docspell-xxx"
See above or beneath for more instructions concerning the templates..
-
Change the start sequence of the containers!
- postgres
- solr
- docspell-joex
- docspell-restserver
- docspell-consumedir
TZ=Europe/Berlin
DOCSPELL_HEADER_VALUE=SomeRandomString
DB_TYPE=postgresql
DB_HOST=db
DB_PORT=5432
DB_NAME=dbname
DB_USER=dbuser
DB_PASS=dbpass
Feld | Wert |
---|---|
Name: | TZ |
Key: | TZ |
Value: | Europe/Berlin |
Default Value: | Europe/Berlin |
Description: | TZ=Europe/Berlin Timezone to set |
Feld | Wert |
---|---|
Name: | DOCSPELL_HEADER_VALUE |
Key: | DOCSPELL_HEADER_VALUE |
Value: | SomeRandomString |
Default Value: | |
Description: | DOCSPELL_HEADER_VALUE=SomeRandomString defines a secret that is shared between some containers. Please see the consumedir.sh docs for additional info. |
Feld | Wert |
---|---|
Name: | DB_TYPE |
Key: | DB_TYPE |
Value: | postgresql |
Default Value: | postgresql |
Description: | DB_TYPE=postgresql type of database to use (postgresql, mariadb, h2). You need an allready running database server |
Feld | Wert |
---|---|
Name: | DB_HOST |
Key: | DB_HOST |
Value: | db |
Default Value: | db |
Description: | DB_HOST=db database host name or IP |
Feld | Wert |
---|---|
Name: | DB_PORT |
Key: | DB_PORT |
Value: | 5432 |
Default Value: | 5432 |
Description: | DB_PORT=5432 (postgresql) database host port |
Feld | Wert |
---|---|
Name: | DB_NAME |
Key: | DB_NAME |
Value: | dbname |
Default Value: | dbname |
Description: | DB_NAME=dbname database name. the database will be created at first run |
Feld | Wert |
---|---|
Name: | DB_USER |
Key: | DB_USER |
Value: | dbuser |
Default Value: | dbuser |
Description: | DB_USER=dbuser database user name |
Feld | Wert |
---|---|
Name: | DB_PASS |
Key: | DB_PASS |
Value: | somesafepassword |
Default Value: | somesafepassword |
Description: | DB_PASS=somesafepassword database password |