{{sidenavigation.sidenavigationExpandLabel}}
{{getMsg('Help_YouAreHere')}}: /  {{page.title}} {{page.title}}
{{$root.getMsg("downLoadHelpAsPdf")}} {{helpModel.downloadHelpPdfDataStatus}}

Einrichtung von Docker-Containern

Der i-net HelpDesk kann in einem Docker Container verwendet werden. Es gibt einen vorgefertigten Container, der auf einer alpine-Version auf Docker Hub basiert. Der Container bringt nur die Anwendung und die Tools mit, die zum Ausführen der Anwendung benötigt werden.

Hinweis: Der Container stellt keine Standardbenutzer zur Verfügung. Sie müssen sich via Registrieren zunächst anmelden. Siehe unten für fortgeschrittene Anwendungsfälle.

Schnellstart

Führen Sie den folgenden Befehl aus, um einen i-net HelpDesk Docker Container zu starten:

docker run -d -p 8002:8002 --name helpdesk inetsoftware/i-net-helpdesk

Hinweis: Für den Betrieb von i-net HelpDesk ist eine Datenbank erforderlich. Sie können MySQL/MariaDB, Oracle oder MSSQL verwenden. Ein Beispiel für die Verwendung von MySQL in einem parallelen Container finden Sie unten.

Verfügbare Tags

Erstellen einer voreingestellten Konfiguration

Der i-net HelpDesk Docker Container sollte entweder über eine Konfigurations-Eigenschaftsdatei oder über Umgebungsvariablen vorkonfiguriert werden. In beiden Fällen sollte zunächst eine lokale Installation mit der spezifischen Konfiguration erstellt werden. Mit Hilfe des Maintenance-Moduls kann ein Backup der Konfiguration erstellt werden und die darin enthaltene Configuration-Properties-Datei kann als Grundlage verwendet werden.

Hinweis: Um den Container beim Start vollständig einzurichten, müssen mindestens die folgenden Eigenschaften angegeben werden: CONF_listener__port und CONF_licensekey

Hinweis: In privaten Cloud-Umgebungen müssen Sie auch die Eigenschaft CONF_serverURL festlegen. Es wird empfohlen, diese Eigenschaft auch in anderen Umgebungen zu setzen.

Hinzufügen der Konfiguration

Eine Konfigurationsdatei kann mit Hilfe eines Volumes oder einer anderen Methode hinzugefügt werden, die dem Container eine bestimmte Konfiguration hinzufügt. Es kann die Standardkonfigurationsdatei verwendet werden oder eine andere über eine Umgebungsvariable gesetzt werden. Siehe Umgebungseigenschaften-Matrix.

Einrichten der Konfiguration mit Umgebungsvariablen

Um die Namen der Umgebungsvariablen zu erstellen, verwenden Sie die folgende Regel:

  • Präfix CONF__ für die Eigenschaft
  • Ersetzen Sie jeden . (Punkt) durch __ (zwei Unterstriche)

Um die Konfiguration reproduzierbar und aktualisierbar zu machen, sollten Sie eine docker-compose.yml-Datei verwenden.

Beispiel

version: '2.1'

services:

    helpdesk:
        image: 'inetsoftware/i-net-helpdesk:latest'
        restart: 'always'
        ports:
            - 8002:8002

        environment:
            - DEFAULT_PROPFILE=/tmp/defaultConfiguration.properties
            - DEFAULT_CONFIG=User/Default
 
            # Setzen Sie die extern sichtbare Server-Url (entfernen Sie den Kommentar und fuegen Sie die korrekte Url ein)
            #- CONF_serverURL=https://hostname.company.com:8002/
 
            # Setzen Sie den Lizenzschluessel (entfernen Sie den Kommentar und geben Sie den vollstaendigen Lizenzschluessel ein)
            #- CONF_licensekey=...
 
            # Fuehren Sie die Anwendung auf einem vorher festgelegten Port aus, um die Zuordnung zu erleichtern.
            - CONF_listener__port=8002
 
            # Anpassen einer Option, z. B. der Themenfarben
            - CONF_theme__themecolors={"@base-color":"#123456","@primary-color":"#428bca"}
 
            # Aktivieren der Protokollierung, Weiterleitung des Protokolls an die Container-Log-Datei
            - CONF_log__engine=true
            - CONF_log__file=/dev/stdout
 
            # Standort fuer automatische Backups
            - CONF_BackupLocation=/home/helpdesk/.i-net software/helpdesk_User_Default/backup

Verwendung von Docker-Secrets

Für sensible Konfigurationswerte wie Lizenzschlüssel bieten Docker Secrets eine sicherere Alternative zu Umgebungsvariablen. Secrets werden automatisch aus dem Verzeichnis /run/secrets/ geladen und als Umgebungsvariablen verfügbar gemacht.

Hinweis: Der Container lädt automatisch alle Dateien aus /run/secrets/. Für Dateien, die mit conf_ beginnen (Groß-/Kleinschreibung wird ignoriert), bleibt das Präfix CONF_ großgeschrieben und der Rest wird in Kleinbuchstaben umgewandelt. Zum Beispiel:

  • Eine Secret-Datei namens conf_licensekey wird als Umgebungsvariable CONF_licensekey verfügbar sein
  • Eine Secret-Datei namens conf_listener__port wird zu CONF_listener__port
  • Für andere Secret-Dateien wird der gesamte Dateiname großgeschrieben

Wichtig: Für Konfigurationsschlüssel mit gemischter Groß-/Kleinschreibung (wie serverURL) müssen Sie eine explizite Zuordnung verwenden, da das automatische Laden alles nach CONF_ in Kleinbuchstaben umwandelt. Zum Beispiel:

  • Der Konfigurationsschlüssel serverURL erfordert die Umgebungsvariable CONF_serverURL (mit großgeschriebenem URL)
  • Das automatische Laden von conf_serverurl würde CONF_serverurl (alles klein) erstellen, was falsch ist
  • Verwenden Sie eine explizite Zuordnung: Setzen Sie die Umgebungsvariable SECRET_CONF_serverURL, um von /run/secrets/conf_serverurl zu laden und als CONF_serverURL zu exportieren

Wichtig: Der Container läuft als Nicht-Root-Benutzer (typischerweise UID 1000/GID 1000). Secret-Dateien müssen von der Gruppe des Containers lesbar sein. Stellen Sie beim Erstellen von Secret-Dateien auf dem Docker-Host sicher, dass sie die richtigen Berechtigungen haben. Wenn der Container einen Berechtigungsfehler anzeigt, wird die tatsächliche GID angezeigt, die Lesezugriff benötigt.

Um Docker-Secret zu verwenden, müssen Sie:

  1. Erstellen Sie die Secret-Datei auf Ihrem Docker-Host (z. B. /etc/docker/secrets/conf_licensekey)
  2. Setzen Sie die richtigen Berechtigungen, damit die Datei von der Gruppe des Containers gelesen werden kann (typischerweise GID 1000)
  3. Konfigurieren Sie das Secret in Ihrer docker-compose.yml-Datei

Beispiel: Einfaches Secret (alles Kleinbuchstaben)

Für Konfigurationsschlüssel, die nur Kleinbuchstaben enthalten (wie licensekey), können Sie das automatische Laden verwenden:

version: '2.1'

services:
    helpdesk:
        image: 'inetsoftware/i-net-helpdesk:latest'
        restart: 'always'
        ports:
            - 8002:8002
        secrets:
            - conf_licensekey
        environment:
            - DEFAULT_PROPFILE=/tmp/defaultConfiguration.properties
            - DEFAULT_CONFIG=User/Default
            - CONF_listener__port=8002
            # Der Lizenzschluesel wird automatisch aus /run/secrets/conf_licensekey geladen
            # und als Umgebungsvariable CONF_licensekey verfuegbar

secrets:
    conf_licensekey:
        file: /etc/docker/secrets/conf_licensekey

Beispiel: Secret mit gemischter Groß-/Kleinschreibung (erfordert explizite Zuordnung)

Für Konfigurationsschlüssel mit gemischter Groß-/Kleinschreibung (wie serverURL) müssen Sie eine explizite Zuordnung verwenden:

version: '2.1'

services:
    helpdesk:
        image: 'inetsoftware/i-net-helpdesk:latest'
        restart: 'always'
        ports:
            - 8002:8002
        secrets:
            - conf_serverurl
        environment:
            - DEFAULT_PROPFILE=/tmp/defaultConfiguration.properties
            - DEFAULT_CONFIG=User/Default
            - CONF_listener__port=8002
            # Explizite Zuordnung fuer gemischte Gross-/Kleinschreibung: SECRET_CONF_serverURL laedt aus /run/secrets/conf_serverurl
            # und exportiert als CONF_serverURL (behaelt die gemischte Gross-/Kleinschreibung bei)
            - SECRET_CONF_serverURL

secrets:
    conf_serverurl:
        file: /etc/docker/secrets/conf_serverurl

Hinweis: Stellen Sie sicher, dass Sie die richtigen Berechtigungen für die Secret-Dateien auf dem Docker-Host setzen. Der Container läuft als Nicht-Root-Benutzer (typischerweise GID 1000), daher müssen die Secrets von dieser Gruppe lesbar sein. Um die tatsächliche GID zu finden, überprüfen Sie die Container-Logs, wenn ein Berechtigungsfehler vorliegt - sie zeigen die erforderliche GID an. Alternativ können Sie überprüfen mit:

# Finden Sie die GID des Containers (ersetzen Sie 'helpdesk' durch Ihren Containernamen)
docker exec helpdesk id -g

Dann setzen Sie die Berechtigungen entsprechend (ersetzen Sie 1000 durch die tatsächliche GID, falls unterschiedlich):

CONTAINER_GID=1000  # Verwenden Sie die GID aus dem obigen Befehl, falls unterschiedlich
mkdir -p /etc/docker/secrets
chmod 750 /etc/docker/secrets
chgrp $CONTAINER_GID /etc/docker/secrets
echo "ihr-lizenzschluessel-hier" | tee /etc/docker/secrets/conf_licensekey
echo "https://hostname.company.com:8002/" | tee /etc/docker/secrets/conf_serverurl
chmod 640 /etc/docker/secrets/conf_licensekey
chmod 640 /etc/docker/secrets/conf_serverurl
chgrp $CONTAINER_GID /etc/docker/secrets/conf_licensekey
chgrp $CONTAINER_GID /etc/docker/secrets/conf_serverurl

Hinweis: Bei Verwendung von Docker Swarm Secrets (nicht dateibasierte Secrets) werden die Berechtigungen automatisch von Docker verwaltet. Wenn Sie jedoch dateibasierte Secrets in docker-compose verwenden, müssen Sie die Berechtigungen manuell wie oben gezeigt setzen.

Erweiterter Anwendungsfall

Wenn es spezifischere Anforderungen gibt, wie z.B. eine vorausgefüllte Benutzerdatenbank, sollte ein benutzerdefinierter Container erstellt werden

Beispiel: Interner Zugriff mit öffentlichem Konto

Mit dem folgenden Compose-Beispiel können Sie einen Server erstellen, der ohne jegliche Berechtigungseinschränkungen gestartet wird und ohne weitere Authentifizierung über den öffentlichen URL-Kontext verwendet werden kann.

version: '2.1'

services:

    helpdesk:
        image: 'inetsoftware/i-net-helpdesk:latest'
        restart: 'always'
        ports:
            - 8002:8002

        environment:
            - DEFAULT_CONFIG=User/Default
 
            # Setzen Sie den Lizenzschluessel (entfernen Sie den Kommentar und geben Sie den vollstaendigen Lizenzschluessel ein)
            #- CONF_licensekey=...
 
            # Fuehren Sie die Anwendung auf einem vorher festgelegten Port aus, um die Zuordnung zu erleichtern.
            - CONF_listener__port=8002
 
            # Nur das Gastkonto ist aktiv.
            - CONF_authentication__settings=[{"provider":"guest"}]

Beispiel: Hinzufügen der PAM-Authentifizierung und eines Standardbenutzers

Das folgende Dockerfile wird einen Benutzer admin mit dem Passwort password in einem neuen Container anlegen.

FROM inetsoftware/i-net-helpdesk
 
# Fuer die Installation zum Benutzer root wechseln
USER root
 
# Tools
RUN apk add --update linux-pam
 
# pam-Berechtigungen fuer alle erteilen
# Benutzer erstellen, mit dem wir uns anmelden koennen
RUN chmod +r /etc/shadow \
    && adduser -D -g "User" admin \
    && echo admin:password | chpasswd \
    && ln -s "/etc/pam.d/base-password" "/etc/pam.d/helpdesk"
 
# Die System-Anmeldung aktivieren. Per Default ist das PAM Plugin deaktiviert.
ENV CONF_authentication__settings="[{'provider':'system'},{'provider':'product','userCanRegister':'true'}]"
ENV CONF_plugins__activated="{}"
 
# Zurueck zum Produktbenutzer wechseln
USER helpdesk

Einhängen / Wiederverwendung einer gegebenen Konfiguration

Sollen die Daten des Containers über Neustarts hinaus persistiert werden, z.B. für neue Containerversionen, sollte ein Volume gemountet werden.

Die Persistenz und Konfiguration befindet sich im Home-Ordner des Produktbenutzers. Um diesen Ordner zu mounten, sollten Sie die folgenden zusätzlichen Optionen verwenden:

-v /folder/to/mount/from:/home/$PRODUCT -e FORCE_IMPORT_CONFIG=0
  • -v /folder/to/mount/from:/home/$PRODUCT - den spezifischen Ordner in den Heimatordner des Produktbenutzers einbinden
  • -e FORCE_IMPORT_CONFIG=0 - angeben, dass die angegebene Konfiguration nicht überschrieben werden soll

Hinweis: Der Produktbenutzer hängt von dem Produkt ab, das Sie verwenden. Er wird durch die Variable $PRODUCT im Container bestimmt. Mögliche Werte sind: reporting, pdfc, cowork und helpdesk.

Hinzufügen zusätzlicher Schriftarten

Im Standardcontainer ist z. B. die Schriftart DejaVu vorinstalliert. Das Hinzufügen zusätzlicher Schriftarten, wie z. B. der lizenzbeschränkten Microsoft-Schriftart Arial, erfordert die Erstellung eines eigenen Containers. Sie können das folgende Dockerfile als Grundlage verwenden.

#############################################################################
# Prepare product
# Note: alpine 3.12 due to issue with newer versions of alpine!
FROM alpine:3.12 as builder
 
RUN apk add --update msttcorefonts-installer \
    && update-ms-fonts
 
FROM inetsoftware/i-net-<PRODUCT>:<TAG>
 
USER "root"
 
# Kopieren von Schriftarten aus dem Intermediate Builder
COPY --from=builder /usr/share/fonts/truetype/msttcorefonts /usr/share/fonts/truetype/msttcorefonts
 
# Update font cache for product user
USER $PRODUCT
RUN fc-cache -fv /usr/share/fonts

Umgebungseigenschaften-Matrix

Property Name Default Value Description
DEFAULT_PROPFILE /tmp/defaultConfiguration.properties Configuration Properties file for initial setup
DEFAULT_CONFIG User/Default Configuration the server will be started with
FORCE_IMPORT_CONFIG 1 Forces the import of the given configuration, overwriting an already existing one. Set to 0 if a configuration is mounted.
DOCKER_ENTRYPOINT_SCRIPT Additional inline-script to run before starting the server
CONF_systempermission__enabled true The system permissions are activated by default. This property should be customized together with the authentication settings.
CONF_authentication__settings [{'provider':'product','userCanRegister':'true'}] The product login is activated by default and allows new users to be created. This should be customized in a production environment.
CONF_plugins__activated {'authentication.pam':false} The PAM authentication plugin is deactivated by default, because you have to create custom container in order to use it. Only optional plugins have to be enabled with the value true using this settings. To deactivate a non-optional plugin, use the value false.
CONF_prop__name Configuration property for server initialization. prop__name was derived from an actual property prop.name which can be taken from a previous backup.
inet_http_port Set a default HTTP port that overrides the one in the configuration. This is intended for shared cloud persistences
inet_https_port Set a default HTTPS port that overrides the one in the configuration. This is intended for shared cloud persistences
inet_persistence URI of the persistence to use. Currently on MongoDB is supported. Will uses the file persistence if not set.
TZ Timezone for the container (e.g. Europe/Berlin). Use a standard tz name (see List of tz database time zones). For Java-based images, setting TZ is recommended so the JVM uses the correct timezone. Alternatively, set JAVA_TOOL_OPTIONS=-Duser.timezone=Europe/Berlin. You can optionally mount /etc/localtime and /etc/timezone from the host.
JAVA_TOOL_OPTIONS "-XX:+UseContainerSupport -XX:+CrashOnOutOfMemoryError" Java Tools environment that allows to define global options that all Java processes will use. In addition, you can set options in the configuration to only be applied to the actual server instance.
You can extend this option to, e.g. set the -XX:MaxRAMPercentage=90.0 which will allow the container to use 90% of the host RAM for the Java process. Otherwise, only 1/4 of the available memory is allocated.
To set the JVM timezone, add -Duser.timezone=Europe/Berlin (or use the TZ environment variable instead).

Docker Compose Beispiel

Um einen Docker-Container mit einer MySQL-Datenbank unter Verwendung von Docker Compose zu bündeln, kann das folgende Skript docker-compose.yml als Ausgangspunkt verwendet werden:

version: '2.1'

services:

    helpdesk:
        image: 'inetsoftware/i-net-helpdesk:latest'
        restart: 'always'
        ports:
            - 8002:8002
        links:
            # Verbinden Sie sich mit der vorbereiteten MySQL-Datenbank
            - 'mysql'
        command:
            # Mit dem folgenden wait-for.sh-Befehl kann der Dienst darauf warten, dass ein externer Dienst verfuegbar wird
            - sh
            - wait-for.sh
            - mysql:3306
            - --
            # Nachdem der MySQL Server gestartet wurde, starten Sie den eigentlichen i-net HelpDesk Server
            - sh
            - ./startServer.sh
            - -Dclearreports.config=User/Default
            - -Dsetupautoexecution=true

        environment:
            - DEFAULT_CONFIG=User/Default
 
            # Setzen Sie die extern sichtbare Server-Url (entfernen Sie den Kommentar und fuegen Sie die korrekte Url ein)
            #- CONF_serverURL=https://hostname.company.com:9443/
 
            # Setzen Sie den Lizenzschluessel (entfernen Sie den Kommentar und geben Sie den vollstaendigen Lizenzschluessel ein)
            #- CONF_licensekey=...
 
            # Fuehren Sie die Anwendung auf einem vorher festgelegten Port aus, um die Zuordnung zu erleichtern.
            - CONF_listener__port=8002
 
            # Einrichten der Verbindung zur MySQL-Datenbank
            - CONF_dbsConfigs=[{"status":"Unknown","dbName":"HDS","url":"jdbc:mysql://mysql:3306/inetHDOfficial?useSSL=false&allowPublicKeyRetrieval=true","user":"root","encodedPassword":"AU1KQVA=","host":"mysql","port":"3306","sid":"","catalog":"inetHDOfficial","driver":"mysql"}]

    mysql:
        image: 'mysql:8'
        restart: 'always'
        environment:
            - MYSQL_ROOT_PASSWORD=inet
            - MYSQL_DATABASE=inetHDOfficial
            - MYSQL_USER=inetHDOfficial
            - MYSQL_PASSWORD=inet
        volumes:
            - "/var/lib/mysql"

Hinweis: Abhängig von der jeweiligen Umgebung müssen möglicherweise noch weitere Optionen eingestellt werden. Bitte werfen Sie einen Blick auf die Umgebungseigenschaften-Matrix.

Installieren zusätzlicher Plugins

Zusätzliche Plugins können dem Docker-Container entweder während eines benutzerdefinierten Dockerfile-Builds oder "on the fly" während des Container-Starts hinzugefügt werden. In beiden Fällen können Sie den Befehl install-plugin des Containers verwenden:

/usr/share/product $ install-plugin --help
Usage install all Plugins: /bin/install-plugin -p <product> -v <version>
Usage install defined plugins: /bin/install-plugin -p <product> -v <version> <list of plugins to install>
Usage install BETA Plugins: /bin/install-plugin -p <product> -v <version> -b <list of plugins to install>
Usage install additional persistence: /bin/install-plugin -s <type>

Hinweis: Plugin-Namen können z.B. von der URL des Plugin-Speichers abgeleitet werden, insbesondere von der Pfadkomponente nach /pid: https://store.inetsoftware.de/pid/webapi.core → webapi.core

Hinweis: Für jeden Persistenz-Typ gibt es unterschiedliche Container. Die MongoDB-Persistenz wird im Standardcontainer installiert, der kein zusätzliches Tag hat. Verfügbare Persistenzen sind: mongodb, cosmosdb, dynamodb.

Dockerfile Beispiel

In einem Dockerfile können Sie die folgenden Zeilen hinzufügen, um ein Plugin zu installieren:

# Add Web API plugin 
RUN install-plugin web.api

Docker Compose Beispiel

In einer docker-compose.yml können Sie das folgende Setup verwenden, um ein Plugin zu installieren:

version: '2.1'
services:
    service:
        command: >
            sh -c "
            install-plugin web.api &&
            ./startServer.sh -Dclearreports.config=User/Default -Dsetupautoexecution=true
            "

Hinweis: Der ursprüngliche startServer.sh-Befehl kann mit docker inspect bei einem bereits laufenden Container ermittelt werden.

Hinweis: Das Beispiel ist unvollständig und erfordert die Definition des spezifischen Containers.

Erweiterte Speicherverwaltung

Standardmäßig haben Docker-Container keine Speicherbeschränkungen, so dass sie auf den gesamten Speicher des Hosts zugreifen können. Java verwendet jedoch standardmäßig nur 25% des verfügbaren Speichers, wenn mehr als 512 MB verfügbar sind 1).

Die Speicherbegrenzung kann entweder in der Serverkonfiguration über die Optionen Configuration Manager → Webserver (Advanced) → Max Heap Memory / Other VM Arguments eingestellt werden oder über die Umgebungsvariable JAVA_TOOL_OPTIONS, mit der alle globalen JVM-Optionen geändert werden können.

Je nach Anwendungsfall kann es sinnvoll sein, dieses Verhalten zu ändern, um den verfügbaren Speicher optimal zu nutzen. Beachten Sie, dass das Basissystem ca. 100 MB freien Speicher benötigt. Hier sind einige Ideen:

  • Auf dem Hostsystem laufen mehrere Container ohne Speicherbegrenzung. Der i-net HelpDesk Container sollte so eingestellt werden, dass er eine bestimmte Menge an Speicher verwendet, z.B. -Xmx2g für 2 GB Speicher.
  • Auf dem Hostsystem laufen mehrere Container mit Speicherbegrenzung. Der i-net HelpDesk-Container sollte so viel Speicher wie möglich verwenden, z.B. mit -Xmx2g oder -XX:MaxRAMPercentage=95.0.
  • Auf dem Hostsystem läuft nur ein Container ohne Speicherbeschränkung. The i-net HelpDesk container should use as much memory as possible, e.g. using -XX:MaxRAMPercentage=95.0

Docker Compose Example

In a docker-compose.yml you can use the following environment options:

services:
    service:
        environment:
            JAVA_TOOL_OPTIONS: "-XX:MaxRAMPercentage=95.0 -XX:+UseContainerSupport -XX:+CrashOnOutOfMemoryError"

Neustart des Dienstes

In Situationen, in denen der Dienst nicht mehr reagiert, der Container aber noch erreichbar ist, kann der Unterprozess des Servers beendet und neu gestartet werden, ohne den gesamten Container neu zu starten. In diesem Fall muss der Benutzer den Container über die Shell betreten und den folgenden Befehl ausführen:

ps xo pid,command | grep exitcode | grep -v grep | awk '{print $1}' | xargs -r kill -TERM

Wartungsmodus

Der Wartungsmodus kann in seltenen Fällen verwendet werden, z.B. wenn extern ein Backup erstellt wird. Der Server erlaubt dann noch den Zugriff auf allgemeine Funktionen wie Konfiguration und Wartung, stellt aber keine serverspezifischen Module mehr zur Verfügung. Ein Administrator muss den Container über die Shell aufrufen und den folgenden Befehl ausführen:

# Wartungsmodus starten
ps xo pid,command | grep exitcode | grep -v grep | awk '{print $1}' | xargs -r kill -USR1
 
# Wartungsmodus beenden
ps xo pid,command | grep exitcode | grep -v grep | awk '{print $1}' | xargs -r kill -USR2

Recovery Mananger

Der Recovery Manager ist ein letztes Mittel, wenn der Server falsch konfiguriert wurde. Er kann verwendet werden, um Konfigurationsprobleme zu beheben und Plugins zu entfernen, die nicht behebbare Startprobleme verursachen. Sie können auch Benutzerinformationen aktualisieren und, z.B. Gruppenzuordnungen, korrigieren.

Wichtig: Der Server ist völlig offen für jeden und jede, der auf die Host-IP und den Port zugreifen kann. Diese Person kann das System mit administrativen Rechten konfigurieren. Sie sollten in Erwägung ziehen, eine zusätzliche Firewall zu verwenden, um den Host-Port zu sichern und nur Ihrem eigenen Client-Host den Zugang zu ermöglichen. Beachten Sie, dass die Einstellung -client.ip nicht ausreicht.

Hinweis: Auf dem Server ist nur ein minimaler Funktionsumfang verfügbar, der es Ihnen ermöglicht, Serverstartproblem zu korrigieren. Es werden nicht alle Plugins geladen.

Hinweis: Ihr Server muss mit der Umgebungsvariablen FORCE_IMPORT_CONFIG=1 betrieben werden (siehe mounting). Andernfalls wird beim Neustart des ursprünglichen Servers die geänderte Konfiguration überschrieben.

Hier ist eine Schritt-für-Schritt-Anleitung:

  • Stoppen Sie den Server, aber entfernen Sie ihn nicht aus Docker.
# mit einem docker compose setup
docker compose stop
 
# unter unter Verwendung des klassischen docker Befehls
docker stop <container-name>
  • Prüfen, mit welchem Image der Server gestartet wurde, z.B. mit docker ps | grep <container-name>.
  • Prüfen, mit welcher Konfiguration der Server läuft, z.B. mit docker inspect <container-name> | grep DEFAULT_CONFIG oder docker exec <container-name> env | grep DEFAULT_CONFIG. Standardmäßig ist das User/Default
  • Starten Sie den Wiederherstellungsserver
docker run --rm -it --volumes-from "<container-name>" -p 9999:9999 --entrypoint /bin/sh "<container-image-name>" startRecovery.sh -clearreports.preferredconfig "User/Default" -port 9999 -client.ip "0.0.0.0-255.255.255.255"
  • Zugriff auf den Server über http://<server-ip>:9999/
  • Wenn Sie mit der Konfiguration fertig sind, stoppen Sie den Server mit CTRL+c in der Konsole.
  • Sie können nun den ursprünglichen Dienst neu starten.

Hier ist eine vollständige Erklärung des Befehls:

  • docker run –rm -it - wir führen einen zusätzlichen Sidecar-Container aus
  • –volumes-from "<container-name>" - wir mounten die vorhandenen Volumes aus dem Service-Container. Das heißt: das Home-Verzeichnis, das standardmäßig die Persistenz und Konfiguration enthält.
  • -p 9999:9999 - wir verwenden den Port 9999, um uns mit dem Server von außen und intern zu verbinden
  • –entrypoint /bin/sh - der Einstiegspunkt muss auf die Standardshell aktualisiert werden. Andernfalls wird der Container mit dem Ändern der bestehenden Konfiguration starten
  • "<container-image-name>" - dies muss das gleiche Image sein, mit dem Ihr Dienst läuft
  • startRecovery.sh - das Skript für den Einstiegspunkt der Wiederherstellung
  • -clearreports.preferredconfig "User/Default" - dies ist die Konfiguration, die wir ändern wollen. Es ist wichtig, dass Sie die gleiche Konfiguration wie im ursprünglichen Server-Container verwenden. Andernfalls werden Sie nicht die richtigen Einstellungen aktualisieren.
  • -port 9999 - der interne Port, über den die Wiederherstellungskonfiguration laufen soll
  • -client.ip "0.0.0.0-255.255.255.255" - ein IP-Zugangsfilter, den Sie unbedingt an Ihre Netzwerkeinstellungen anpassen sollten. Wenn dieser Filter nicht passt, wird die Wiederherstellungskonfiguration sich nicht öffnen lassen. Docker hat die Eigenheit, nicht unbedingt die IPs der Umgebung - den dem Fall die IP Ihres Rechners - korrekt zu erkennen. Daher kann es nötig sein, ein größeres Netzwerk als Freigabe angeben zu müssen.

Hinweis: Der Server ist völlig ungesichert. Er läuft nicht mit https / ssl-Verschlüsselung. Er ist für jede IP, die auf diesen Server zugreift, völlig offen. Sie sollten eine zusätzliche Firewall für den Server und den Port in Betracht ziehen, um den Zugriff nur von Ihrem Client-Host zuzulassen.

Euro-Office mit Docker

Stand: Juli 2026

Diese Seite beschreibt den empfohlenen Setup-Pfad für die Euro-Office-Integration: einen Euro-Office-Dokumentserver per Docker und die Anbindung an i-net HelpDesk.

ONLYOFFICE kann ebenfalls verwendet werden, ist in dieser Dokumentation aber der Kompatibilitäts- und Fallback-Pfad, nicht der primäre Referenzaufbau.

Empfohlener Standardpfad

Für neue Installationen wird dieser Aufbau empfohlen:

  • HelpDesk läuft in einem Container.
  • Der Euro-Office-Dokumentserver läuft in einem separaten Container.
  • Beide Container befinden sich im selben Docker-Netzwerk.
  • Der Browser greift über die öffentliche Dokumentserver-URL auf den Editor zu.
  • Die Server-zu-Server-Kommunikation verwendet interne Container-Adressen.

Full Stack mit HelpDesk

Das folgende Docker-Compose-Beispiel startet HelpDesk, MariaDB und den Euro-Office-Dokumentserver gemeinsam in einem geteilten Netzwerk:

services:
  helpdesk:
    image: your-helpdesk-image:latest
    container_name: helpdesk
    restart: always
    ports:
      - "9000:9000"
    environment:
      - CONF_eurooffice__documentserver__url=https://documentserver.example.com
      - CONF_eurooffice__documentserver__internal_url=http://documentserver
      - CONF_eurooffice__helpdesk__internal_url=http://helpdesk:9000
      - CONF_eurooffice__documentserver__jwt_secret=your-shared-jwt-secret
      - CONF_eurooffice__session_secret=your-session-signing-secret
    depends_on:
      - mariadb
      - documentserver

  mariadb:
    image: mariadb:10.11
    container_name: helpdesk-mariadb
    restart: always
    environment:
      - MARIADB_ROOT_PASSWORD=root-password
      - MARIADB_DATABASE=helpdesk
    volumes:
      - mariadb_data:/var/lib/mysql

  documentserver:
    image: ghcr.io/euro-office/documentserver:latest
    container_name: documentserver
    restart: always
    environment:
      - JWT_ENABLED=true
      - JWT_SECRET=your-shared-jwt-secret
      - JWT_HEADER=Authorization
      - ALLOW_PRIVATE_IP_ADDRESS=true
      - ALLOW_META_IP_ADDRESS=false
      - PLUGINS_ENABLED=false
    volumes:
      - documentserver_data:/var/www/onlyoffice/Data
      - documentserver_logs:/var/log/onlyoffice

volumes:
  mariadb_data:
  documentserver_data:
  documentserver_logs:

Standalone Dokumentserver

Wenn bereits eine HelpDesk-Installation vorhanden ist und nur der Dokumentserver ergänzt werden soll, kann dieses minimale Setup verwendet werden:

services:
  documentserver:
    image: ghcr.io/euro-office/documentserver:latest
    container_name: documentserver
    restart: always
    ports:
      - "8080:80"
    environment:
      - JWT_ENABLED=true
      - JWT_SECRET=your-shared-jwt-secret
      - JWT_HEADER=Authorization
      - ALLOW_PRIVATE_IP_ADDRESS=true
      - ALLOW_META_IP_ADDRESS=false
      - PLUGINS_ENABLED=false
    volumes:
      - documentserver_data:/var/www/onlyoffice/Data
      - documentserver_logs:/var/log/onlyoffice

volumes:
  documentserver_data:
  documentserver_logs:

Starten des Containers:

docker compose up -d

Der Dokumentserver benötigt beim ersten Start etwas Zeit. Prüfen Sie den Health-Endpunkt:

curl http://localhost:8080/healthcheck

Die Antwort sollte true sein, sobald der Server bereit ist.

HelpDesk-Konfiguration

Für den empfohlenen Docker-Standardpfad sind in HelpDesk typischerweise diese Werte relevant:

  • Document server URL: öffentliche Dokumentserver-URL für den Browserzugriff, z. B. https://documentserver.example.com
  • Document server JWT secret: gemeinsames JWT-Secret
  • Session signing secret: eigenes HelpDesk-Secret für Sitzungstokens
  • Internal document server URL: im Docker-Standardfall http://documentserver
  • Internal HelpDesk URL: im Docker-Standardfall http://helpdesk:9000

Weitere Details zu den Feldern stehen auf der Seite Konfiguration.

HelpDesk-Umgebungsvariablen

Um das Euro-Office-Plugin im HelpDesk-Container zu konfigurieren, verwenden Sie Umgebungsvariablen mit dem Präfix CONF_eurooffice__.

Variable Beschreibung Beispiel
CONF_eurooffice__documentserver__url Öffentliche Dokumentserver-URL für Browser https://documentserver.example.com
CONF_eurooffice__documentserver__internal_url Interne URL für serverseitige Downloads von HelpDesk zum Dokumentserver http://documentserver
CONF_eurooffice__helpdesk__internal_url Interne URL für Downloads und Callbacks vom Dokumentserver zu HelpDesk http://helpdesk:9000
CONF_eurooffice__documentserver__jwt_secret Gemeinsames JWT-Secret (gemeinsames Secret)
CONF_eurooffice__session_secret Secret zum Signieren der HelpDesk-Sitzungstokens (festes Secret)

Umgebungsvariablen des Dokumentservers

Variable Beschreibung Standard
JWT_ENABLED Aktiviert die JWT-Authentifizierung für Callbacks und Editor-Konfigurationen false
JWT_SECRET Gemeinsames Secret für die JWT-Token-Signierung (leer, JWT deaktiviert)
JWT_HEADER HTTP-Header-Name für die JWT-Übertragung in Callbacks Authorization
ALLOW_PRIVATE_IP_ADDRESS Erlaubt Anfragen an private IP-Adressen true
ALLOW_META_IP_ADDRESS Erlaubt META-IP-Adressenzugriffe false
PLUGINS_ENABLED Aktiviert Dokumentserver-Plugins false
SECURE_LINK_SECRET Secret für sichere Dokument-Links (leer, deaktiviert)
URL_EXTENSION URL-Erweiterungsmuster für eingehende Anfragen /
TZ Zeitzone für den Container Systemstandard

Netzwerk und Erreichbarkeit

Der Dokumentserver muss aus drei Richtungen sauber erreichbar sein:

  1. Browser zum Dokumentserver: Der Browser lädt Editor, JavaScript, CSS und WebSocket-Verbindungen über die öffentliche Dokumentserver-URL.
  2. Dokumentserver zu HelpDesk: Der Dokumentserver sendet Callbacks und lädt Dokumentinhalte von HelpDesk herunter.
  3. HelpDesk zum Dokumentserver: HelpDesk lädt während der Callback-Verarbeitung die bearbeitete Datei vom Dokumentserver herunter.

Im Docker-Standardfall ergibt sich daraus typischerweise:

  Browser                     Docker                      Docker
    GET editor JS/API  ────> documentserver:80
    GET /office-editor ────> helpdesk:9000

  HelpDesk (intern)     ───> documentserver:80    (serverseitige Datei-Downloads)
  Dokumentserver        ───> helpdesk:9000        (Callbacks, Inhaltsdownloads)

Wenn der Dokumentserver auf einem anderen Host oder Netzwerk läuft, müssen die internen Docker-Service-Namen durch reale Hostnamen oder IP-Adressen ersetzt werden.

Beispiel:

CONF_eurooffice__documentserver__internal_url=http://192.168.1.100
CONF_eurooffice__helpdesk__internal_url=http://192.168.1.200:9000

Wenn HelpDesk nativ auf demselben Host wie der Docker-Dokumentserver läuft, kann http://host.docker.internal:9000 als interne HelpDesk-URL verwendet werden. Damit kann der Dokumentserver ein nicht containerisiertes HelpDesk erreichen.

JWT-Authentifizierung

Die JWT-Authentifizierung schützt die Kommunikation zwischen HelpDesk und Dokumentserver:

  • Editor-Konfiguration: HelpDesk signiert die Editor-Konfiguration mit dem gemeinsamen JWT-Secret.
  • Callbacks: Der Dokumentserver sendet ein signiertes JWT-Token mit den Speicherbenachrichtigungen an HelpDesk.
  • Algorithmus: HS256 (HMAC mit SHA-256)
  • Verifikation: Die Signatur wird serverseitig geprüft.

Für produktive Umgebungen sollte JWT aktiviert sein.

Kompatibler ONLYOFFICE-Server

Wenn statt Euro-Office ein kompatibler ONLYOFFICE-Server verwendet werden soll, kann derselbe grundsätzliche Aufbau verwendet werden. Der Unterschied liegt hauptsächlich im verwendeten Docker-Image.

Dafür ersetzen Sie im Compose-Beispiel:

image: ghcr.io/euro-office/documentserver:latest

mit:

image: onlyoffice/documentserver:latest

Weitere ONLYOFFICE-spezifische Hinweise finden Sie unter ONLYOFFICE unter Windows.

Weitere Informationen

i-net HelpDesk
Diese Anwendung verwendet Cookies um das Einloggen zu ermöglichen. Durch die weitere Nutzung dieser Anwendung stimmen Sie der Verwendung von Cookies zu.


Hilfe