So installierst du das Mattermost Team Messaging System auf Ubuntu 22.04

Mattermost ist eine Open-Source-Messaging-Plattform, die für Chats, Dateiaustausch, Projektmanagement und Workflow-Orchestrierung verwendet wird. Sie ist in der Sprache Go geschrieben. Mattermost wird sowohl als Cloud-Hosting-Lösung als auch als selbst gehosteter Server angeboten. Es ist eine Alternative zu Slack und anderen professionellen Plattformen. Durch die Möglichkeit, es auf deinem Server zu hosten, hast du die Kontrolle über deine Kommunikation und sensible Daten.

In diesem Lernprogramm erfährst du, wie du Mattermost Team Messaging System auf einem Ubuntu 22.04 Server installierst.

Voraussetzungen

  • Ein Server mit Ubuntu 22.04 und mindestens 2 GB RAM für bis zu 1000 Benutzer.
  • Ein Nicht-Root-Benutzer mit sudo-Rechten.
  • Die Uncomplicated Firewall(UFW) ist aktiviert und läuft.
  • Ein voll qualifizierter Domainname, der auf den Server zeigt. Für unser Tutorial werden wir die Domain mattermost.example.com verwenden.
  • Alles ist auf dem neuesten Stand.
    $ sudo apt update && sudo apt upgrade
    

Schritt 1 – Firewall konfigurieren

Der erste Schritt vor der Installation der Pakete besteht darin, die Firewall so zu konfigurieren, dass HTTP- und HTTPS-Verbindungen zugelassen werden.

Überprüfe den Status der Firewall.

$ sudo ufw status

Du solltest etwas wie das Folgende sehen.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Der Port 8065 wird von Mattermost benötigt. Dieser Port muss nur vorübergehend geöffnet werden, um die Installation zu bestätigen. Wir werden ihn später wieder entfernen.

$ sudo ufw allow 8065

Erlaube HTTP und HTTPs Ports.

$ sudo ufw allow http
$ sudo ufw allow https

Überprüfe den Status noch einmal zur Bestätigung.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
8065                       ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
8065 (v6)                  ALLOW       Anywhere (v6)

Schritt 2 – Installiere PostgreSQL

Mattermost kann sowohl mit MySQL- als auch mit PostgreSQL-Servern arbeiten, aber PostgreSQL ist die empfohlene Wahl.

Ubuntu 22.04 wird mit der neuesten stabilen (v14) Version von PostgreSQL ausgeliefert. Du kannst sie mit einem einzigen Befehl installieren.

$ sudo apt install postgresql postgresql-contrib

Überprüfe die Version von MySQL.

$ psql --version
psql (PostgreSQL) 14.4 (Ubuntu 14.4-0ubuntu0.22.04.1)

Schritt 3 – PostgreSQL konfigurieren

PostgreSQL erstellt während der Installation ein Linux-Benutzerkonto postgres. Auf die PostgreSQL-Shell kannst du über dieses Konto zugreifen.

Melde dich in der PostgreSQL-Shell an.

$ sudo -u postgres psql

Erstelle die Mattermost-Datenbank.

postgres=# CREATE DATABASE mattermostdb;

Erstelle den Mattermost-Datenbankbenutzer. Ersetze mmuser-password durch ein stärkeres Passwort deiner Wahl.

postgres=# CREATE USER mmuser WITH PASSWORD 'mmuser-password';

Erteile dem Benutzer alle Rechte für die Datenbank.

postgres=# GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser;

Beende die PostgreSQL-Shell, indem du \q in der Shell eingibst.

postgres=# \q

Öffne die Datei /etc/postgresql/{version}/main/pg_hba.conf zur Bearbeitung.

$ sudo nano /etc/postgresql/{version}/main/pg_hba.conf

Suche die folgenden Zeilen.

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256

Ändere die Werte peer und scram-sha-256 in trust in den oben genannten Zeilen.

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Starte den PostgreSQL-Dienst neu, um die Änderung zu aktivieren.

$ sudo systemctl restart postgresql

Überprüfe, ob du dich mit dem Mattermost SQL-Benutzer verbinden kannst.

$ psql --dbname=mattermost --username=mmuser --password

Du wirst zur Eingabe des Passworts aufgefordert. Gib es ein und du wirst in die PostgreSQL-Shell eingeloggt. Gib \q ein, um die Shell zu verlassen.

Password:
psql (14.4 (Ubuntu 14.4-0ubuntu0.22.04.1))
Type "help" for help.

mattermost-> \q

Schritt 4 – Mattermost herunterladen

Lade die neueste Version des Mattermost-Servers herunter. Zum Zeitpunkt der Erstellung dieses Tutorials ist die neueste Version 7.0.1 verfügbar.

$ wget https://releases.mattermost.com/7.0.1/mattermost-7.0.1-linux-amd64.tar.gz

Entpacke das Archiv.

$ tar -xvzf mattermost*.gz

Verschiebe die entpackten Dateien in das Verzeichnis /opt.

$ sudo mv mattermost /opt

Erstelle das Datenspeicherverzeichnis für den Mattermost-Server.

$ sudo mkdir /opt/mattermost/data

Schritt 5 – Erstelle einen Systembenutzer für Mattermost und konfiguriere die Berechtigungen

Öffne die Konfigurationsdatei /opt/mattermost/config/config.json zur Bearbeitung.

$ sudo nano /opt/mattermost/config/config.json

Setze die Variable SiteURL auf den Domainnamen, den du für deine Installation verwenden möchtest.

"SiteURL": "https://mattermost.example.com",

Suche die Variable DriverName unter SqlSettings und ändere ihren Wert in mysql.

"DriverName": "mysql",

Setze die Variable DataSource auf den folgenden Wert. Ersetze mmuser durch den SQL-Benutzernamen, YourPassword23! durch das SQL-Passwort und mattermostdb durch den Datenbanknamen, den du in Schritt 4 konfiguriert hast.

"DataSource": "mmuser:YourPassword23!@tcp(localhost:3306)/mattermostdb?charset=utf8mb4,utf8&writeTimeout=30s",

Es gibt noch viele weitere Einstellungen, die du an dieser Stelle vornehmen kannst, aber es wäre einfacher, sie nach der Installation vorzunehmen. Im Moment sind nur diese beiden Einstellungen wichtig.

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Erstelle einen Systembenutzer und eine Gruppe für den Mattermost-Server.

$ sudo useradd --system --user-group mattermost

Ändere die Eigentümerschaft des Mattermost-Verzeichnisses auf den neu angelegten Benutzer und die Gruppe.

$ sudo chown -R mattermost:mattermost /opt/mattermost

Erteile der Gruppe mattermost Schreibrechte für das Verzeichnis.

$ sudo chmod -R g+w /opt/mattermost

Wechsle in das Mattermost-Verzeichnis.

$ cd /opt/mattermost

Starte den Mattermost-Server als Benutzer mattermost.

$ sudo -u mattermost ./bin/mattermost

Der Server startet und erstellt eine Reihe von Log-Informationen. Warte, bis die Zeile Server is listening on [::]:8065 erscheint. Rufe die URL http://<serverIPaddress>:8065 in deinem Browser auf und du wirst die folgende Anmeldeseite sehen.

Mattermost Kontoerstellungsseite

Drücke Strg + C, um den Server anzuhalten. Wir werden später darauf zurückkommen, um die Installation zu konfigurieren.

Schritt 6 – Erstellen einer Systemd-Unit-Datei

Der nächste Schritt besteht darin, eine Systemdatei für Mattermost zu erstellen.

Erstelle und öffne die Unit-Datei zum Bearbeiten.

$ sudo nano /lib/systemd/system/mattermost.service

Füge den folgenden Code in die Datei ein.

[Unit]
Description=Mattermost
After=network.target
After=postgresql.service
BindsTo=postgresql.service

[Service]
Type=notify
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
KillMode=mixed
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152

[Install]
WantedBy=multi-user.target

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Starte den systemd-Daemon neu, um die Servicedatei zu laden.

$ sudo systemctl daemon-reload

Starte den Mattermost-Dienst.

$ sudo systemctl start mattermost

Überprüfe den Status des Dienstes.

? mattermost.service - Mattermost
     Loaded: loaded (/lib/systemd/system/mattermost.service; disabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-07-11 01:24:46 UTC; 20s ago
   Main PID: 23628 (mattermost)
      Tasks: 48 (limit: 2241)
     Memory: 448.2M
        CPU: 14.929s
     CGroup: /system.slice/mattermost.service
             ??23628 /opt/mattermost/bin/mattermost
             ??23651 plugins/com.mattermost.plugin-channel-export/server/dist/plugin-linux-amd64
             ??23656 plugins/com.mattermost.nps/server/dist/plugin-linux-amd64
             ??23662 plugins/com.mattermost.calls/server/dist/plugin-linux-amd64
             ??23668 plugins/com.mattermost.apps/server/dist/plugin-linux-amd64
             ??23674 plugins/playbooks/server/dist/plugin-linux-amd64
             ??23683 plugins/focalboard/server/dist/plugin-linux-amd64
 ....

Aktiviere den Dienst.

$ sudo systemctl enable mattermost

Schritt 7 – Nginx installieren

Ubuntu 22.04 wird mit einer älteren Version von Nginx ausgeliefert. Um die neueste Version zu installieren, musst du das offizielle Nginx-Repository herunterladen.

Importiere den Signierschlüssel von Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Füge das Repository für die stabile Version von Nginx hinzu.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

Aktualisiere die System-Repositories.

$ sudo apt update

Installiere Nginx.

$ sudo apt install nginx

Überprüfe die Installation.

$ nginx -v
nginx version: nginx/1.22.0

Schritt 8 – SSL installieren

Wir müssen Certbot installieren, um das SSL-Zertifikat zu erstellen. Du kannst Certbot entweder über das Repository von Ubuntu installieren oder die neueste Version mit dem Snapd-Tool herunterladen. Wir werden die Snapd-Version verwenden.

Bei Ubuntu 22.04 ist Snapd standardmäßig installiert. Führe die folgenden Befehle aus, um sicherzustellen, dass deine Version von Snapd auf dem neuesten Stand ist.

$ sudo snap install core

Installiere Certbot.

$ sudo snap install --classic certbot

Verwende den folgenden Befehl, um sicherzustellen, dass der Certbot-Befehl ausgeführt werden kann, indem du einen symbolischen Link zum Verzeichnis /usr/bin erstellst.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Führe den folgenden Befehl aus, um ein SSL-Zertifikat zu erzeugen.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m name@example.com -d mattermost.example.com

Mit dem obigen Befehl wird ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/mattermost.example.com auf deinem Server heruntergeladen.

Erstelle ein Diffie-Hellman-Gruppenzertifikat.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Öffne die Datei /etc/letsencrypt/renewal/mattermost.example.com.conf zur Bearbeitung.

$ sudo nano /etc/letsencrypt/renewal/mattermost.example.com.conf

Füge den folgenden Code am Ende der Datei ein.

pre_hook = systemctl stop nginx
post_hook = systemctl start nginx

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Wir haben das SSL-Zertifikat mit der Standalone-Option von Certbot erstellt. Es lässt seinen Webserver laufen, um das Zertifikat zu erstellen, was bedeutet, dass Nginx während der Erneuerung abgeschaltet sein sollte. Die Befehle pre_hook und post_hook werden vor und nach der Erneuerung ausgeführt, um den Nginx-Server automatisch abzuschalten und neu zu starten, sodass kein manuelles Eingreifen erforderlich ist.

Um zu überprüfen, ob die SSL-Erneuerung einwandfrei funktioniert, führe einen Probelauf des Prozesses durch.

$ sudo certbot renew --dry-run

Wenn du keine Fehler siehst, ist alles in Ordnung. Dein Zertifikat wird automatisch erneuert.

Schritt 9 – Nginx konfigurieren

Öffne die Datei /etc/nginx/nginx.conf zum Bearbeiten.

$ sudo nano /etc/nginx/nginx.conf

Füge die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf; ein.

server_names_hash_bucket_size  64;

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Erstelle und öffne die Datei /etc/nginx/conf.d/monica.conf zum Bearbeiten.

$ sudo nano /etc/nginx/conf.d/mattermost.conf

Füge den folgenden Code in die Datei ein. Ersetze mattermost.example.com durch deinen Domainnamen. Vergewissere dich, dass der Wert von client_max_body_size auf 10 MB eingestellt ist, was der Standard-Uploadgröße von Dateien in Monica entspricht. Es ist derselbe Wert, den wir zuvor mit PHP konfiguriert haben.

upstream backend {
   server 127.0.0.1:8065;
   keepalive 32;
}

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;

server {
  listen 80 default_server;
  server_name   mattermost.example.com;
  return 301 https://$server_name$request_uri;
}

server {
   listen 443 ssl http2;
   server_name    mattermost.example.com;

   http2_push_preload on; # Enable HTTP/2 Server Push

   ssl_certificate /etc/letsencrypt/live/mattermost.example.com/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/mattermost.example.com/privkey.pem;
   ssl_trusted_certificate /etc/letsencrypt/live/mattermost.example.com/chain.pem;
   ssl_session_timeout 1d;

   # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
   ssl_protocols TLSv1.2 TLSv1.3;

   # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
   # prevent replay attacks.
   #
   # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
   ssl_early_data on;

   ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:50m;
   # HSTS (ngx_http_headers_module is required) (15768000 seconds = six months)
   add_header Strict-Transport-Security max-age=15768000;
   # OCSP Stapling ---
   # fetch OCSP records from URL in ssl_certificate and cache them
   ssl_stapling on;
   ssl_stapling_verify on;
   ssl_dhparam /etc/ssl/certs/dhparam.pem;

   add_header X-Early-Data $tls1_3_early_data;

   location ~ /api/v[0-9]+/(users/)?websocket$ {
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
       client_max_body_size 50M;
       proxy_set_header Host $http_host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Frame-Options SAMEORIGIN;
       proxy_buffers 256 16k;
       proxy_buffer_size 16k;
       client_body_timeout 60;
       send_timeout 300;
       lingering_timeout 5;
       proxy_connect_timeout 90;
       proxy_send_timeout 300;
       proxy_read_timeout 90s;
       proxy_http_version 1.1;
       proxy_pass http://backend;
   }

   location / {
       client_max_body_size 50M;
       proxy_set_header Connection "";
       proxy_set_header Host $http_host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Frame-Options SAMEORIGIN;
       proxy_buffers 256 16k;
       proxy_buffer_size 16k;
       proxy_read_timeout 600s;
       proxy_cache mattermost_cache;
       proxy_cache_revalidate on;
       proxy_cache_min_uses 2;
       proxy_cache_use_stale timeout;
       proxy_cache_lock on;
       proxy_http_version 1.1;
       proxy_pass http://backend;
   }
}

# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the `$ssl_early_data` variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data {
  "~." $ssl_early_data;
  default "";
}

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Erteile Nginx die Rechte für das Cache-Verzeichnis.

$ sudo chown -R nginx:nginx /var/cache/nginx

Überprüfe deine Nginx-Konfiguration.

$ sudo nginx -t

Starte den Nginx-Server neu.

$ sudo systemctl restart nginx

Schritt 10 – Zugriff auf den Mattermost Server

Öffne die URL https://mattermost.example.com in deinem Browser und du wirst mit der Anmeldeseite begrüßt, wie in Schritt 5 gezeigt. Gib deine Kontodaten ein und du wirst als Systemadministrator festgelegt.

Bevor wir weitermachen, müssen wir den Port 8065 schließen, da wir Mattermost so konfiguriert haben, dass es über eine öffentliche URL erreichbar ist. Daher stellt der offene Port ein Sicherheitsrisiko dar.

$ sudo ufw delete allow 8065

Als Nächstes wirst du auf die Seite zur Teamerstellung weitergeleitet.

Mattermost Team Creation Page

Klicke auf die Schaltfläche Team erstellen, um dein erstes Team zu erstellen.

Mattermost Neues Team

Als nächstes wirst du aufgefordert, eine öffentliche URL für das Team festzulegen.

Mattermost Team URL

Klicke auf die Schaltfläche Fertig stellen, um das Mattermost-Dashboard zu öffnen.

Mattermost Dashboard

Schritt 11 – Mattermost Server konfigurieren

Du kannst Mattermost über die Datei config.json oder über die Systemkonsole im Dashboard konfigurieren. Wir werden es über das Dashboard machen, weil es so viel einfacher ist. Klicke auf den Produkt-Button in der oberen linken Ecke und wähle dann die Option Systemkonsole.

Menü der Mattermost-Systemkonsole

Du gelangst dann zum Dashboard der Systemkonsole, wo du alle Einstellungen für den Server vornehmen kannst.

E-Mail-Benachrichtigungen konfigurieren

Eine der wichtigsten Funktionen eines Nachrichtensystems sind die E-Mail-Benachrichtigungen.

Der erste Schritt besteht darin, die Benachrichtigungen zu aktivieren. Besuche die Systemkonsole >> Website-Konfiguration >> Menü Benachrichtigungen und stelle die folgenden Optionen ein.

  • Setze E-Mail-Benachrichtigungen aktivieren auf true
  • Setze den Anzeigenamen für Benachrichtigungen auf No-Reply
  • Setze die Absenderadresse für die Benachrichtigung auf etwas wie name@example.com.
  • Setze die Support-E-Mail-Adresse auf z. B. support@example.com

Mattermost E-Mail-Benachrichtigungen

Der nächste Schritt ist die Aktivierung von SMTP. Rufe die Systemkonsole >> Umgebung >> SMTP auf und stelle die folgenden Optionen ein. Für unser Tutorial verwenden wir den Amazon SES Mailer.

  • Setze den SMTP-Server auf {SMTP-server}
  • Setze den SMTP Server Port auf 465
  • Setze SMTP-Authentifizierung aktivieren auf true
  • Setze den SMTP-Server-Benutzernamen auf {SES-username}
  • Setze das SMTP-Server-Passwort auf {SES-Schlüssel}
  • Setze die Verbindungssicherheit auf TLS oder STARTTLS, je nachdem, was der SMTP-Server akzeptiert

Klicke auf die Schaltfläche Verbindung testen, um die SMTP-Einstellungen zu bestätigen.

Mattermost SMTP-Einstellungen

Es gibt noch viele weitere Einstellungen zu konfigurieren. Wenn du fertig bist, musst du den Server über das Terminal neu starten, damit die Änderungen übernommen werden.

$ sudo systemctl restart mattermost

Fazit

Damit ist unser Tutorium zur Installation und Konfiguration des Mattermost Team Messaging-Systems auf einem Ubuntu 22.04 Server abgeschlossen. Wenn du noch Fragen hast, schreibe sie in die Kommentare unten.

Das könnte dich auch interessieren …