Installation von Scope

In diesem Kapitel wird beschrieben, wie man REWOO Scope auf einem Linux-System installiert. Grundsätzlich kann jede aktuellere Linux-Distribution verwendet werden, allerdings können sich die Kommandos von den hier angeführten Beispielen unterscheiden.

Debian 11

Voraussetzungen

Es wird davon ausgegangen, dass die Systemvoraussetzungen erfüllt sind. Darüber hinaus werden folgende Dinge benötigt:

  • Debian 11
  • Shell-Zugang (z. B. via SSH)
  • root-Rechte (z. B. via su oder sudo)
  • Internetzugang auf dem Linux-Server
  • grundlegende Kenntnisse im Umgang mit der Shell (BASH)
Diese Anleitung setzt keine grafische Umgebung voraus.

Basis Pakete installieren

Bevor mit der eigentlichen Installation von REWOO Scope begonnen werden kann, sollten alle Tools installiert sein, die benötigt werden. Damit die Installation einwandfrei funktioniert, empfehlen wir, die folgenden Punkte in der hier angegebenen Reihenfolge durchzuführen. Beginnen Sie nach erfolgte Installation mit einer Prüfung nach ausstehenden Updates:
apt update
Sofern Updates ausstehend sind, sollten Sie diese mit nachfolgendem Befehl installieren:
apt upgrade
Folgende Basispakete werden für die Installation bzw. den Betrieb von REWOO Scope benötigt und sollten deshalb vorab installiert sein.

unzip

Zum Entpacken von Archiven.
apt install unzip

Perl

Zum Ausführen diverser Scripte.
apt install perl

ImageMagick

Für die Vorschau von Bildern werden ImageMagick und ghostscript benötigt.
apt install imagemagick ghostscript

Zum Hinzufügen von repositories

apt install software-properties-common

ClamAV

ClamAV ist ein kostenloser Virenscanner, der in REWOO Scope eingebunden werden kann, um Dokumente, E-Mail-Anhänge und andere Dateien auf Viren und Schadsoftware zu überprüfen. Mehr Informationen finden sie auf der offiziellen Webseite von ClamAV.
apt install clamav clamav-update
Wenn SELinux verwendet wird, muss ClamAV noch erlaubt werden, sämtliche Dateien auf dem Server zu scannen:
setsebool -P antivirus_can_scan_system 1
setsebool -P clamd_use_jit on

LibreOffice installieren

Für die Vorschau von Office-Dokumenten wird LibreOffice benötigt. Hier wird exemplarisch die Version 7.5.1 installiert. Falls Sie eine andere/neuere Version installieren, müssen die jeweiligen Pfade angepasst werden.
wget -c https://download.documentfoundation.org/libreoffice/stable/7.5.1/deb/x86_64/LibreOffice_7.5.1_Linux_x86-64_deb.tar.gz
tar xf LibreOffice_7.5.1_Linux_x86-64_deb.tar.gz
cd LibreOffice_7.5.1.1_Linux_x86-64_deb/DEBS
dpkg -i *.deb
cd -

Java (Corretto JDK) installieren

Die REWOO scope Serversoftware benötigt JDK 11. Wir empfehlen die Verwendung des OpenJDK Ablegers Corretto von Amazon. Details finden Sie auf der offiziellen Corretto Webseite. Fügen Sie das Corretto Repository zum System hinzu:
wget -O- https://apt.corretto.aws/corretto.key | sudo apt-key add - 
add-apt-repository 'deb https://apt.corretto.aws stable main'
Installieren Sie Corretto 11 anschließend.
apt update; apt install -y java-11-amazon-corretto-jdk

Xvfb X11-Server

Dieser Dienst wird für LibreOffice benötigt. Details zu Xvfb finden Sie hier. Installieren Sie den Dienst:
apt install xvfb
Anlegen des Start-Scripts
Erstellen Sie die Datei /etc/systemd/system/xvfb.service und füllen Sie diese mit folgendem Inhalt:
[Unit]
Description=xinit - user "rewoo"
[Service]
User=rewoo
Group=rewoo
ExecStart=/usr/bin/Xvfb :14 -nolisten tcp -screen 0 1024x768x24 -fbdir /var/tmp/
ExecStopPost=/usr/bin/killall -u rewoo Xvfb
[Install]
WantedBy=multi-user.target
Xvfb aktivieren
systemctl enable xvfb.service
systemctl start xvfb

Apache HTTP Server

Installation
apt install apache2
benötigte Module aktivieren
cd /etc/apache2/mods-enabled
ln -s ../mods-available/headers.load
ln -s ../mods-available/proxy_ajp.load
ln -s ../mods-available/proxy_balancer.conf
ln -s ../mods-available/proxy_balancer.load
ln -s ../mods-available/proxy.conf
ln -s ../mods-available/proxy.load
ln -s ../mods-available/proxy_http.load
ln -s ../mods-available/rewrite.load
ln -s ../mods-available/slotmem_shm.load
ln -s ../mods-available/socache_shmcb.load
ln -s ../mods-available/ssl.conf
ln -s ../mods-available/ssl.load
Konfiguration
Erstellen Sie die Datei /etc/apache2/sites-available/rewoo.conf und füllen Sie sie mit folgendem Code:
<VirtualHost $IP:80>
        ServerAdmin webmaster@$HOSTNAME
        ServerName $HOSTNAME
        RewriteEngine On
        RewriteCond %{SERVER_PORT} ^80$
        RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R=301]
        ErrorDocument 503 /errorpages/503.html
        ErrorLog ${APACHE_LOG_DIR}/error_log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/access_log combined
</VirtualHost>
Erstellen Sie die Datei /etc/apache2/sites-available/rewoo-ssl.conf und füllen Sie sie mit folgendem Code:
LoadModule ssl_module modules/mod_ssl.so

<IfModule mod_ssl.c>
<VirtualHost *:443>
		ServerAdmin webmaster@$HOSTNAME
		ServerName $HOSTNAME
		RewriteEngine On
		RewriteRule ^$ /rewoo [R]
		RewriteRule ^/$ /rewoo [R]
		DocumentRoot /var/www
		<Directory />
						Options FollowSymlinks MultiViews
						AllowOverride None
						Order allow,deny
						Allow from all
		</Directory>
		ErrorDocument 503 /errorpages/503.html
		BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully
		BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
		BrowserMatch "Microsoft-WebDAV-MiniRedir/5.1.2600" redirect-carefully
		BrowserMatch "^WebDrive" redirect-carefully
		BrowserMatch "^WebDAVFS" redirect-carefully
		<IfModule encoding_module>
						EncodingEngine on
						NormalizeUsername on
						<IfModule headers_module>
										Header add Dav "1,2"
										Header add MS-Author-Via "DAV"
						</IfModule>
		</IfModule>
		ErrorLog ${APACHE_LOG_DIR}/error_log
		# Possible values include: debug, info, notice, warn, error, crit,
		# alert, emerg.
		LogLevel warn
		CustomLog ${APACHE_LOG_DIR}/ssl_access_log combined
		BrowserMatch "MSIE [2-6]" \
						nokeepalive ssl-unclean-shutdown \
						downgrade-1.0 force-response-1.0
		# MSIE 7 and newer should be able to use keepalive
		BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
		# write proxy directives into a single file
		Include /etc/apache2/ProxyPass.conf
</VirtualHost>
</IfModule>
Ersetzen Sie die hervorgehobenen Teile innerhalb der rewoo.conf und rewoo-ssl.conf mit den Daten Ihres Servers. Dazu zählen die $IP und der $HOSTNAME, unter denen REWOO Scope erreichbar sein soll.

Aktivieren Sie die beiden Konfigurationen, indem Sie im Verzeichnis /etc/apache2/sites-enabled Links auf diese Dateien anlegen und alle nicht benötigten Konfigurationen entfernen:
cd /etc/apache2/sites-enabled
rm ./*
ln -s ../sites-available/rewoo.conf
ln -s ../sites-available/rewoo-ssl.conf
Wechseln Sie ins Verzeichnis /etc/apache2/, erstellen Sie dort eine Datei mit dem Namen ProxyPass.conf und fügen anschließend folgenden Inhalt ein:
ProxyTimeout 900
<Location /rewoo>
    Order Deny,Allow
    Allow from All
    ProxyPass http://localhost:7070/rewoo
    ProxyPassReverse http://localhost:7070/rewoo
</Location>
Neustart des Dienstes
Damit die Änderungen wirksam werden, starten Sie am einfachsten den Webserver neu.
systemctl restart apache2.service

SSL - Letsencrypt

Für die SSL-Zertifikate empfehlen wir das Projekt Letsencrypt. Weitere Details zu der Komponente Certbot finden sie hier.
Installation von certbot
apt install snapd
snap install core
snap refresh core
snap install --classic certbot
Fügen Sie einen Symlink zum Ausführen von Certbot hinzu:
ln -s /snap/bin/certbot /usr/bin/certbot
Generieren der Zertifikate
certbot --apache --cert-name kunde.rewoo.net -d kunde.rewoo.net
Ersetzen Sie kunde.rewoo.net hierbei durch den Domainnamen unter dem Ihr Server zukünftig erreichbar sein soll.
Neustart des Webservers
systemctl restart apache2.service
Test automatische Zertifikatserneuerung
Certbot erneuert Ihr Zertifikat automatisch. Zum Test dieser Funktion können Sie folgenden Aufruf ausführen:
certbot renew --dry-run

Firewall einrichten

Installation des Konfigurationstools ufw
apt install ufw
Konfiguration
ufw allow http
ufw allow https
ufw allow ssh
Firewall aktivieren
ufw enable

PostgreSQL

Installation
Bevor Sie mit der Konfiguration der PostgreSQL-Datenbank beginnen, müssen Sie diese installieren und initialisieren.
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
RELEASE=$(lsb_release -cs)
echo "deb http://apt.postgresql.org/pub/repos/apt/ ${RELEASE}"-pgdg main | tee  /etc/apt/sources.list.d/pgdg.list
apt update
Installieren Sie nun die aktuelle PostgreSQL Version (derzeit v15). Passen Sie ggf, die Versionsnummer des Paketnamens an. Es wird mind. PostgreSQL 12.x benötigt.
apt install postgresql-15
PostgreSQL konfigurieren
Wechseln Sie in das Verzeichnis /etc/postgresql/11/main (Pfadname kann bei anderer PostgreSQL-Version abweichen) und öffnen Sie dort die Datei pg_hba.conf. Dort fügen Sie an der angegebenen Stelle jeweils VOR den bereits bestehenden Einträgen folgende Zeilen ein:

Bei IPv4 als erste Zeile hinzufügen:
host	rewoodb		rewoo	127.0.0.1/32	trust
Bei IPv6 als erste Zeile hinzufügen:
host	rewoodb		rewoo	::1/128		password
Im gleichen Verzeichnis bearbeiten finden Sie die Datei postgresql.conf. Dort müssen die folgenden Parameter entsprechende Ihres Systems angepasst werden. An folgende Richtwerte kann sich orientert werden:

  • max_connections = Anzahl der CPU-Kerne * 3
  • shared_buffers = RAM / 4
  • wal_buffers = 2MB
  • checkpoint_segments = 32
  • checkpoint_timeout = 5min
  • effective_cache_size = RAM / 4
  • work_mem = RAM / (max_connections * 16)
  • maintenance_work_mem = RAM / 16
Anschließend sollte die shared memory des Kernels auf denselben Wert gesetzt werden, der oben für shared_buffers verwendet wurde:
sysctl -w kernel.shmmax=<shared_buffers-Wert>
rewoo-User und rewoodb-Datenbank anlegen
su -l postgres
psql
CREATE USER rewoo WITH CREATEDB PASSWORD 'rewoo';
CREATE DATABASE rewoodb WITH owner=rewoo encoding='utf-8';
\q
exit
Die Einrichtung der Postgres-Datenbank für die Benutzung mit REWOO Scope ist damit abgeschlossen.

Letzte Vorbereitungen (Systemuser und Dateilimits)

Anlegen des Systemnutzers 'rewoo'
Für den Betrieb von REWOO Scope wird der Benutzer rewoo benötigt. Diesen erstellen Sie mit dem folgenden Befehl:
useradd -m -d /home/rewoo -s /bin/bash -c "REWOO Scope" -U -- rewoo
Limit für Dateiöffnung erhöhen
Da Java-Application-Server häufig viele Dateien gleichzeitig geöffnet halten, sprengen sie schnell die üblichen Limits für das gleichzeitige Öffnen von Dateien. Es ist daher notwendig, das Limit der Anzahl gleichzeitig geöffneter Dateien für den Benutzer rewoo zu erhöhen.

Dazu wechseln Sie in das Verzeichnis /etc/security/limits.d, legen Sie dort eine Datei mit dem Namen rewoo.conf an und füllen diese mit folgendem Code:
rewoo   -       nofile  8192
Editieren Sie anschließend die Datei /etc/pam.d/su und entfernen Sie das Kommentarzeichen vor der Zeile:
session         required        pam_limits.so

Sie können überprüfen, ob die Erhöhung der Limits wirksam ist, indem Sie sich als Benutzer rewoo einloggen und das Kommando ulimit -a aufrufen.

Fahren Sie jetzt mit der Installation von REWOO Scope fort.

REWOO Scope installieren

Nachdem alle benötigten Tools und Software-Pakete installiert wurden, kann mit der Installation der REWOO Scope Serversoftware begonnen werden.

REWOO Scope Dateien

Kopieren Sie die zur Verfügung gestellten Dateien REWOO.war, config-grails5.sh, start-grails5.sh und debug.sh in das Verzeichnis /home/rewoo/. Sofern Sie die Dateien mit einem anderen User auf den Server geladen haben, ändern Sie den Besitzer für die Dateien auf den rewoo User:
chown rewoo:rewoo *.*
Setzen Sie die Berechtigungen:
chmod 0744 *.*
Führen Sie die weiteren Arbeiten mit dem rewoo User aus. Wechseln Sie dazu in den Account:
su rewoo
Sofern Ihr Server keine Verbindung zum Internet herstellen kann, erstellen Sie ein temp Verzeichnis für die tika Serverkomponente und verschieben diese anschließend dorthin.
mkdir /tmp/rewoo-scoope-tika
cp tika-server-1.28.4.jar /tmp/rewoo-scope-tika/

Konfiguration

Die Konfiguration der REWOO Scope Serversoftware erfolgt über das Skript config-grails5.sh. Rufen Sie das Skript mit Parametern für den Namen der Instanz (Default "rewoo") und den verwendeten (internen) Port (Default 7070) auf:
./config-grails5.sh rewoo 7070

Start REWOO Scope Server

Nachdem die Konfiguration abgeschlossen ist, starten Sie die REWOO Scope Serveranwendung. Als Parameter verwenden Sie den in der Konfiguration verwendeten Instanznamen sowie die max. Speicherzuordnung für die Serveranwendung in GB (Empfehlung mind. 4GB):
./start-grails5.sh rewoo 4G
Der Server wird nun gestartet. Sie erhalten einen Hinweis, dass die Logausgabe in die Datei nohup.out erfolgt. Mit Strg+C können Sie den Hinweis abbrechen und wieder zur Konsole zurückkehren. Sofern Sie den Startvorgang im log verfolgen wollen, können Sie dies mit folgendem Aufruf:
tail -f nohup.out
Sobald im Log der Eintrag GlobalTableViewCache refreshed erscheint. Ist der Startvorgang abgeschlossen und die REWOO Scope Anwendung kann verwendet werden. Um den Aufruf der Anwendung zu prüfen, rufen Sie im Browser folgende Adresse auf: https:///rewoo Kopieren Sie nun die Datei debug.sh in das korrekte Verzeichnis:
cp debug.sh /home/rewoo/rewoo-admin/scripts/

Scope Maintenance Server installieren

Der Scope Maintenance Server ist für den Betrieb von REWOO Scope nicht zwingend erforderlich. Er stellt einen zusätzlichen Server-Dienst dar, über den bestimmte Wartungsaufgaben bequemer durchgeführt werden können. Vor allem betrifft dies das Erstellen von so genannten "System-Snapshots", mit denen der vollständige Zustand einer REWOO Scope-Installation abgespeichert und auch wiederhergestellt werden kann.

Wurde der Scope Maintenance Server installiert und korrekt konfiguriert, können Benutzer mit ausreichender Berechtigung direkt über die REWOO Scope Benutzeroberfläche einen derartigen Snapshot erstellen oder das System auf den Zustand eines zuvor erstellen Snapshots zurücksetzen. Ohne den Scope Maintenance Server ist dies nur manuell über Wartungsscripte oder ähnliches möglich.

Der Server wird in Form eines WAR-Archives ausgeliefert (scope-maintenance-server.war). Prinzipiell sollte das Archiv innerhalb aller gängigen Servlet-Container (Jetty, Tomcat, ...) lauffähig sein, entwickelt und getestet wurde es jedoch im Zusammenspiel mit Jetty in der Version 9.4.18, der auch als Ausführungsumgebung für REWOO Scope eingesetzt wird. Dieser Servlet-Container wird bereits vorkonfiguriert in der Form des Archivs jetty-distribution-9.4.18.v20190429.zip zusammen mit der WAR-Datei ausgeliefert.

Vorbemerkung: Nachfolgend wird davon ausgegangen, dass sich die Dateien scope-maintenance-server.war und jetty-distribution-9.4.18.v20190429.zip im Home-Verzeichnis des rewoo-Benutzers (/home/rewoo) befinden.

Um den Server einzurichten, muss zunächst die Jetty-ZIP-Datei in ein dediziertes Verzeichnis unterhalb des Home-Verzeichnisses des rewoo-Benutzers entpackt werden. Nachfolgend wird dafür das Verzeichnis ~/scope-maintenance-server verwendet.

cd /home/rewoo
mkdir scope-maintenance-server
unzip jetty-distribution-9.4.18.v20190429.zip -d scope-maintenance-server/

Dann muss das WAR in den Unterordner /webapps kopiert werden. Da zudem ein installationsspezifischer Schlüssel hinterlegt werden sollte, muss das WAR zudem auch temporär entpackt werden.

cd /home/rewoo
cp scope-maintenance-server.war scope-maintenance-server/jetty/webapps/
cd scope-maintenance-server/jetty/webapps/
mkdir temp
unzip scope-maintenance-server.war -d temp/
cd temp/WEB-INF

Anschließend wird das Private/Public-Schlüsselpaar angelegt. Dies kann über folgenden Aufruf von ssh-keygen geschehen. Eine Passphrase sollte in diesem Fall nicht gesetzt werden.

ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/rewoo/.ssh/id_rsa): /home/rewoo/scope-maintenance-server/jetty/webapps/temp/WEB-INF/rewoo_rsa.key

Nun wird der mit dem WAR ausgelieferte Default-Schlüssel gelöscht und die soeben erzeugten, installationsspezifischen Schlüssel jeweils noch in ein Format exportiert, dass für Java direkt lesbar ist.

cd /home/rewoo/scope-maintenance-server/jetty/webapps/temp/WEB-INF/
rm rewoo.der
openssl pkcs8 -topk8 -inform PEM -outform DER -in rewoo_rsa.key -out maintenance_key.der -nocrypt
openssl rsa -in rewoo_rsa.key -pubout -outform DER -out rewoo.der
rm rewoo_rsa.key rewoo_rsa.key.pub
Anschließend muss der private Schlüssel noch in das "keys"-Verzeichnis der REWOO Scope Installation verschoben werden. Der Scope Maintenance Server kann anschließend wieder in ein WAR verpackt und in das webapps-Verzeichnis zurückverschoben werden.
cd /home/rewoo/scope-maintenance-server/jetty/webapps/temp/WEB-INF/
mkdir /home/rewoo/rewoo-admin/storage/rewoo/keys/
mv maintenance_key.der /home/rewoo/rewoo-admin/storage/rewoo/keys/maintenance_key.der
cd ..
jar cvf scope-maintenance-server.war .
mv scope-maintenance-server.war ../scope-maintenance-server.war
cd ..
rm temp -rf

Damit der Scope Maintenance-Server vom Client aus angesprochen werden kann, muss eine ProxyPass-Regel für den entsprechenden Port 8081 hinzugefügt werden. Hierzu muss der folgende Inhalt zur Datei /etc/httpd/ProxyPass.conf hinzugefügt werden:

<Location /scope-maintenance-server>
    Order Deny,Allow
    Allow from All
    ProxyPass http://localhost:8081/scope-maintenance-server
    ProxyPassReverse http://localhost:8081/scope-maintenance-server
</Location>

Um die Kommunikation zwischen Client und dem Scope Maintenance Server zu erlauben, muss zusätzlich noch die nachfolgende Cross-Domain-Policy angelegt werden. Dazu erstellt man unter /var/www eine Datei mit dem Namen crossdomain.xml und befüllt diese mit folgendem Inhalt:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
   <site-control permitted-cross-domain-policies="master-only">
   <allow-access-from domain="*" secure="false">
</cross-domain-policy>

Zum Abschluss muss der Scope Maintenance Server noch so eingerichtet werden, dass er bei jedem System-Start ebenfalls mitgestartet wird. Dazu wird in /etc/systemd/system eine Datei mit dem Namen scope-maintenance-server.service erstellt und mit folgendem Inhalt befüllt:

[Unit]
Description=Scope Maintenance Server daemon
After=network.target
[Service]
Type=simple
User=rewoo
WorkingDirectory=/home/rewoo/scope-maintenance-server/jetty
ExecStart=/usr/bin/java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -jar start.jar -Djetty.port=8081
ExecStop=/bin/kill ${MAINPID}
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target

Besonders wichtig ist dabei die Zuweisung an das Attribut ExecStart: hier wird mittels des Parameters "-Djetty.port" der Port des zu startenden Scope Maintenance Servers festgelegt. Standardmäßig wird hierfür der Port 8081 verwendet, dieser kann aber beliebig angepasst werden. Die Parameter -Xdebug und -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 ermöglichen es, den Scope Maintenance Server bei Bedarf im laufenden Betrieb debuggen zu lassen. Ist dies nicht erwünscht, können die Parameter einfach entfernt werden. Bei aktiviertem Debug-Modus ist es allerdings ratsam, den Port durch die Firewall standardmäßig für den Zugriff aus dem Internet zu blockieren und ihn nur bei Bedarf freizuschalten.

Maintenance-Server aktivieren und starten

Schließlich muss der Dienst noch aktiviert, der systemd-Daemon neu gestartet und einmalig der Maintenance Service manuell hochgefahren werden (bei weiteren System-Starts sollte dies dann automatisch erfolgen).

systemctl enable scope-maintenance-server.service
systemctl daemon-reload
systemctl start scope-maintenance-server.service

Damit ist die Installation und Konfiguration des Scope Maintenance Servers abgeschlossen. Um den ihn von REWOO Scope aus ansprechen zu können, müssen dort noch einige Konfigurationsparameter gesetzt werden. Die Beschreibung der jeweiligen Parameter ist unter Scope Maintenance Server zu finden.

Maintenance-Server testen

Um den Erfolg der Installation zu testen, kann folgende URL in einem Browser geöffnet werden:

https://<Hostname oder IP>/scope-maintenance-server/webapi/scopestate?scopeInstance=rewoo

Der Browser sollte dann Daten im JSON-Format ausgeben, ähnlich wie im folgenden Screenshot:

Korrekte Antwort des Scope Maintenance Servers