Mayan EDMS auf Ubuntu 22.04lts mit Docker installieren
Ich habe bereits erfolglos versucht Mayan EDMS auf Ubtunu 22.04lts Server und Debian 11 zu installieren. Wie gesagt, leider erfolglos! Es scheint das es erheblich Abhängigkeiten im Python Teil des Mayan EDMS zu Paketen wheel und gevent gibt, bei welchen Ubuntu schon zu weit fortgeschritten ist und bei Debian wiederum meckert Mayan-EMDS wiederum an irgend etwas, was mit dem Redis zu tun hat herum . Aus diesem Grunde hab ich die Arbeit von mehreren Tagen zur Dokumentation der Installation verworfen (seufz) und werden in diesem Artikel die Installation auf Ubuntu 22.04lts mit Docker durchführen. Da ich die Mayan EDMS Software als Server testen möchte habe ich bei der Ubunt-Installation auf einen Desktop verzichtet und nur den SSH Server mit genommen. Ziel ist es bei diesem Test einen sauberen Installationspfad zu notieren, um nach der Gegenüberstellung der DMS Optionen (Paperless-NGX, Docspell und Mayan EMDS) selber nur die minimal notwendigen Pakete zu installieren.
Werfen wir einen flüchtigen Blick auf das Framework von Mayan-DMS.

1. Eventuell vorhandene alte Docker Versionen deinstallieren im Ubuntu Server 22.04lts
Zuerst schmeißen wir mal alle ggf. vorhandenen Docker Versionen aus unserem Ubuntu 22.04lts raus.
user@2204lts:~$ sudo apt-get remove docker docker-engine docker.io containerd runc
[sudo] password for user:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package docker-engine
2. System aktualisieren
Als nächstes Updaten wir unser Ubtuntu 22.04lts Server auf den aktuellen Stand.
sudo apt-get update
sudo apt-get upgrade
sudo reboot
Hui, da wurde doch einiges im Ubuntu Repo aktualisiert. Mal gut, dass ich diesen Update immer mache und auch jedem vor dem Einsatz neuer Software empfehle.
3. Docker installieren
Da ich schon alle möglichen Installationsvarianten ausprobiert habe, nutze ich diesmal die hoffentlich einzige auf der Webseite funktionierte Variante: Simple Docker installation
Ich muss zugeben, dass die Software es einem nicht leicht macht sie ins Herz zu schließen, jedoch sind die Feedbacks und das dazu existierende Buch für mich der Setin des Anstoßes es zu versuchen.
user@2204lts:~$ wget -qO- https://get.docker.com/ | sh
<snip>
Client: Docker Engine - Community
Version: 20.10.17
API version: 1.41
Go version: go1.17.11
Git commit: 100c701
Built: Mon Jun 6 23:02:46 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.17
API version: 1.41 (minimum version 1.12)
Go version: go1.17.11
Git commit: a89b842
Built: Mon Jun 6 23:00:51 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.8
GitCommit: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
Okay, docker ist installiert. Es ist die Community Variante 20.10.17 geworden. Noch einen kurzen Check, ob sie im systemctl eingetragen ist.
user@2204lts:~$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2022-08-28 16:27:10 UTC; 2min 41s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 2016 (dockerd)
Tasks: 9
Memory: 30.8M
CPU: 451ms
CGroup: /system.slice/docker.service
└─2016 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Aug 28 16:27:10 2204lts dockerd[2016]: time="2022-08-28T16:27:10.033208375Z" level=info msg="scheme \"unix\" not registered, fallback to de>
Aug 28 16:27:10 2204lts dockerd[2016]: time="2022-08-28T16:27:10.033240425Z" level=info msg="ccResolverWrapper: sending update to cc: {[{un>
Aug 28 16:27:10 2204lts dockerd[2016]: time="2022-08-28T16:27:10.033254276Z" level=info msg="ClientConn switching balancer to \"pick_first\>
Aug 28 16:27:10 2204lts dockerd[2016]: time="2022-08-28T16:27:10.118707666Z" level=info msg="Loading containers: start."
Aug 28 16:27:10 2204lts dockerd[2016]: time="2022-08-28T16:27:10.299497285Z" level=info msg="Default bridge (docker0) is assigned with an I>
Aug 28 16:27:10 2204lts dockerd[2016]: time="2022-08-28T16:27:10.401235272Z" level=info msg="Loading containers: done."
Aug 28 16:27:10 2204lts dockerd[2016]: time="2022-08-28T16:27:10.420854967Z" level=info msg="Docker daemon" commit=a89b842 graphdriver(s)=o>
Aug 28 16:27:10 2204lts dockerd[2016]: time="2022-08-28T16:27:10.421146384Z" level=info msg="Daemon has completed initialization"
Aug 28 16:27:10 2204lts systemd[1]: Started Docker Application Container Engine.
Aug 28 16:27:10 2204lts dockerd[2016]: time="2022-08-28T16:27:10.450391870Z" level=info msg="API listen on /run/docker.sock"
Das sieht ganz gut aus. Dann werde ich den Server mal rebooten und schauen, ob es reboot fest eingetragen ist.
user@2204lts:~$ sudo reboot
Connection to 192.168.2.154 closed by remote host.
Connection to 192.168.2.154 closed.
Ich bin zu frieden, der Docker ist reboot fest. Nicht das nach einem Neustart oder einen gewerkschaftlich angeordneten Denkpause das Troubleshooting los geht…
4. Mayan-EDMS Docker Container pullen
Die Anleitung sagt einfach den Container pullen. Dann machen wir das mal.
user@2204lts:~$ docker pull mayanedms/mayanedms:s4
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/create?fromImage=mayanedms%2Fmayanedms&tag=s4": dial unix /var/run/docker.sock: connect: permission denied
Ach nö, „permission denied“. Also auf ein neues als ROOT..
user@2204lts:~$ sudo docker pull mayanedms/mayanedms:s4
s4: Pulling from mayanedms/mayanedms
1efc276f4ff9: Pull complete
2f770c646b15: Pull complete
673175948bc9: Pull complete
cbdc76b5f0af: Pull complete
2f3f3ee42e75: Pull complete
ecaf49efbf15: Pull complete
Digest: sha256:e8839ce27df60822c9af9af4d9eac5c6cdf137491043f06fd33a905bfafb833e
Status: Downloaded newer image for mayanedms/mayanedms:s4
docker.io/mayanedms/mayanedms:s4
Das sieht doch schon besser aus und ich würde behaupten, der Container ist da. Was kommt als nächstes dran… Redis oder PostGreSQL?
5. PostGreSQL Container pullen
Die Anleitung will als nächstes PostGreSQL und hier fällt mir gleich mal was auf. In allen anderen Anleitungen stand nie eine Version dabei, wohingegen nun explizit Version 12.11-alpine gefordert wird und nicht die latest and greatest. Das notiere ich mir gleich mal, das könnte nämlich bei meinen vorherigen Versuchen mit dem BareMetal-Setup einen starken Einfluss gehabt haben – Bazies!!!
user@2204lts:~$ sudo docker pull postgres:12.11-alpine
12.11-alpine: Pulling from library/postgres
213ec9aee27d: Pull complete
85c3ef7cf9a6: Pull complete
ac29cc04759a: Pull complete
bd81f2ca8725: Pull complete
3131bb88b0c3: Pull complete
d434034b6768: Pull complete
3e565c14669c: Pull complete
01f499824d81: Pull complete
Digest: sha256:6eca42e0c08b02c7cf53c8d60b735071165e22b9bb5e505e0b2a150f94fa84cb
Status: Downloaded newer image for postgres:12.11-alpine
docker.io/library/postgres:12.11-alpine
Auch hier wieder die Installation mit ROOT permissions… schmeckt mir nicht, aber ist ja erstmal nur für den Vergleichstest. (knurr)
Jetzt ist mit Sicherheit Redis dran..
6. Redis Container pullen
Auch hier wieder eine wundersame Entdeckung. Ebenfalls nicht die latest and greatest Redis Version, sondern explizit Version 6.2-alpine. Mir wird immer klarer, warum meine Installationsversuche in die Hose gegangen sind. Kann das dann mal bitte jemand in die anderen Anleitungen bei Mayan-EDMS eintragen? Oder wollen die ihre Software nicht am Markt sehen; Fragen über Fragen??
user@2204lts:~$ sudo docker pull redis:6.2-alpine
6.2-alpine: Pulling from library/redis
213ec9aee27d: Already exists
c99be1b28c7f: Pull complete
8ff0bb7e55e3: Pull complete
477c33011f3e: Pull complete
2bbc51a93257: Pull complete
2d27eae19281: Pull complete
Digest: sha256:fad643c78fadb65fdfe79e19a37b0923ae48e69b4a1e7c6be2e94e080f2554b4
Status: Downloaded newer image for redis:6.2-alpine
docker.io/library/redis:6.2-alpine
Die notwendigen Container habe ich gepullt. Nun müssen diese noch mit mit einer minimalen Konfig gestartet werden. Egal was da jetzt in dem Template steht. bei mir laufen die jetzt auf der Default-Bridge. Ich hab da jetzt keine Lust auf Experimente im Routing/Switching…
7. PostGreSQL Container anlegen und starten
Die Programierer haben da wohl auch keine Lust auf Netzwerkspielereien gehabt und nehmen ebenso die Default-Bridge. Ich bin beruhigt… dann wollen wir den Container mal anlegen und starten.
user@2204lts:~$ sudo docker run -d --name mayan-edms-postgres --restart=always -p 5432:5432 -e POSTGRES_USER=mayan -e POSTGRES_DB=mayan -e POSTGRES_PASSWORD=mayanuserpass -v /docker-volumes/mayan-edms/postgres:/var/lib/postgresql/data postgres:12.11-alpine
1b1e445f8093ad36278427354a06025c6d4dec631d8eaeeb3e024ad147784833
Das hat Docker ohne zu murren gefressen. Schauen wir mal nach, ob der Container tatsächlich angelegt wurde und fliegt.
user@2204lts:~$ sudo docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1b1e445f8093 postgres:12.11-alpine "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp mayan-edms-postgres
Sehr schön, der Container wird auf die Default-Bridge mit altem IP und neuem IPv6 mit Port TCP 5432 durchgereicht, laufen tut er natürlich auch. 🙂
Dann bringen wir mal den Key-Value-Store in Form unseres knuffigen Redis-Containers an den Start.
8. Redis Container anlegen und starten
Auch beim Redis Container wird alles auf die Default-Bridge gelegt und die notwendigen Parameter mit in den Docker gegebenen. Dann wollen wir den mal starten, den Container.
user@2204lts:~$ sudo docker run \
-d \
--name mayan-edms-redis \
--restart=always \
-p 6379:6379 \
-v /docker-volumes/mayan-edms/redis:/data \
redis:6.2-alpine \
redis-server \
--databases \
"3" \
--maxmemory-policy \
allkeys-lru \
--save \
"" \
--requirepass mayanredispassword
Boom, das hat Docker ohne Wiederworte gefressen. Ich sehe lieber mal nach.
user@2204lts:~$ sudo docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da18af735024 redis:6.2-alpine "docker-entrypoint.s…" 33 seconds ago Up 32 seconds 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp mayan-edms-redis
1b1e445f8093 postgres:12.11-alpine "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp mayan-edms-postgres
Sehr schön, da waren es schon zwei Container. Der Redis Container macht ebenso altes und modernes IP auf TCP Port 6379. Sehr schön. Irgendwann stelle ich meine ganze Bude hier auf IPv6 only um!
9. Mayan-EDMS Container anlegen und starten
Bisher war ja alles Vorgeplänkel für unseren Mayan-EDMS. Dann wollen wir mal diesen Container auf die Startrampe schieben.
user@2204lts:~$ sudo docker run \
-d \
--name mayan-edms \
--restart=always \
-p 80:8000 \
-e MAYAN_CELERY_BROKER_URL="redis://:mayanredispassword@172.17.0.1:6379/0" \
-e MAYAN_CELERY_RESULT_BACKEND="redis://:mayanredispassword@172.17.0.1:6379/1" \
-e MAYAN_DATABASES="{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mayan','PASSWORD':'mayanuserpass','USER':'mayan','HOST':'172.17.0.1'}}" \
-e MAYAN_LOCK_MANAGER_BACKEND="mayan.apps.lock_manager.backends.redis_lock.RedisLock" \
-e MAYAN_LOCK_MANAGER_BACKEND_ARGUMENTS="{'redis_url':'redis://:mayanredispassword@172.17.0.1:6379/2'}" \
-v /docker-volumes/mayan-edms/media:/var/lib/mayan \
mayanedms/mayanedms:s4
a38e59294fcd7883e5fc46995da0057e307674569f90df5b3e961604cadf78a4
Auch ohne zu mucken angelegt und gestartet. Das einzige, was dem geneigten Docker Nutzer sofort auffält, ist das der Container interne Port 8000 auf den Host Port 80 gemapped wird. Also sollte mich auf der Ubuntu 22.04lts Server Adresse 192.168.2.154 auf Port 80 ein Webinterface vom Mayan-EDMS Server anlächeln und HTTP-Session annehmen. Bevor ich das Teste, sehe ich mir das allerdings nochmal aus der Docker Perspektive an, und Prüfe ob alle drei Container sauber laufen. Ihr wisst schon…Pferde und Apothekken und so…
user@2204lts:~$ sudo docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a38e59294fcd mayanedms/mayanedms:s4 "entrypoint.sh run_a…" 3 minutes ago Up 3 minutes 0.0.0.0:80->8000/tcp, :::80->8000/tcp mayan-edms
da18af735024 redis:6.2-alpine "docker-entrypoint.s…" 6 minutes ago Up 6 minutes 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp mayan-edms-redis
1b1e445f8093 postgres:12.11-alpine "docker-entrypoint.s…" 11 minutes ago Up 11 minutes 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp mayan-edms-postgres
user@2204lts:~$
Ich bin hoch erfreut und werde mal vorsichtig am Web Interface mit einem Firefox anklopfen.
10. Erster Webkontakt mit Mayan-EDMS
Pray the lord!!!
Aus meiner Perspektive ein ziemliches Wunder, der Bock läuft endlich. Vermutlich fühlt sich es so bei einem Modelbauer an, wenn das erstemal nach einigen Rückschlägen endlich das zusammengebaute ferngesteurte Auto einen kleinen ruckler tut… was für eine schwere Geburt..


Noch ein schneller Reboot-Test, ob die Container auch automatisch wieder hoch kommen oder ich ein Script bauen muss. Das sieht soweit auch ganz gut aus. Das soll es dann fürs Erste mit der Installation von Mayan-EDMS gewesen sein.
Oh, Du verwendest ja docker, aber nicht docker-compose.
Das würde es vereinfachen.
https://docs.mayan-edms.com/chapters/docker/install_docker_compose.html
Imm darauf achten, das Du die aktuellsten Versionen von docker und docker-compose verwendest.
Debian 11 (extra Sourcen)
docker –version && sudo docker compose version
Docker version 20.10.17, build 100c701
Docker Compose version v2.6.0
Besser wäre natürlich podman.
VG
Michael
Hallo Michael,
ich habe es versucht und es ging leider nicht.
Das Debian 11 mit ständig Zicken gemacht
und so bin ich auf pures Docker ausgewichen.
Für einen Vergleich ausreichend, für den späteren Dauerbetrieb zugegeben
keine Lösung. Werde ich mich ggf. noch mit befassen. 😉
VG, Eric
https://docs.mayan-edms.com/chapters/portainer/installation.html
Die Anleitung funktioniert auf einem Debian 11 ruck zuck.
Wofür entscheiden man sich, Paperless-ngx, Docspell oder Mayan-DMS ?
Danke für dein Sharen hier.
VG
Michael
Hallo Michael,
Die Frage kann ich noch nicht beantworten, werde mich heute aber endlich damit befassen.
VG, Eric