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:
- MySQL Passwort ändern
- MySQL Benutzer
- 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
- Raspberry Pi – Nextcloud Backup mittels rclone erstellen - 18. Januar 2021
- Raspberry Pi – E-Mails versenden mit msmtp - 18. Januar 2021
- Raspberry Pi – externe Festplatten mit exFAT verbinden - 18. Januar 2021
5 Kommentare
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/
Hallo,
genau diese Rechtezuweisung habe ich doch im Schritt 1 gemacht 🙂
LG
Christian
Ups 🙂 Dann hatte ich entweder trotzdem das Problem oder ich hab die Zeile übersehen 🙁
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).
wieder zu früh gemeckert – ein Neustart des Servers hats behoben