Ich zeige euch hier, wie ihr die Chatplattform Mattermost in wenigen Minuten mit Docker realisiert. Die Anleitung beschreibt die Installation der kostenlosen Version und nicht der Enterprise Version .Traefik dient uns hier als Reverse Proxy und stellt später den Dienst verschlüsselt per TLS bereit.

Wer Traefik noch nicht installiert hat, findet hier eine Anleitung, wie ihr dies schnell tun könnt.

Als Grundlage meiner Anleitung dient die offizielle Anleitung von Mattermost. Ich muss gestehen, dass ich fast 4 Stunden gebraucht habe, bis dieser Server lief. Der Grund ist, dass alle Anleitungen, die ich im Internet gefunden habe, nicht mehr aktuell waren. Dazu kam noch, dass die offizielle Dokumentation von Mattermost auch zum großen Teil nicht funktionsfähig ist. Falls euch das auch mit meiner Anleitung passieren sollte, habe ich im letzten Kapitel beschrieben, wie ich alles rausgefunden habe. Vlt hilft euch das dann weiter.

1. Ordner anlegen

Zuerst legen wir uns passende Ordner-Strukturen an.

mkdir -p /opt/containers/mattermost/{config,data,database,logs,plugins}

Nun passen wir die Zugriffsrechte noch an.

chown 2000:2000 -R /opt/containers/mattermost/

2. Docker Compose anlegen

Nun legen wir die eigentliche Docker Datei an. Hierfür habe ich mir die offizielle Konfiguration angeschaut und sehr viel abändern müssen, damit diese lauffähig wird.

cd /opt/containers/mattermost
nano docker-compose.yml

Inhalt

version: '3.3'

services:
  mattermost-db:
    image: mysql:5.7
    restart: unless-stopped
    container_name: mattermost-db

    environment:
      MYSQL_DATABASE: mattermost
      MYSQL_USER: mmuser     ## Hier SQL Benutzer eingeben ##
      MYSQL_PASSWORD: mmuser_password ## Hier SQL Passwort eingeben ##
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - /opt/containers/mattermost/database:/var/lib/mysql
    networks:
      - default

  mattermost-app:
    image: mattermost/mattermost-team-edition
    networks:
      - default
      - proxy
    volumes:
      - /opt/containers/mattermost/config:/mattermost/config:rw
      - /opt/containers/mattermost/data:/mattermost/data:rw
      - /opt/containers/mattermost/logs:/mattermost/logs:rw
      - /opt/containers/mattermost/plugins:/mattermost/plugins:rw
      - /etc/localtime:/etc/localtime:ro
    container_name: mattermost-app

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.mattermost.entrypoints=http"
      - "traefik.http.routers.mattermost.rule=Host(`chat.euredomain.de`)"   # Hier eure URL eingeben #
      - "traefik.http.middlewares.mattermost-https-redirect.redirectscheme.scheme=https"
      - "traefik.http.routers.mattermost.middlewares=mattermost-https-redirect"
      - "traefik.http.routers.mattermost-secure.entrypoints=https"
      - "traefik.http.routers.mattermost-secure.rule=Host(`chat.euredomain.de`)"    # Hier eure URL eingeben #
      - "traefik.http.routers.mattermost-secure.tls=true"
      - "traefik.http.routers.mattermost-secure.tls.certresolver=http"
      - "traefik.http.routers.mattermost-secure.service=mattermost"
      - "traefik.http.services.mattermost.loadbalancer.server.port=8065"
      - "traefik.docker.network=proxy"
      - "traefik.http.routers.mattermost-secure.middlewares=secHeaders@file"

networks:
  proxy:
    external: true

Notwendige Anpassungen:

  1. MySQL Passwort ändern
  2. MySQL Benutzer
  3. 2x eure Domain bei Traefik anpassen (chat.euredomain.de“)

Diese Docker Compose Datei funktioniert nur, wenn ich euch mittels meiner Anleitung hier Traefik installiert habt. Sonst heißen einige Traefik Variablen wohl anders. Diese müsst ihr dann dementsprechend bei euch anpassen.

Wenn ihr Mattermost auf eurer „Hauptdomain“ haben wollt, so gebt ihr folgendes ein:

"traefik.http.routers.mattermost.rule=Host(`www.euredomain.de`,`euredomain.de`)"
"traefik.http.routers.mattermost-secure.rule=Host(`www.euredomain.de`,`euredomain.de`)"

3. Mattermost starten

Mattermost startet ihr wie gewohnt mit folgendem Befehl:

docker-compose -f /opt/containers/mattermost/docker-compose.yml up

Nach einiger Zeit sollte folgendes in der Konsole stehen:

{"level":"error","ts":1604665884.8119602,"caller":"sqlstore/supplier.go:244","msg":"Failed to ping DB","error":"dial tcp 127.0.0.1:3306: connect: connection refused","retrying in seconds":10}
{"level":"info","ts":1604665894.8122818,"caller":"sqlstore/supplier.go:232","msg":"Pinging SQL","database":"master"}
{"level":"error","ts":1604665894.8149815,"caller":"sqlstore/supplier.go:244","msg":"Failed to ping DB","error":"dial tcp 127.0.0.1:3306: connect: connection refused","retrying in seconds":10}

Nun könnt ihr mit „STRG+C“ den Container beenden. Wir müssen nun noch eine Konfigurationsdatei anpassen, welche Mattermost erst nach dem Start des Containers anlegt.

4. Config.json bearbeiten

Nun müssen wir die Datei „config.json“ öffnen und dort Anpassungen zu unserer Datenbank vornehmen.

nano /opt/containers/mattermost/config/config.json

Hier scrollt ihr bis Zeile 139. Dies sieht bei mir so aus:

    "SqlSettings": {
        "DriverName": "mysql",
        "DataSource": "mmuser:mostest@tcp(localhost:3306)/mattermost_test?charset=utf8mb4,utf8\u0026readTimeout=30s\u0026writeTimeout=30s",
        "DataSourceReplicas": [],
        "DataSourceSearchReplicas": [],
        "MaxIdleConns": 20,
        "ConnMaxLifetimeMilliseconds": 3600000,
        "MaxOpenConns": 300,
        "Trace": false,
        "AtRestEncryptKey": "s74tz3nead342dasdawk79gr1pjqaa",
        "QueryTimeout": 30,
        "DisableDatabaseSearch": false
    },

Hier müssen wir nun die Zeile „DataSource“ anpassen.

alt:
       "DataSource": "mmuser:mostest@tcp(localhost:3306)/mattermost_test?charset=utf8mb4,utf8\u0026readTimeout=30s\u0026writeTimeout=30s",

neu:
       "DataSource": "mmuser:mmuser_password@tcp(mattermost-db:3306)/mattermost?charset=utf8mb4,utf8\u0026readTimeout=30s\u0026writeTimeout=30s",

Syntax:
       "DataSource": "[Benutzer]:[Passwort]@tcp([Datenbank-Server]:3306)/[Datenbank]?charset=utf8mb4,utf8\u0026readTimeout=30s\u0026writeTimeout=30s",

Nun starten wir den Container erneut.

docker-compose -f /opt/containers/mattermost/docker-compose.yml up -d

4. Mattermost Login

Nun müsst ihr ein paar Minuten warten.

Wenn ihr nun auf „chat.euredomain.de“ geht, dann solltet ihr auf diese Webseite kommen.

Hier legt ihr nun den Administrator an.

5. Sprache ändern

5.1 Sprache des aktuellen Benutzers ändern

Dazu geht ihr auf die „3 Balken“ und wählt „Account Settings“ aus.

Nun wählt ihr den Reiter „Display“ und ganz unten dann „Language“.

Mit einem Klick auf „Edit“ könnt ihr die Sprache auf Deutsch ändern.

5.2 Sprache des Servers / neuer Clients ändern

Dazu geht ihr wieder auf die „3 Balken“ und dann „Systemkonsole“.

Nun wählt ihr den Reiter „Lokalisierung“ aus. Hier könnt ihr nun Deutsch auswählen.

6. Site URL angeben

Mattermost fordert sie durch eine Aufforderung im oberen Bereich auf eine „Site-URL“ einzugeben. Dazu geht ihr auf die „3 Balken“ und dann „Systemkonsole“.

Nun wählt ihr „Webserver“ aus. Jetzt seht ihr, dass dort nichts steht.

Hier gebt ihr eure URL ein. Diese lautet: „https://chat.euredomain.de“ und klickt dann auf „Live-URL testen“.

Wenn alles geklappt hat, dann erscheint eine grüne Meldung.

Nun sollte euer Server komplett funktionieren.

7. Probleme, die ich hatte

Hier schreibe ich nur ein paar Probleme auf, die ich mit Mattermost hatte. Dies dient lediglich dazu, dass ihr Ideen bekommt, was man tun kann, wenn eine neuere Version des Containers nicht funktionieren sollte. Ich habe im deutschsprachigen sowie englischsprachigen Raum keine Anleitung für den Mattermost Team Server mittels Docker gefunden, die funktioniert.

7.1 Postgress Datenbank

In allen Dockerfiles auf Github wird mit einer Postgress 9.4 Datenbank gearbeitet. Leider akzeptiert die kostenlose Version (Teams Version) diesen Server nicht mehr. Nach langem Suchen habe ich auch den Grund dafür gefunden. Könnt ihr hier nachlesen.

7.2 Falscher Port

Irgendwie nutzt der Container mattermost-prod-db einen anderen Port. Daher kann ich euch nur empfehlen in die config.json zu schauen, welcher Port genutzt wird. Dies ist wichtig, da ihr diesen ja mit Traefik umleiten müsst.

8. Quellen

https://docs.mattermost.com/overview/index.html

https://github.com/mattermost/mattermost-docker

https://github.com/mattermost/mattermost-docker/blob/master/contrib/swarm/docker-stack-traefik.yml

https://hub.docker.com/u/mattermost

Teile diesen Beitrag
Christian

Categories:

6 Kommentare

  1. Es fehlt ein Punkt, ich musste nach der Erstellung der Verzeichnisse diese noch dem richtigen Benutzer zuweisen (hat bisher immer ohne geklappt, naja …)

    chown -R 2000:2000 /opt/containers/mattermost/

  2. Bei mir klappt das leider nicht so reibungslos: Ich konnte die Seite zur Ersteinrichtung nur erreichen indem ich die https-Konfiguration für traefik in der docker-compose Datei auskommentiert habe.
    Sobald ich https in traefik wieder einschalte, werde ich direkt auf https weitergeleitet und sehe nur ein „404 Page not found“ (ich denke mal die Fehlermeldung kommt aber von Mattermost, nicht von Firefox).
    Im Feld Seiten-URL ist auch https als Protokoll mit angegeben, ein Test schlägt dann aber natürlich fehl (weil ich ja nur drauf zugreifen kann, wenn ich https ausknipse).

    Kleiner Schönheitsfehler noch bei mir:
    Ich habe zusätzlich ein „depends on: -mattermost-db“ in die docker compose eingefügt, weil bei mir der Server vor der Datenbank gestartet wurde, und es dann erstmal connection-timeouts vom Server im log hagelte (lief aber trotzdem, sobald die DB oben war).

  3. Heute ist ein seltsames Problem aufgetreten.
    Ein Nutzer erhält plötzlich die Fehlermeldung, dass die Verbindung unsicher sei und per Deny Policy blockiert wurde.
    Merkwürdig ist, dass der Benutzer am Freitag noch zugreifen konnte, keine Einstellungen geändert wurden und andere Benutzer aus dem selben Netzwerk / von dem selben PC zugreifen können.
    Besagter Benutzer hat auch Zugriff auf meine Nextcloud-Instanz im selben Stack.

    Hast Du eine Idee woran es liegen könnte?

    Dachte erst in Richtung Security-Policies der Firma in deren Netzwerk sich die Benutzer befinden, aber dnan dürften ja keinerlei Aufrufe möglich sein.

    Nextcloud wurde ebenso wie Mattermost nach Deinen Anleitungen installiert udn es wurde auch (außer Passwörter / URLS und Usernamen) nichts abweichendes Konfiguriert..

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.