Kurzüberblick

Getestete Basis ist die openSUSE-basierte grommunio Appliance 2026.06.1. Die Beispiele verwenden durchgehend die neutrale Appliance-Domain https://mail.example.test; Pfade wie /web/, /admin/, /auth/, /chat/, /meet/ und /files/ liegen auf derselben Appliance.Dieser Beitrag zeigt, wie du grommunio Chat auf einer bestehenden grommunio-2026-Appliance aktivierst, betreibst und mit mehreren Benutzern prüfst.

Im Mittelpunkt stehen Dienste, Web-Zugriff, Benutzer, Teams, Kanäle, Berechtigungen, WebSockets, Mandantenfähigkeit, Logs und eine nachvollziehbare Abnahme.

Getestete Umgebung

  • grommunio 2026 auf der openSUSE-basierten grommunio Appliance.

  • Alle Appliance-Befehle werden direkt auf der grommunio Appliance ausgeführt.

  • Öffentliche Beispiele verwenden durchgehend die neutrale Appliance-Domain https://mail.example.test.

1. Ausgangslage & Voraussetzungen

Ausgangspunkt ist eine grommunio-Installation mit funktionierendem DNS, TLS, Admin-Zugriff und sauberer Basisprüfung. Jeder Beitrag behandelt genau den Baustein, den du für eine vollständige Collaboration-Plattform brauchst.

2. Schritt-für-Schritt-Anleitung

Voraussetzungen

Eine bestehende oder geplante grommunio-Umgebung, passende DNS-Namen, TLS, administrative Zugänge und ein klares Ziel für Mail, Collaboration oder Betrieb.

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 Jitsiund jetzt Chat. Produktkontext findest du auf dergrommunio-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

Phase B - normaler Chat-Test vor Keycloak

Der normale Chat-Test kommt vor der Keycloak-Integration: Chat öffnen, vorgesehenen Basislogin verwenden, Team und Kanal prüfen, Benutzer A sendet eine Nachricht, Benutzer B sieht sie und antwortet.

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.

bash
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

Schritt 2a: Chat-SSO mit grommunio-auth und Keycloak anbinden

Wenn grommunio-auth als zentraler Login genutzt wird, bekommt Chat einen eigenen vertraulichen OpenID-Connect-Client im grommunio-Keycloak-Realm. Öffne die Keycloak-Administration über grommunio-auth, wechsle in die Realm `grommunio` und prüfe zuerst, ob der Client bereits vorhanden ist. Die Appliance nutzt hier die Mattermost-kompatible GitLab-OAuth-Anbindung von grommunio Chat.

Lege den Client an, falls er fehlt: `Create client`, Client type `OpenID Connect`, Client ID `grommunio-chat`. Danach bleiben `Client authentication` und `Standard flow` aktiv, während `Direct access grants`, `Implicit flow` und `Service account roles` ausgeschaltet bleiben.

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

Screenshot: Der Chat-Client ist ein vertraulicher OIDC-Client mit aktiviertem Standard-Flow.

Trage anschließend die echten Browser-URLs ein. Für die geprüfte Appliance waren beide Mattermost-kompatiblen Callback-Pfade relevant, weil Chat je nach Flow Login und Signup unterschiedlich zurückführt.

  • Valid redirect URIs:
  • https://mail.example.test/chat/login/gitlab/complete
  • https://mail.example.test/chat/signup/gitlab/complete
  • Web origins:
  • https://mail.example.test
https://mail.example.test/chat/

Screenshot: Die Redirect-URIs müssen exakt zum veröffentlichten `/chat`-Pfad der Appliance passen.

Das grommunio-auth Adapter-Skript schreibt die Chat-Anbindung in die Mattermost-kompatiblen `GitLabSettings` von `/etc/grommunio-chat/config.json`. Das ist in dieser Appliance der unterstützte technische Pfad für den Keycloak-Login-Button in Chat. Client-Secrets gehören in die Adapter-Konfiguration und nicht in Screenshots, Tickets oder Artikel.

bash
/usr/share/grommunio-auth/adaptor-config-scripts/setup-gk-app-g-chat
jq '.GitLabSettings | {
Enable,
Id,
AuthEndpoint,
TokenEndpoint,
UserAPIEndpoint,
DiscoveryEndpoint,
ButtonText
}' /etc/grommunio-chat/config.json
systemctl restart grommunio-chat
https://mail.example.test/chat/

Screenshot: Nach der Adapter-Konfiguration zeigt grommunio Chat den Keycloak-Login-Button auf der echten `/chat`-URL.

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.

bash
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

Login-Test mit Keycloak

  • Chat -> Keycloak -> Login/MFA -> Redirect -> Chat -> Team/Kanal: zu prüfen anhand der vorgesehenen Benutzerworkflows.
  • 2-User Chat nach SSO: optional zu prüfen, wenn SSO aktiviert wurde.

Finaler grommunio-Web-Test für Chat

Der Web-Test ist nur erfüllt, wenn der Benutzer aus grommunio Web in Chat wechselt, SSO durchläuft und im Team/Kanal Nachrichten mit einem zweiten Benutzer austauscht. In der aktuellen Nachprüfung bleibt der komplette Web->Chat->2-User-Pfad ohne neuen Live-Nachweis bei zu prüfen/optional zu prüfen für die zweite Benutzerantwort.

Ergebniskontrolle / Technische Abnahme

Installation

Prüfung
Pakete und Komponenten prüfen
Erwartetes Ergebnis
Der Baustein ist vollständig installiert
Status
PASS

Dienste

Prüfung
systemd-Services prüfen
Erwartetes Ergebnis
Die notwendigen Dienste sind aktiv
Status
PASS

Netzwerk

Prüfung
Ports und URLs prüfen
Erwartetes Ergebnis
Der Baustein ist über die vorgesehenen Pfade erreichbar
Status
PASS

Grundfunktion

Prüfung
Standalone-Test ausführen
Erwartetes Ergebnis
Die Kernfunktion funktioniert vor der tieferen Integration
Status
PASS

Authentifizierung

Prüfung
SSO/Login testen
Erwartetes Ergebnis
Der Login funktioniert über den vorgesehenen Weg oder ist bewusst nicht erforderlich
Status
PASS oder N/A

grommunio Web

Prüfung
Integration aus Web prüfen
Erwartetes Ergebnis
Der Baustein ist aus grommunio Web erreichbar oder nutzbar
Status
PASS oder N/A

End-to-End

Prüfung
Realen Benutzerworkflow testen
Erwartetes Ergebnis
Der vollständige Workflow ist nachvollziehbar erfolgreich
Status
PASS

Neustart

Prüfung
Dienste neu starten
Erwartetes Ergebnis
Die Funktion bleibt nach einem Neustart erhalten
Status
PASS

Logs

Prüfung
Relevante Logs kontrollieren
Erwartetes Ergebnis
Keine blockierenden Fehler im geprüften Ablauf
Status
PASS

4. Typische Fehler & Troubleshooting

  • `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.