Ziel dieser Anleitung

Diese Anleitung zeigt dir, wie du grommunio Chat auf einer bestehenden grommunio-2026.06.1-Appliance installierst, konfigurierst und mit mehreren Benutzern testest. Wichtig ist nicht nur, dass `/chat/` lädt. Wichtig ist, dass Teams, Kanäle, WebSocket-Verbindung, Benutzerrechte und Domain-Zuordnung zusammen funktionieren.

  • Du installierst grommunio Chat 10 aus dem grommunio-Repository.

  • Du richtest Datenbank, Chat-Konfiguration, lokalen Admin und Admin-API-Anbindung ein.

  • Du aktivierst Chat pro Domain und Benutzer.

  • Du prüfst den Nginx-Upstream für `/chat/`.

  • Du testest zwei Benutzer im selben Team und Kanal.

  • Du bewertest, was mandantenfähig ist und wann du eine getrennte Installation brauchst.

Die Reihe bleibt chronologisch: grommunio installieren, Antispam mit Rspamd, SSO mit Keycloak, Meet mit Jitsi und jetzt Chat. Produktkontext findest du auf der grommunio-Produktseite.

Architektur: Was grommunio Chat ist

grommunio Chat ist die Teamkommunikation innerhalb der grommunio-Plattform und basiert technisch auf Mattermost. Die Appliance betreibt den Chat-Dienst lokal und stellt ihn über nginx unter `/chat/` bereit. grommunio Admin hält die Zuordnung zwischen grommunio-Domain, grommunio-Benutzer und Chat-Team.

Browser
-> https://mail.example.test/chat/
-> nginx location /chat/
-> upstream chat_server
-> grommunio-chat auf 127.0.0.1:8065
-> MariaDB-Datenbank grochat
-> Domain-Chat-Team und Benutzer-Zuordnung über grommunio Admin

Schritt 1: Paket installieren und Bestand prüfen

Prüfe zuerst, ob Chat bereits installiert ist. Auf der geprüften Appliance war nur der Admin-Treiber vorhanden; der eigentliche Chat-Server musste nachinstalliert werden.

bash
rpm -qa | grep -Ei 'grommunio-chat|mattermost' | sort
zypper search -s grommunio-chat
zypper --non-interactive install --auto-agree-with-licenses grommunio-chat-v10

Schritt 2: Datenbank und Konfiguration vorbereiten

Chat benötigt eine eigene Datenbank und eine `config.json`. Verwende eindeutige Passwörter und schreibe sie nicht in Tickets, Screenshots oder Artikel. In produktiven Runbooks gehören diese Werte in ein Secret-Management oder zumindest in root-lesbare Dateien.

bash
install -d -m 0750 -o grochat -g grochat /etc/grommunio-chat /var/log/grommunio-chat /var/lib/grommunio-chat
cp -n /etc/grommunio-chat/config.json.example /etc/grommunio-chat/config.json
# Beispiel: Datenbank und Benutzer anlegen.
# Ersetze <secure-password> durch ein starkes Secret.
mariadb <<'SQL'
CREATE DATABASE IF NOT EXISTS grochat CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS 'grochat'@'localhost' IDENTIFIED BY '<secure-password>';
GRANT ALL PRIVILEGES ON grochat.* TO 'grochat'@'localhost';
FLUSH PRIVILEGES;
SQL

In `config.json` müssen mindestens `SiteURL`, SQL-Treiber, SQL-DataSource und Local Mode stimmen. Die `SiteURL` muss exakt zur URL passen, mit der Benutzer Chat im Browser öffnen. In der Laborprüfung führte eine abweichende Port-/Origin-Kombination zu WebSocket-403.

bash
python3 - <<'PY'
import json
from pathlib import Path
path = Path('/etc/grommunio-chat/config.json')
data = json.loads(path.read_text())
data['ServiceSettings']['SiteURL'] = 'https://mail.example.test/chat'
data['ServiceSettings']['ListenAddress'] = '127.0.0.1:8065'
data['ServiceSettings']['EnableLocalMode'] = True
data['ServiceSettings']['LocalModeSocketLocation'] = '/var/tmp/grommunio-chat_local.socket'
data['SqlSettings']['DriverName'] = 'mysql'
data['SqlSettings']['DataSource'] = 'grochat:<secure-password>@tcp(localhost:3306)/grochat?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s'
data['TeamSettings']['EnableOpenServer'] = False
data['TeamSettings']['RestrictCreationToDomains'] = 'example.test'
path.write_text(json.dumps(data, indent=2) + '\n')
PY
chown grochat:grochat /etc/grommunio-chat/config.json
chmod 0640 /etc/grommunio-chat/config.json

Schritt 3: Dienst starten und Nginx-Upstream prüfen

Starte Chat und prüfe den lokalen Socket. Auf der geprüften Appliance war zusätzlich wichtig, die mitgelieferte Nginx-Upstream-Datei aus der `.example`-Datei zu aktivieren. Ohne diesen Upstream schlug `nginx -t` mit `host not found in upstream "chat_server"` fehl.

bash
systemctl enable --now grommunio-chat
test -S /var/tmp/grommunio-chat_local.socket
cp -n /etc/grommunio-common/nginx/upstreams.d/grommunio-chat.conf.example \
/etc/grommunio-common/nginx/upstreams.d/grommunio-chat.conf
nginx -t
systemctl restart nginx grommunio-admin-api
curl -kI https://mail.example.test/chat/
curl -k https://mail.example.test/chat/api/v4/system/ping

Schritt 4: Lokalen Chat-Admin und Admin-API anbinden

grommunio Admin benötigt einen technischen Chat-Admin, damit Domains und Benutzer in Chat gespiegelt werden können. Verwende dafür eine Adresse innerhalb der erlaubten Domain. Wenn du `RestrictCreationToDomains = example.test` setzt, ist `admin@localhost` bewusst nicht erlaubt.

bash
export MMCTL_LOCAL_SOCKET_PATH=/var/tmp/grommunio-chat_local.socket
/usr/share/grommunio-chat/bin/grommunio-chat-ctl --local user create \
--email groadmin@example.test \
--username groadmin \
--password '<secure-password>' \
--system-admin \
--email-verified \
--disable-welcome-email
cat >/etc/grommunio-admin-api/conf.d/chat.yaml <<'YAML'
chat:
connection:
login_id: groadmin
password: '<secure-password>'
url: mail.example.test
basepath: /chat/api/v4
port: 443
scheme: https
verify: False
YAML
chmod 0600 /etc/grommunio-admin-api/conf.d/chat.yaml
systemctl restart grommunio-admin-api

Schritt 5: Domain und Benutzer aktivieren

Aktiviere Chat zuerst auf Domain-Ebene. Erst danach können Benutzer zuverlässig mit Chat verknüpft werden. In der Gegenprobe erzeugte `grommunio-admin domain modify example.test --chat true` ein Chat-Team für diese Domain.

bash
grommunio-admin domain modify example.test --chat true
grommunio-admin user modify alex@example.test --chat true --privChat true
grommunio-admin user modify meet@example.test --chat true --privChat true
grommunio-admin domain query domainname chat chatID --format json-flat
grommunio-admin user query username chat chatAdmin privChat privWeb --format json-flat

Wenn eine Appliance-Version bei `user modify` einen Fehler wirft, prüfe, ob Domain-Chat, technischer Chat-Admin und Admin-API-Verbindung stimmen. Manipuliere produktiv nicht direkt die Datenbank, sondern repariere zuerst die Admin-API-Anbindung und wiederhole die unterstützten `grommunio-admin`-Befehle.

Schritt 6: Login und Kanäle testen

Öffne Chat mit einem normalen Benutzer. Nach dem ersten Login muss das Domain-Team sichtbar sein. In dieser Anleitung heißen Team und Kanäle synthetisch, der Ablauf ist aber identisch zu einer produktiven Umgebung.

https://mail.example.test/chat/

Screenshot: Login in grommunio Chat über die Chat-Route.

https://mail.example.test/chat/

Screenshot: Nach dem Login sieht der Benutzer das Domain-Team und die Standardkanäle.

Lege dann fachliche Kanäle an. In der Beispielumgebung wurden `Betrieb` und `Projekt` verwendet, weil sie typische Trennungen für interne Collaboration abbilden.

bash
export MMCTL_LOCAL_SOCKET_PATH=/var/tmp/grommunio-chat_local.socket
TEAM="$(/usr/share/grommunio-chat/bin/grommunio-chat-ctl --local team list --json \
| jq -r '.[0].name')"
/usr/share/grommunio-chat/bin/grommunio-chat-ctl --local channel create \
--team "$TEAM" \
--name betrieb \
--display-name "Betrieb" \
--purpose "Abstimmung für Betrieb, Monitoring und Tagesbetrieb."
/usr/share/grommunio-chat/bin/grommunio-chat-ctl --local channel users add "$TEAM:betrieb" alex meet
https://mail.example.test/chat/

Screenshot: Der Kanal Betrieb ist für den ersten Benutzer sichtbar.

https://mail.example.test/chat/

Screenshot: Ein zweiter Benutzer sieht dasselbe Team und denselben Kanal.

Schritt 7: Mehrbenutzer- und WebSocket-Test

Teste Chat immer mit zwei getrennten Browser-Kontexten oder zwei Geräten. Eine funktionierende Login-Seite reicht nicht. Die Nachricht muss beim zweiten Benutzer ohne Reload sichtbar werden. Genau dabei fallen falsche `SiteURL`-, Reverse-Proxy- oder WebSocket-Konfigurationen auf.

https://mail.example.test/chat/

Screenshot: Der erste Benutzer sendet eine Nachricht im Kanal Betrieb.

https://mail.example.test/chat/

Screenshot: Der zweite Benutzer sieht dieselbe Nachricht im gleichen Kanal.

Abnahmekriterien:
- /chat/ liefert HTTP 200
- /chat/api/v4/system/ping liefert status OK
- WebSocket liefert keinen 403-Handshake-Fehler
- zwei Benutzer sehen dasselbe Domain-Team
- beide Benutzer sehen denselben Kanal
- eine Nachricht wird beim zweiten Benutzer sichtbar
- nginx -t ist erfolgreich
- grommunio-chat, nginx, mariadb und grommunio-admin-api sind active

Mandantenfähigkeit: Was geht und wo brauchst du Trennung?

Die getestete Appliance kann grommunio-Domains jeweils mit einem eigenen Chat-Team verknüpfen. Eine zweite Domain erzeugte in der Gegenprobe ein zweites Team. Das ist hilfreich für organisatorische Trennung, aber es ist keine harte Plattform-Isolation.

  • Tauglich innerhalb einer gemeinsamen Installation: getrennte Domain-Teams, öffentliche und private Kanäle, Team-Mitglieder, Rollen auf Team-/Kanalebene, kontrollierte Einladungen, direkte Nachrichten innerhalb der Plattform.

  • Nur eingeschränkt mandantenfähig: globale Chat-Server-Konfiguration, Plugins, Webhooks, Bots, E-Mail-Benachrichtigung, Dateispeicher, Systemkonsole, Suchindex, globale Retention- und Compliance-Funktionen.

  • Eigene Installation empfohlen: getrennte Kunden mit harten Datenschutzgrenzen, getrennten Administratoren, getrenntem SSO, getrennten Backup-/Restore-Anforderungen, separaten Plugins/Integrationen oder abweichenden Sicherheitsrichtlinien.

  • In einer grommunio-Groupware-Umgebung ist ein Domain-Team pro Mandant gut für interne Unternehmensbereiche. Für Managed-Service-Kunden mit echtem Isolationserfordernis planst du separate grommunio-Installationen.

grommunio-admin domain create tenant2.test -u 10 --title "Tenant 2 Test" --chat true
grommunio-admin domain query domainname title chat chatID --format json-flat
# Erwartung:
# example.test -> eigenes Chat-Team
# tenant2.test -> eigenes Chat-Team

Troubleshooting aus der Prüfung

  • `host not found in upstream "chat_server"`: Die Datei `/etc/grommunio-common/nginx/upstreams.d/grommunio-chat.conf` fehlt. Aktiviere sie aus der `.example`-Datei und prüfe danach `nginx -t`.

  • `WebSocket handshake: 403`: `SiteURL` passt nicht exakt zur Browser-URL. Prüfe FQDN, Port, Reverse Proxy und TLS.

  • `The email you provided does not belong to an accepted domain`: `RestrictCreationToDomains` blockiert die Adresse. Verwende einen technischen Admin innerhalb der erlaubten Domain.

  • `chat is not enabled for domain`: Erst die Domain mit `grommunio-admin domain modify <domain> --chat true` aktivieren, danach Benutzer aktivieren.

  • `Preview Mode: Email notifications have not been configured`: Für Chat-Funktion nicht kritisch, aber produktiv müssen SMTP-/Benachrichtigungspfad und Absenderkonzept geprüft werden.

grommunio 2026 Schritt für Schritt

Diese Reihe ist als praktische Reihenfolge gedacht: erst die Grundinstallation, danach Mail-Schutz, zentrale Anmeldung, Videokonferenzen und anschließend Chat.

  1. grommunio 2026 installieren
  2. grommunio-antispam mit Rspamd einrichten
  3. grommunio-auth mit Keycloak einrichten
  4. grommunio Meet einrichten und testen
  5. grommunio Chat einrichten und testen (du bist hier)

grommunio Chat produktiv einführen

ForgeOne plant, lizenziert und betreibt grommunio als souveräne Collaboration-Plattform inklusive Mail, Kalender, Kontakte, Antispam, SSO, Meet, Chat, Monitoring, Backup und Support. Wenn du Chat als Teil deiner Collaboration-Plattform einführen willst, prüfen wir Architektur, Mandantenfähigkeit, Betrieb und Rollout gemeinsam.