Zum Inhalt springen

Fortgeschrittene Installation von OTOBO mit Docker Compose

Fortgeschrittene OTOBO-Installation mit Docker Compose

Diese Anleitung behandelt die erweiterte Konfiguration des offiziellen otobo-docker-Stacks. Vorausgesetzt wird, dass Sie die grundlegende Docker-Compose-Installation abgeschlossen haben und HTTPS aktivieren, den Stack optimieren oder an Ihre Infrastruktur anpassen möchten.

[!NOTE] Alle Befehle unten verwenden docker compose (Compose v2). Auf älteren Systemen können Sie stattdessen docker-compose verwenden.

  • Eine funktionierende OTOBO-Installation mit dem offiziellen otobo-docker-Repository unter /opt/otobo-docker
  • SSH-Zugang zum Host
  • Für HTTPS: ein gültiges TLS-Zertifikat und der zugehörige private Schlüssel (z. B. von Let’s Encrypt oder Ihrer CA)

Der Compose-Stack startet fünf Dienste bei HTTP, oder sechs bei HTTPS:

DienstContainer (OTOBO 11)Aufgabe
webotobo-web-1OTOBO-Webserver (interner Port 5000)
daemonotobo-daemon-1Hintergrundaufgaben (Mail-Abruf, Eskalationen, Cron)
dbotobo-db-1MariaDB-Datenbank (interner Port 3306)
elasticotobo-elastic-1Elasticsearch (Ports 9200/9300)
redisotobo-redis-1Redis-Cache
nginx (nur HTTPS)otobo-nginx-1Nginx-Reverse-Proxy mit TLS

[!NOTE] Bei OTOBO-10.x-Installationen verwenden Containernamen Unterstriche statt Bindestriche (z. B. otobo_web_1).

Laufende Container prüfen:

Terminal-Fenster
cd /opt/otobo-docker
sudo docker compose ps

Docker-Volumes speichern Daten dauerhaft auf dem Host. Container können neu erstellt werden, ohne Anwendungsdaten zu verlieren:

VolumeMount-PunktVerwendet von
otobo_opt_otobo/opt/otoboweb, daemon
otobo_mariadb_data/var/lib/mysqldb
otobo_elasticsearch_data/usr/share/elasticsearch/dataelastic
otobo_redis_dataRedis-Datenverzeichnisredis
otobo_nginx_sslTLS-Zertifikat und Schlüsselnginx (HTTPS)

[!WARNING] Löschen Sie Volumes niemals ohne verifiziertes Backup. Siehe Backup & Restore.

Für Produktionsumgebungen sollten Sie OTOBO über HTTPS betreiben – mit dem im Stack enthaltenen Nginx-Container.

Terminal-Fenster
cd /opt/otobo-docker
sudo cp -p .docker_compose_env_https .env

Falls bereits eine .env-Datei aus einer HTTP-Installation existiert, sichern Sie diese zuerst oder übernehmen Sie Ihre bestehenden Einstellungen (insbesondere OTOBO_DB_ROOT_PASSWORD) in die neue Datei.

Bearbeiten Sie .env und setzen Sie die Pfade zu Zertifikat und privatem Schlüssel innerhalb des Nginx-Containers:

Terminal-Fenster
sudo nano .env
OTOBO_NGINX_SSL_CERTIFICATE=/etc/nginx/ssl/acme.crt
OTOBO_NGINX_SSL_CERTIFICATE_KEY=/etc/nginx/ssl/acme.key

Legen Sie die Zertifikatsdateien im Volume otobo_nginx_ssl ab oder mounten Sie sie vom Host. Der genaue Mount ist in docker-compose/otobo-override-https.yml definiert.

Terminal-Fenster
sudo docker compose up --detach

Mit aktiviertem HTTPS sollten sechs Container laufen (einschließlich nginx). Rufen Sie Installer oder Agent-Interface auf:

https://<ihr-server-fqdn>/otobo/

Bei einer Neuinstallation folgen Sie den Web-Installer-Schritten mit denselben Datenbankeinstellungen wie bei HTTP (db als Hostname, OTOBO_DB_ROOT_PASSWORD als Root-Passwort).

Die .env-Datei steuert den gesamten Stack. Die Beispieldateien .docker_compose_env_http und .docker_compose_env_https sind Ausgangspunkte; passen Sie die Werte nach Bedarf an.

VariableBeschreibung
OTOBO_DB_ROOT_PASSWORDMariaDB-Root-Passwort. Erforderlich für den db-Dienst und den Web-Installer.

Elasticsearch benötigt in Produktion ausreichend Arbeitsspeicher. Host-Anforderungen finden Sie in der Elasticsearch-Docker-Produktionsanleitung.

VariableBeschreibung
OTOBO_Elasticsearch_ES_JAVA_OPTSJVM-Heap-Einstellungen, z. B. -Xms512m -Xmx512m. Für größere Installationen bis 4 GB erhöhen.
VariableBeschreibung
OTOBO_WEB_HTTP_PORTExterner HTTP-Port (Standard 80). Leitet bei aktiviertem Nginx auf HTTPS um.
OTOBO_WEB_HTTPS_PORTExterner HTTPS-Port (Standard 443).
OTOBO_NGINX_SSL_CERTIFICATEPfad zum TLS-Zertifikat im Nginx-Container.
OTOBO_NGINX_SSL_CERTIFICATE_KEYPfad zum privaten TLS-Schlüssel im Nginx-Container.
OTOBO_NGINX_WEB_HOSTInterner HTTP-Host, den Nginx für den web-Dienst verwendet.
OTOBO_NGINX_WEB_PORTInterner HTTP-Port des web-Dienstes.
VariableBeschreibung
OTOBO_NGINX_KERBEROS_KEYTABKerberos-Keytab-Datei (Standard /etc/krb5.keytab). Muss vom Host gemountet werden.
OTOBO_NGINX_KERBEROS_CONFIGKerberos-Konfigurationsdatei (Standard /etc/krb5.conf).
OTOBO_NGINX_KERBEROS_REALMKerberos-Realm, verwendet in /etc/krb5.conf.
OTOBO_NGINX_KERBEROS_KDCKDC / Active-Directory-Controller.
OTOBO_NGINX_KERBEROS_ADMIN_SERVERKerberos-Admin-Server.
OTOBO_NGINX_KERBEROS_DEFAULT_DOMAINStandard-Domain für Kerberos.

Verwenden Sie .docker_compose_env_https_kerberos als Basis und folgen Sie der Kerberos-SSO-Anleitung für die Active-Directory-Einrichtung.

VariableBeschreibung
COMPOSE_PROJECT_NAMEPräfix für Container- und Volume-Namen (Standard otobo). Ändern Sie dies, um mehrere OTOBO-Instanzen auf einem Host zu betreiben.
COMPOSE_FILEDoppelpunkt-getrennte Liste von Compose-Dateien, z. B. docker-compose/otobo-base.yml:docker-compose/otobo-override-https.yml.
COMPOSE_PATH_SEPARATORTrennzeichen für COMPOSE_FILE (Standard : unter Linux).
OTOBO_IMAGE_OTOBOOTOBO-Web-/Daemon-Image-Tag überschreiben.
OTOBO_IMAGE_OTOBO_ELASTICSEARCHElasticsearch-Image überschreiben.
OTOBO_IMAGE_OTOBO_NGINXNginx-Image überschreiben.

Der nginx-Container verwendet eine OTOBO-spezifische Vorlage unter /etc/nginx/template/otobo_nginx.conf.template. Umgebungsvariablen werden beim Containerstart substituiert.

Für Änderungen, die über die .env-Datei hinausgehen, exportieren Sie die aktive Konfiguration und mounten Ihre eigene Datei:

Terminal-Fenster
cd /opt/otobo-docker
mkdir -p nginx
sudo docker cp otobo-nginx-1:/etc/nginx/conf.d/otobo_nginx.conf nginx/otobo_nginx.conf

Fügen Sie einen Volume-Mount in einer eigenen Override-Datei hinzu (bearbeiten Sie Dateien unter docker-compose/ nicht direkt — siehe unten):

custom_nginx.yml
services:
nginx:
volumes:
- /opt/otobo-docker/nginx/otobo_nginx.conf:/etc/nginx/conf.d/otobo_nginx.conf:ro

Binden Sie die Datei über COMPOSE_FILE in .env ein und starten Sie neu:

Terminal-Fenster
sudo docker compose up --detach

Für eine vollständig eigene Nginx-Konfiguration starten Sie mit .docker_compose_env_https_custom_nginx.

Sind Port 80 oder 443 bereits belegt, setzen Sie alternative Ports in .env:

OTOBO_WEB_HTTP_PORT=8080
OTOBO_WEB_HTTPS_PORT=8443

Starten Sie den Stack nach der Portänderung neu.

Standardmäßig starten alle fünf (bzw. sechs) Dienste gemeinsam. Läuft MariaDB außerhalb von Docker, starten Sie nur die benötigten Dienste:

Terminal-Fenster
sudo docker compose up --detach web nginx daemon redis elastic

Alternativ erstellen Sie ein eigenes Compose-Override, das den db-Dienst entfernt oder deaktiviert, und verweisen OTOBO während der Installation auf Ihre externe Datenbank.

Bearbeiten Sie Dateien in docker-compose/ nicht direkt — sie werden beim Update des otobo-docker-Repositorys überschrieben. Legen Sie stattdessen eine eigene YAML-Datei an und referenzieren Sie sie in COMPOSE_FILE.

Beispiel: Datenbank über Port 3306 für externen Zugriff freigeben.

Erstellen Sie custom_db.yml:

services:
db:
ports:
- "0.0.0.0:3306:3306"

Tragen Sie sie in .env ein:

COMPOSE_FILE=docker-compose/otobo-base.yml:docker-compose/otobo-override-http.yml:custom_db.yml

Container neu erstellen:

Terminal-Fenster
sudo docker compose stop
sudo docker compose up --detach

Dieses Muster funktioniert für jede Anpassung an Diensten oder Volumes.

Die meisten Anwendungsänderungen gehören in das Volume otobo_opt_otobo (/opt/otobo im Container), nicht in ein modifiziertes Docker-Image.

Perl-Modul lokal installieren, ohne das Image neu zu bauen:

Terminal-Fenster
sudo docker compose exec web bash
cd /opt/otobo
cpanm -l local Some::Module
exit

Unter /opt/otobo/local installierte Module bleiben über Container-Neustarts hinweg erhalten.

Um Systempakete hinzuzufügen (z. B. zusätzliche Debian-Tools), bauen Sie ein eigenes Image aus einem Dockerfile basierend auf rotheross/otobo oder verwenden Sie docker commit in einer temporären Root-Session. Für Produktionsinstallationen ist das selten nötig.

[!NOTE] Das lokale Bauen von Images ist hauptsächlich für die OTOBO-Entwicklung oder bei gepatchten Basis-Images sinnvoll.

Dockerfiles befinden sich im OTOBO-Quellcode-Repository:

Terminal-Fenster
cd /opt
git clone https://github.com/RotherOSS/otobo.git
cd otobo
git checkout rel-11_0
bin/docker/build_docker_images.sh
docker image ls

Gebaute Images werden als local-<OTOBO_VERSION> getaggt. Referenzieren Sie sie in .env:

OTOBO_IMAGE_OTOBO=local-11.0.x
OTOBO_IMAGE_OTOBO_ELASTICSEARCH=local-11.0.x
OTOBO_IMAGE_OTOBO_NGINX=local-11.0.x

Für Testumgebungen können Sie den Web-Installer überspringen und das eingebaute Setup-Skript verwenden:

[!WARNING] docker compose down -v löscht alle Volumes und Daten. Nur auf Wegwerf-Testsystemen verwenden.

Terminal-Fenster
cd /opt/otobo-docker
sudo docker compose down -v
sudo docker compose up --detach
sudo docker compose stop daemon
sudo docker compose exec web bash -c \
"rm -f Kernel/Config/Files/ZZZAAuto.pm ; bin/docker/quick_setup.pl --db-password otobo_root"
sudo docker compose start daemon
Terminal-Fenster
sudo docker compose ps # laufende Container anzeigen
sudo docker compose logs -f web # Webserver-Logs verfolgen
sudo docker compose logs -f elastic # Elasticsearch-Logs verfolgen
sudo docker compose restart # alle Dienste neu starten
sudo docker compose stop # alle Dienste stoppen
sudo docker compose config # zusammengeführte Konfiguration prüfen
Terminal-Fenster
sudo docker compose exec web bash # Shell im Web-Container öffnen
Terminal-Fenster
docker system prune -a # ungenutzte Images, Container und Netzwerke entfernen (vorsichtig verwenden)

Für professionelle Unterstützung bei der Installation oder Integration wenden Sie sich an Softoft.de.

Häufig gestellte Fragen

Wann brauche ich die fortgeschrittene Docker-Compose-Anleitung?

Nach der Basisinstallation, wenn Sie HTTPS, Nginx, eigene Overrides oder Feineinstellungen am Stack benötigen.

Enthält der otobo-docker-Stack einen Nginx-Reverse-Proxy?

Ja. Für HTTPS aktivieren Sie den integrierten Nginx-Container und setzen die TLS-Zertifikatspfade in der .env-Datei.

Bleiben OTOBO-Daten in Docker-Volumes erhalten?

Ja. Anwendungs-, Datenbank-, Elasticsearch- und Redis-Daten liegen in benannten Docker-Volumes und bleiben bei Container-Neustarts erhalten.