ecoDMS 18.08 mit Docker und SystemD

TL;DR

Jedes Unternehmen sollte sich mit der revisionssicheren Archivierung von Dokumenten auseinandersetzen.
In einem vorherigen Beitrag haben wir bereits vorgestellt, wie dazu die DMS Software ecoDMS ausfallsicher in einen Docker Swarm mit Ablage der Daten auf einem Storageserver betrieben werden kann.

Diese Lösung eignet sich leider nur für Installationen, die mit der kostenlosen, für Privatanwender reservierten free4three Edition der Software arbeiten.
Für den Betrieb mit einer aktivierten Lizenz der Software ist es nötig, einmal erstellte Container wiederzuverwenden, was im Swarmbetrieb von Docker nicht vorgesehen ist. Dieser Artikel zeigt deshalb eine Möglichkeit für den Betrieb mit Docker und SystemD.

Probleme mit ecoDMS Lizenzen in Docker

Lizenzen der Software ecoDMS werden an das System gebunden, auf welchem sie aktiviert werden. Dafür bildet die Serversoftware aus Informationen, welche über das System zur Verfügung stehen eine Hardware ID und sendet diese an den Aktivierungsserver von applord (Entwickler von ecoDMS). Alternativ kann die Hardware ID auch mit dem Lizenzschlüssel auf der Herstellerseite in ein Formular eingetragen werden, um eine systemgebundene Lizenz für die manuelle Aktivierung zu erhalten.
Soll die Lizenz nun doch auf einem neuen System eingesetzt werden, muss sie zuvor auf dem bestehenden System deaktiviert oder vom Kundendienst manuell zurückgesetzt werden.

In einem Dockercontainer gibt es naturgemäß nicht viele Informationen über das tatsächliche Hostsystem, auf welchem die Software läuft. Welche Informationen nun herangezogen werden, um die Hardware ID zu bilden, konnten wir von applord leider nicht in Erfahrung bringen.
Es scheint sich dabei aber um Informationen zu handeln, welche beim Erstellen des Containers erzeugt werden und danach für seine Lebensdauer unverändert bleiben, wie etwa die Container ID.
Die folgenden Screenshots zeigen Hardware IDs der gleichen ecoDMS Docker Installation. Dazwischen steht lediglich ein Entfernen und Neuerstellen des Containers.

Container wiederverwenden

Damit initial erzeugte Containerinformationen, welche für die Gültigkeit der Lizenz beibehalten werden müssen, im Betrieb erhalten bleiben ist es also wichtig, dass diese Container immer wieder verwendet werden.
Es ist erlaubt, sie zu starten und zu stoppen, aber sie dürfen nicht gelöscht und neu erstellt werden.

Letzteres ist leider genau die Arbeitsweise von docker-compose und Services in Docker Swarm.

Manuelles Einrichten mit Docker

Volumes vorbereiten

Während in unserem vorherigen Setup-Vorschlag noch über CIFS (Samba) eingebundene Volumes eingesetzt und nur das Hauptverzeichnis aus Performancegründen per sshfs eingebunden wurde, setzt die hier vorgestellte Lösung vollständig auf sshfs.
Dieser Volumetreiber hat sich als stabiler und zuverlässiger im laufenden Betrieb herausgestellt.

Installieren Sie daher zunächst das Storage Plugin für die Docker Engine und starten Sie Docker anschließend neu.
Daher kommt für das Hauptverzeichnis noch ein weiteres Volume-Plugin zum Einsatz: docker-volume-sshfs
Installieren Sie es mit folgendem Befehl und starten Sie den Docker Daemon anschließend neu:

docker plugin install vieux/sshfs
systemctl restart docker

Der Rest dieses Abschnittes dient dazu, die einzelnen Schritte des SystemD Service Skripts zu erläutern.
Sie können nach Installation des Storage Plugins für sshfs nun direkt mit der Einbindung in SystemD fortfahren.

Nun können mithilfe dieses Storage Plugins sshfs Volumes für die von ecoDMS benötigten Verzeichnisse erstellt werden.
Passen Sie die Angaben für user, servername und password sowie das Zielverzeichnis auf dem SSH Server bitte an Ihre Umgebung an. Die Angabe des Ports mit -o port=22 können Sie entfernen, wenn Ihr SSH Server auf dem Standardport 22 erreichbar ist.

docker volume create -d vieux/sshfs \
    -o sshcmd=user@servername:ecodms/data -o password=password \
    -o port=22 -o reconnect -o allow_other -o uid=17001 -o gid=0 \
    ecodms-data
docker volume create -d vieux/sshfs \
    -o sshcmd=user@servername:ecodms/backup -o password=password \
    -o port=22 -o reconnect -o allow_other -o uid=17001 -o gid=0 \
    ecodms-backup
docker volume create -d vieux/sshfs \
    -o sshcmd=user@servername:ecodms/restore -o password=password \
    -o port=22 -o reconnect -o allow_other -o uid=17001 -o gid=0 \
    ecodms-restore
docker volume create -d vieux/sshfs \
    -o sshcmd=user@servername:ecodms/scaninput -o password=password \
    -o port=22 -o reconnect -o allow_other -o uid=17001 -o gid=0 \
    ecodms-scaninput

Container erstellen

Mit den vorhandenen Volumes kann nun ein neuer Container für ecoDMS 18 erstellt werden.
Um den Container später für Start und Stop besser ansprechen zu können, erhält er bei der Erstellung den festen Namen ecodms18. Außerdem werden die Ports für die Clientanwendung, den HTTP Server und die API Schnittstelle nach außen freigegeben.

docker create \
    -v ecodms-data:/srv/data \
    -v ecodms-backup:/srv/backup \
    -v ecodms-restore:/srv/restore \
    -v ecodms-scaninput:/srv/scaninput \
    --name ecodms18 \
    -p 17001:17001 \
    -p 17080:8080 \
    -p 17081:8180 \
    ecodms/allinone-18.09

Container starten und stoppen

Durch den fest vergebenen Namen lässt sich der Container für ecoDMS 18 nun über einen einfachen Konsolenbefehl starten und stoppen.

docker container start ecodms18
docker container stop ecodms18

Sollten Sie eine Datensicherung aus einer alten Installation haben, legen Sie diese vor dem Start des Containers in das Verzeichnis des Storageservers, welches für das Volume ecodms-restore eingebunden wird und nennen Sie die Datei restore.zip. ecoDMS wird beim nächsten Start die vollständige Datenbank des Containers durch die Daten aus dem Backup ersetzen und die Datei anschließend in restore-processed.zip umbenennen.

Automatisierung als Systemdienst

Um Container nicht selbst erzeugen, starten und deren Betrieb überwachen zu müssen, eignet sich die Einrichtung als systemd Dinst auf einem Linuxserver.

Das auf Basis des letzten Abschnittes erstellte Serviceskript im Anhang1 führt genau die dort vorgestellten Schritte durch und prüft zudem im Rythmus von 10 Sekunden, ob ein gestarteter Container noch läuft um ihn gegebenenfalls neu zu starten.

Um es auf Ihrem Server zu nutzen, führen Sie die folgenden Schritte durch:

  1. Erstellen Sie auf Ihrem SSH Storage Server ein Verzeichnis NAME, in welchem die Verzeichnisse für die ecoDMS-Volumes liegen sollen.
    NAME ist eine frei wählbare Zeichenkette (Buchstaben, Ziffern, - ), mit der Sie den Zweck des ecoDMS Containers beschreiben können (mystuff, clientxy, ...)
  2. Speichern Sie das Skript aus dem Anhang1 unter /etc/systemd/system/docker-ecodms@.service und passen Sie die enthaltenen Umgebungsvariablen an Ihr System an.
  3. Aktivieren Sie den Systemservice für Ihren ersten ecoDMS Container mit systemctl enable --now docker-ecodms@NAME.service

Der letzte Befehl aktiviert den SystemD Dienst und setzt ihn auf gestartet. Das Skript erzeugt nun automatisch sshfs Volumes mit dem Namen ecodms-NAME-data, -backup, -restore und -scaninput und erzeugt und startet den ecoDMS Container namens ecodms-NAME.

Zusammenfassung und Caveats

Sowohl das manuelle Vorgehen als auch das hier veröffentlichte SystemD Skript sorgen nun für einen stabilen Betrieb von ecoDMS mit Docker - zumindest auf einer einzelnen Maschine.
SystemD bringt darüber hinaus noch den Vorteil, dass die gestartete Serverinstanz überwacht und nach einem Absturz des Containers automatisch neu gestartet wird.

Leider ist es nicht möglich, reibungslos auf neue Versionen der Dockerimages von applord umzustellen. Ein Wechsel des Image funktioniert leider nur über die Erstellung eines neuen Containers. Damit ändert sich auch die Hardware ID. Außerdem muss der vom SystemD Skript erstellte Container zuvor manuell gelöscht werden, damit er mit dem neuen Image erneut erstellt wird.
Denken Sie zuvor aber unbedingt daran, über die Clientanwendung ein manuelles Backup auszulösen und Ihre Lizenz zu deaktivieren, damit Sie diese in dem neuen Container wieder aktivieren können.

Solange Ihr Dockerserver läuft, sollte nun auch ein ausfallsicherer ecoDMS Container mit Datenspeicherung auf einer externen Storagemaschine in Ihrem Netzwerk zur Verfügung stehen.

Bei der Einrichtung dieses Setups auf Ihrer Infrastruktur sind wir Ihnen gerne behilflich oder übernehmen in Ihrem Auftrag das Hosting Ihres Dokumentenarchivs. Bitte kontaktieren Sie uns bei Interesse.

Appendix


  1. Das SystemD Serviceskript