Dieser Artikel beschreibt die Installation von Mattermost hinter einem OPNsense Reverse Proxy mit Ubuntu 22 (Jammy) LTS und der offiziellen Omnibus Deployment Methode von Mattermost.
Voraussetzungen
- Ein neuer Ubuntu Server 22.04 (Jammy) (mind. 1 CPU und 2 GB RAM). Zum Zeitpunkt der Erstellung dieses Artikels wird Ubuntu Server 23 (Mantic) nicht von Omnibus unterstützt.
- Alle Betriebssystem-Updates installiert
- Eine (Sub-)Domain, unter der Mattermost erreichbar sein wird (z.B. mattermost.reukauff.eu).
- OPNsense mit dem Nginix und Let’s Encrypt Plugin vor dem neuen Ubuntu Server installiert.
Mattermost installieren
Dies ist der einfachste Teil der gesamten Einrichtung. Führe diesen Befehl aus, um das Mattermost-Repository zu den lokalen Repositories hinzuzufügen und die Installation zu starten. Der zweite Befehl installiert Mattermost ohne Let’s Encrypt, da wir OPNsense für die HTTPS-Zertifikate verwenden werden:
curl -o- https://deb.packages.mattermost.com/repo-setup.sh | sudo bash
sudo MMO_HTTPS=false apt install mattermost-omnibusrr
Während der Installation fragt Omnibus nach einem Domänennamen. Gib den Domänennamen ein, der für Mattermost verwenden werden soll (z. B. mattermost.reukauff.eu). Es wird auch nach der Mailadresse für Let’s Encrypt gefragt. Gib eine Mailadresse ein, aber ein Zertifikat wird nicht angefordert, da wir das Setup ohne HTTPS-Einrichtung durchführen.
Führe nach Abschluss der Einrichtung den folgenden Befehl aus, um die Konfiguration zu öffnen:
sudo mmctl --local config edit
Ein vi-Editor öffnet sich.
Suche nach der Zeile AllowCorsFrom
. Drücke i
, um in den Bearbeitungsmodus des vi-Editors zu wechseln. Ändere den Wert in “*”.
"AllowCorsFrom":"*"
Drücke Strg+C
und gib dann :wq
ein. Drücke Enter
.
Der Editor schließt sich und es sollte nach einigen Sekunden die Zeile Config updated successfully
zu sehen sein.
Jetzt müssen wir die Plugin-Uploads aktivieren. Führe folgenden Befehl aus:
sudo nano /etc/mattermost/mmomni.yml
Ändere den Wert für enable_plugin_uploads
auf true
und speicher die Datei mit Ctrl+O
und beende sie mit Ctrl+X
.
Schließlich muss Mattermost einmal neu geladen werden:
sudo mmomni reconfigure
Mattermost ist jetzt eingerichtet und kann bereits intern über http://yourserver:8065 erreicht werden.
OPNsense einrichten
Jetzt beginnt die eigentliche Schwierigkeit, da Mattermost viele spezielle Einstellungen in der nginx-Konfiguration verwendet. Eine Übersicht über diese Einstellungen gibt es hier in der Mattermost-Dokumentation: Set up an NGINX proxy — Mattermost documentation
Mit dem folgenden Setup kommen wir der nginx-Konfiguration, die Mattermost in seiner Dokumentation beschreibt, so nahe wie möglich.
- In OPNsense gehe zu
Services
>ACME Client
>Settings
>Accounts
- Erstellen Sie einen neuen Eintrag. Gib zum Beispiel folgende Einstellungen ein:
- Enabled: aktivieren
- Name: die (Sub-)Domain, die für die Mattermost-Site verwendet werden soll. (z.B.
mattermost.reukauff.eu
) - Description: Jede Beschreibung, die dem Zweck entspricht (Freitext)
- E-Mail Address: Eine gültige E-Mail Adresse
- ACME CA:
Let's Encrypt [default]
- Speicher das neue Konto und klicke in der Verknüpfung des Kontos auf der rechten Seite auf die Schaltfläche
Konto registrieren
. - Nach einigen Sekunden sollte die Spalte
Registration Date
den aktuellen Zeitstempel enthalten. Das Konto ist nun registriert. - Gehe in OPNsense zu
Services
>ACME Client
>Settings
>Certificates
. Erstelle einen neuen Eintrag mit den folgenden Einstellungen:- Enabled: aktivieren
- Common Name: Die (Sub-)Domain von Mattermost
- ACME Account: Der zuvor erstellte Account
- Automations:
Restart Nginx
- Speicher den neuen Zertifikatsantrag und klicke auf die Schaltfläche
Issue or renew certificate
rechts neben dem neuen Zertifikat. - In OPNsense gehe zu
Services
>Nginx
>Configuration
- Wenn nicht bereits geschehen, aktiviere nginx auf der
General Settings
Seite denCache Path
. Erstelle einen neuen Eintrag mit folgenden Einstellungen:- Path:
/var/cache/nginx
- Size (MB):
10
- Inactive Time (Minutes):
120
- Use Temp Path: deaktivieren
- Maximum Size (GB):
3
- Path:
- Jetzt das kleine Dreieck neben
HTTP(S)
im Tab-Titel anklicken undSecurity Headers
auswählen. Einen neuen Eintrag mit folgendes Einstellungen imGeneral
Tab erstellen:- Description:
HSTS Age 15768000
oder ähnlich - Time (Max Age):
15768000
- Description:
- Gehe auf
Upstream Server
indem auf denUpstream
Tab geklickt wird. Erstelle einen neuen Upstream und lege eine Beschreibung an (d.h. den Servernamen des Mattermost-Servers), die Server-IP-Adresse und den Port 8065 fest. Der Port 8065 ist der Port, auf dem die Mattermost-Anwendung nativ über HTTP läuft: - Klicke auf das kleine Dreieck neben dem Titel der Registerkarte
Upstream
und wähleUpstream
aus dem Menü. Füge einen neuen Upstream hinzu. Gib eine Beschreibung ein (z. B. Mattermost) und wähle den Upstream-Server in der Combobox unterServereinträge
aus. Speichere die Einstellungen. - Gehe zur Registerkarte
HTTP(S)
. Erstelle einen neuen Eintrag auf dieser Registerkarte (auf der Seite “Standort”). Ganz oben aktiviere den “erweiterten Modus”. Lege die folgenden Einstellungen fest:- Description:
Mattermost Main
(oder ähnlich) - URL Pattern:
/
- Upstream Servers: Den zuvor erstellen Upstream Server
- Cache: Directory: Das zuvor erstellte Cache Directory
- Force HTTPS: aktivieren
- Enable HTTP/2 Preloading: aktivieren
- Description:
- Erstelle einen weiteren Eintrag mit folgenden Einstellungen:
- Description:
Mattermost Websocket
(oder ähnlich) - URL Pattern:
api/v[0-9]+/(users/)?websocket$
- Match Type:
Case Sensitive Match ("~")
- Upstream Servers:
Mattermost
- Force HTTPS: aktivieren
- Enable HTTP/2 Preloading: aktivieren
- Description:
- Klicke nun auf das kleine Dreieck neben dem Titel der Registerkarte
HTTP(S)
und wähleHTTP-Server
aus. Erstelle einen neuen Eintrag mit den folgenden Einstellungen:- Den
advanced mode
aktivieren - HTTP Listen Address:
80
- HTTPS Listen Address:
443
- Server Name: die (Sub-)Domain unter der Mattermost erreichbar ist (z.B. mattermost.reukauff.eu)
- Locations:
Mattermost Main
undMattermost Websocket
(oder wie auch immer sie genannt wurden) - TLS Certificate: Das zuvor konfigurierte Zertifikat
- Client CA Certificate:
R3 (ACME Client)
- Zero RTT: aktivieren
- Enable Let’s Encrypt Plugin support: aktivieren
- Prefer server ciphers: aktivieren
- OCSP Stapling: aktivieren
- OCSP Verify: aktivieren
- Header Buffer Size (kB):
1
- Count Of Large Header Buffers:
4
- Size Of Large Header Buffers (kB):
8
- Security Header: Der erstellte Security Header
- Den
- Danach muss Port 80 und 443 in der Firewall zugelassen werden. Andernfalls werden sie blockiert und erreichen nicht einmal den Reverse-Proxy auf OPNsense.
- Anschließend muss ein NAT (“Port forwarding”) für Port 8443 UDP und TCP zum Mattermost-Server konfiguriert werden. Dies ist erforderlich, um die Verbindungen für Anrufe zu ermöglichen.
- Das war’s. Mattermost läuft jetzt und OPNsense fungiert als Reverse Proxy und verwaltet auch die Let’s Encrypt Zertifikate. Wir können nun auf Mattermost auf der konfigurierten (Sub-)Domain zugreifen, den ersten Benutzer anlegen und den Server konfigurieren.
Mattermost konfigurieren
Wenn man sich mit Mattermost verbindet und sich mit dem anfänglich erstellten Benutzer anmeldet, gibt es einige kleinere Dinge zu konfigurieren, die konfiguriert werden sollten, um eine voll funktionsfähige Umgebung zu haben.
Konfigurieren der Mail-Einstellungen
Klicke oben links auf den Kachelbutton und wähle System Console
. In der Systemkonsole auf der linken Seite wähle SMTP
. Konfiguriere die Mailserver-Einstellungen in diesem Dialog. Sie sind für jedes Setup individuell, daher kann ich keine Empfehlungen bezüglich der Einstellung geben, außer dass man eine dedizierte Mailadresse für Mattermost verwenden sollte.
Push-Benachrichtigungsserver
Standardmäßig sind Push-Benachrichtigungen für die Apps deaktiviert. Um sie zu aktivieren, gehe in der Systemkonsole zu Mobile Push Notifications
. Wähle die Einstellung Use TPNS connection to send notifications to iOS and Android app
. Hinweis: Dies wird nur für unkritische Umgebungen empfohlen, da der TPNS-Dienst (Test Push Notification Service
) keine SLAs bietet. Im schlimmsten Fall werden die Benachrichtigungen mit einer großen Verzögerung oder gar nicht gesendet.
Wenn eine kritische Umgebung vorliegt, prüfe den Hosted Push Notifications Service (HPNS) von Mattermost.
Lokalisierung
Wenn für Benutzer andere Sprachen als die Standardsprache zur Verfügung stehen soll, kann in der Systemkonsole unter Localization
die Verfügbarkeit anderer Sprachen ausgewählt werden. Hier können die Standard-Server- und Client-Sprache sowie zusätzliche Sprachen für Ihre Clients ausgewählt werden. Hinweis: Wenn unter Verfügbare Sprachen
nichts ausgewählt ist, sind alle Sprachen verfügbar!
Registrierung / Anmeldung
Standardmäßig kann jeder neue Konten auf dem Server erstellen, der eine Einladung von einem anderen Benutzer erhält. Unter Signup
in der Systemkonsole kann dieses Verhalten strikter (d.h. Benutzer können nicht einladen oder die Registrierung auf bestimmte Domains beschränken) oder lockerer (jeder kann sich ohne Einladung registrieren) eingestellt werden.
References
Install Mattermost via Omnibus: Install Mattermost Omnibus — Mattermost documentation Mattermost Calls Dokumentation: Calls self-hosted deployment — Mattermost documentation Mattermost Mobile Push Dokumentation: Mobile push notifications — Mattermost documentation