## TL;DR
Jedes Unternehmen sollte sich mit der revisionssicheren Archivierung von Dokumenten auseinandersetzen.
Mit Docker Swarm und einem per Samba und SSH erreichbaren Storageserver lässt sich die DMS Software ecoDMS ausfallsicher auf den Nodes der Dockerumgebung betreiben.
Gerne sind wir bei der Einrichtung auf Ihrer Infrastruktur behilflich oder übernehmen in Ihrem Auftrag das Hosting Ihres Dokumentenarchivs. Bitte (link:/kontakt text:kontaktieren Sie uns) bei Interesse.
## Revisionssichere Archivierung von Dokumenten
Nicht erst seit Inkrafttreten der DS-GVO am 25.Mai müssen sich auch kleine Unternehmen mit der revisionssicheren Archivierung von Rechnungen, Verträgen und allgemeinem Schriftverkehr auseinandersetzen. Ein vor allem nach dem Verhältnis von Preis und Leistung hervorragender Bewerber für die Lösung dieses Problems ist die Software (link: https://www.ecodms.de text: ecoDMS) des Aachener Unternehmens AppLord Holding GmbH.
Der Funktionsumfang der Software kann auf der Webseite des Herstellers detailliert nachgelesen werden. Die folgende Beschreibung dient als Grundlage für die Ausgestaltung des in diesem Artikel beschriebenen Setup.
Die Software bietet:
* einen Software Client für den Zugriff auf das Archiv sowie die Klassifizierung neuer Dokumente und die Erstellung von Klassifizierungsvorlagen für erkannte Dokumentstrukturen
* einen Webclient für den Zugriff auf das Archiv über den Browser
* einen Scan Input Ordner für die automatische Aufnahme neuer Dokumente in den Klassifizierungseingang
Gerade durch die Funktionen der automatischen Archivierung und die im Hintergrund genutzte OCR Software ist der ecoDMS Server etwas ressourcenhungrig.
Ebenfalls kann es, wie bei anderer Software auch, durchaus einmal passieren, dass der Dienst abstürtzt.
Um nicht einen Server nur für den Betrieb des Archivs stellen zu müssen und ihn im Fehlerfall automatisch neu zu starten, bietet sich der Einsatz von Docker Swarm an.
## ecoDMS im Container
Inzwischen existiert ein (link: https://hub.docker.com/r/ecodms/allinone-16.09/ text:offizielles Docker Image für ecoDMS). Dieses ist zwar eigentlich für den Einsatz auf Synology oder QNAP NAS Systemen mit Docker Unterstützung gedacht, im folgenden Setup kommt es aber für den Betrieb auf einem Cloudserver des Rechenzentrums von Hetzner zum Einsatz.
Voraussetzung dafür ist die bereits installierte Docker Community Edition nach aktuellen Docker Setup Guides.
Zunächst weist das Dockerfile des Containers vier Mountpunkte für Volumes aus. Um bei einem Neustart oder Update des Containers nicht alle Daten zu verlieren, sollten diese auch für die persistente Speicherung konfiguriert werden, z.B. durch Binden an einen Ordner des lokalen Systems.
- `/srv/data` enthält alle Daten des aktuellen Archivs. Als wichtigstes Verzeichnis hält es mit Abstand die meisten Daten und hat die meisten Schreib/Leseoperationen zu bewältigen
- `/srv/backup` ist das Zielverzeichnis für manuell oder automatisch durchgeführte Backups des Archivs
- `/srv/restore` wird bei Start geprüft. Ein darin enthaltenes Backup wird als __vollständiger Ersatz__ der aktuellen Daten einespielt
- `/srv/scaninput` wird fortwährend geprüft und darin auftauchende Bild- und PDF-Dateien direkt in die Klassifizierungspipeline übernommen
### Daten von extern
Die folgenden Schritte müssen auf allen Nodes des Schwarms durchgeführt werden, welche den ecoDMS Container betreiben sollen.
Um im Docker Swarm den Dienst auf allen verfügbaren Schwarmnodes starten zu können, werden diese Verzeichnisse an ein externes Storage System ausgelagert und über (link:http://netshare.containx.io/ text docker-volume-netshare) als Sambafreigabe (cifs) eingebunden.
Stellen Sie zunächst sicher, dass Sie die nötigen Dateisystemtreiber installiert haben und installieren Sie den Docker Volume Treiber (Beispiel für Debian stretch).
```bash
sudo apt-get install nfs-common
wget https://github.com/ContainX/docker-volume-netshare/releases/download/v0.35/docker-volume-netshare_0.35_amd64.deb
sudo dpkg -i docker-volume-netshare_0.35_amd64.deb
sudo vi /etc/default/docker-volume-netshare
# set the netshare opts to "cifs"
# DKV_NETSHARE_OPTS="cifs"
sudo service docker-volume-netshare restart
```
Versuchen Sie nun einmal, das Zielverzeichnis, in dem die ecoDMS Daten abgelegt werden sollen, als cifs mount im System einzuhängen und darauf zuzugreifen.
```bash
mount -t cifs -o username='YOUR_USER',password='YOUR_PASSWORD',noperm,nostrictsync //YOUR_SERVER_ADDRESS/SHARED_FOLDER_NAME /mnt
touch /mnt/testfile
ls -la /mnt
umount /mnt
```
Eine Ausnahme stellt noch das Hauptverzeichnis dar. Besonders durch die enthaltene PostrgreSQL Datenbank wird hier oft der Dateisystembefehel fsync genutzt. Dieses wird von vielen SMB-Diensten nicht gut unterstützt und ist bei CIFS-Clients schwer zu konfigurieren.
Daher kommt für das Hauptverzeichnis noch ein weiteres Volume-Plugin zum Einsatz: (link:https://github.com/vieux/docker-volume-sshfs text:docker-volume-sshfs)
Installieren Sie es mit folgendem Befehl und starten Sie den Docker Daemon anschließend neu:
```bash
docker plugin install vieux/sshfs
systemctl restart docker
```
### Konfiguration des Containers
Die folgende Konfiguration nutzt einen SSH-Nutzer, um nach dem Login im Verzeichnis /data der Remotemaschine die Haupt-Archivdaten zu lagern.
Die weiteren Shares werden über einen Samba-Nutzer in Unterverzeichnisse eines gemeinsamen Samba Shares verteilt.
Damit läuft im Dockerschwarm ein ausfallsicherer ecoDMS Container mit Datenspeicherung auf einer externen Storagemaschine.
Bei der Einrichtung dieses Setups auf Ihrer Infrastruktur sind wir Ihnen gerne behilflich oder übernehmen in Ihrem Auftrag das Hosting Ihres Dokumentenarchivs. Bitte (link:/kontakt text:kontaktieren Sie uns) bei Interesse.