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.
rpm -qa | grep -Ei 'grommunio-chat|mattermost' | sortzypper search -s grommunio-chatzypper --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.
install -d -m 0750 -o grochat -g grochat /etc/grommunio-chat /var/log/grommunio-chat /var/lib/grommunio-chatcp -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.
python3 - <<'PY'import jsonfrom pathlib import Pathpath = 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'] = Truedata['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'] = Falsedata['TeamSettings']['RestrictCreationToDomains'] = 'example.test'path.write_text(json.dumps(data, indent=2) + '\n')PYchown grochat:grochat /etc/grommunio-chat/config.jsonchmod 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.
systemctl enable --now grommunio-chattest -S /var/tmp/grommunio-chat_local.socketcp -n /etc/grommunio-common/nginx/upstreams.d/grommunio-chat.conf.example \/etc/grommunio-common/nginx/upstreams.d/grommunio-chat.confnginx -tsystemctl restart nginx grommunio-admin-apicurl -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.
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-emailcat >/etc/grommunio-admin-api/conf.d/chat.yaml <<'YAML'chat:connection:login_id: groadminpassword: '<secure-password>'url: mail.example.testbasepath: /chat/api/v4port: 443scheme: httpsverify: FalseYAMLchmod 0600 /etc/grommunio-admin-api/conf.d/chat.yamlsystemctl 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.
grommunio-admin domain modify example.test --chat truegrommunio-admin user modify alex@example.test --chat true --privChat truegrommunio-admin user modify meet@example.test --chat true --privChat truegrommunio-admin domain query domainname chat chatID --format json-flatgrommunio-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.
Screenshot: Login in grommunio Chat über die Chat-Route.
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.
export MMCTL_LOCAL_SOCKET_PATH=/var/tmp/grommunio-chat_local.socketTEAM="$(/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
Screenshot: Der Kanal Betrieb ist für den ersten Benutzer sichtbar.
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.
Screenshot: Der erste Benutzer sendet eine Nachricht im Kanal Betrieb.
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
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.
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
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.
/usr/share/grommunio-auth/adaptor-config-scripts/setup-gk-app-g-chatjq '.GitLabSettings | {Enable,Id,AuthEndpoint,TokenEndpoint,UserAPIEndpoint,DiscoveryEndpoint,ButtonText}' /etc/grommunio-chat/config.jsonsystemctl restart grommunio-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.
grommunio-admin domain create tenant2.test -u 10 --title "Tenant 2 Test" --chat truegrommunio-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
| Prüfbereich | Prüfung | Erwartetes Ergebnis | Status |
|---|---|---|---|
| Installation | Pakete und Komponenten prüfen | Der Baustein ist vollständig installiert | PASS |
| Dienste | systemd-Services prüfen | Die notwendigen Dienste sind aktiv | PASS |
| Netzwerk | Ports und URLs prüfen | Der Baustein ist über die vorgesehenen Pfade erreichbar | PASS |
| Grundfunktion | Standalone-Test ausführen | Die Kernfunktion funktioniert vor der tieferen Integration | PASS |
| Authentifizierung | SSO/Login testen | Der Login funktioniert über den vorgesehenen Weg oder ist bewusst nicht erforderlich | PASS oder N/A |
| grommunio Web | Integration aus Web prüfen | Der Baustein ist aus grommunio Web erreichbar oder nutzbar | PASS oder N/A |
| End-to-End | Realen Benutzerworkflow testen | Der vollständige Workflow ist nachvollziehbar erfolgreich | PASS |
| Neustart | Dienste neu starten | Die Funktion bleibt nach einem Neustart erhalten | PASS |
| Logs | Relevante Logs kontrollieren | Keine blockierenden Fehler im geprüften Ablauf | PASS |
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.







