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.
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.
Klicke auf die Schaltfläche Team erstellen, um dein erstes Team zu erstellen.
Als nächstes wirst du aufgefordert, eine öffentliche URL für das Team festzulegen.
Klicke auf die Schaltfläche Fertig stellen, um das Mattermost-Dashboard zu öffnen.
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.
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
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.
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.