Ich zeige euch hier, wie ihr die Chatplattform Mattermost in wenigen Minuten mit Docker und Traefik realisiert. Die Anleitung beschreibt die Installation der kostenlosen Version und nicht der Enterprise Version.
Datum | Änderungen |
---|---|
06.11.2020 | Erstellung dieser Anleitung |
24.10.2022 | Komplette Anpassung dieser Anleitung |
01.06.2023 | Anpassung Traefik Labels, Kapitel 4: Änderung von Version 7.1 zu “latest” |
1. Grundvoraussetzung
- Docker & Docker Compose v2 (Debian / Ubuntu)
- Traefik v2 + 3 – Reverse-Proxy mit CrowdSec im Stack einrichten
2. Ordner anlegen
Zuerst legen wir uns passende Ordner-Strukturen an.
mkdir -p /opt/containers/mattermost/
3. Docker Compose anlegen
Nun legen wir die eigentliche Docker Datei an.
nano /opt/containers/mattermost/docker-compose.yml
Inhalt
version: "2.4" services: postgres: image: postgres:${POSTGRES_IMAGE_TAG} restart: ${RESTART_POLICY} security_opt: - no-new-privileges:true pids_limit: 100 read_only: true tmpfs: - /tmp - /var/run/postgresql volumes: - ${POSTGRES_DATA_PATH}:/var/lib/postgresql/data environment: # timezone inside container - TZ # necessary Postgres options/variables - POSTGRES_USER - POSTGRES_PASSWORD - POSTGRES_DB networks: - default mattermost: depends_on: - postgres image: mattermost/${MATTERMOST_IMAGE}:${MATTERMOST_IMAGE_TAG} restart: ${RESTART_POLICY} security_opt: - no-new-privileges:true pids_limit: 200 read_only: ${MATTERMOST_CONTAINER_READONLY} tmpfs: - /tmp volumes: - ${MATTERMOST_CONFIG_PATH}:/mattermost/config:rw - ${MATTERMOST_DATA_PATH}:/mattermost/data:rw - ${MATTERMOST_LOGS_PATH}:/mattermost/logs:rw - ${MATTERMOST_PLUGINS_PATH}:/mattermost/plugins:rw - ${MATTERMOST_CLIENT_PLUGINS_PATH}:/mattermost/client/plugins:rw - ${MATTERMOST_BLEVE_INDEXES_PATH}:/mattermost/bleve-indexes:rw environment: - TZ # necessary Mattermost options/variables (see env.example) - MM_SQLSETTINGS_DRIVERNAME - MM_SQLSETTINGS_DATASOURCE # necessary for bleve - MM_BLEVESETTINGS_INDEXDIR # additional settings - MM_SERVICESETTINGS_SITEURL labels: - "traefik.enable=true" - "traefik.http.routers.mattermost.entrypoints=websecure" - "traefik.http.routers.mattermost.rule=(Host(`mattermost.euredomain.de`))" - "traefik.http.routers.mattermost.tls=true" - "traefik.http.routers.mattermost.tls.certresolver=http_resolver" - "traefik.http.routers.mattermost.service=mattermost" - "traefik.http.services.mattermost.loadbalancer.server.port=8065" - "traefik.docker.network=proxy" - "traefik.http.routers.mattermost.middlewares=default@file" networks: - proxy - default networks: proxy: external: true
Notwendige Anpassungen:
- eure Domain bei Traefik anpassen („mattermost.euredomain.de“)
4. env Datei erstellen
Nun erstellen wir noch eine zusätzliche Datei, in welcher wir alle Konfigurationen vornehmen.
nano /opt/containers/mattermost/.env
Kopiert nun folgendes in die Datei:
# Domain of service DOMAIN=mattermost.euredomain.de # Container settings ## Timezone inside the containers. The value needs to be in the form 'Europe/Berlin'. ## A list of these tz database names can be looked up at Wikipedia ## https://en.wikipedia.org/wiki/List_of_tz_database_time_zones TZ=Europe/Berlin RESTART_POLICY=unless-stopped # Postgres settings ## Documentation for this image and available settings can be found on hub.docker.com ## https://hub.docker.com/_/postgres ## Please keep in mind this will create a superuser and it's recommended to use a less privileged ## user to connect to the database. ## A guide on how to change the database user to a nonsuperuser can be found in docs/creation-of-nonsuperuser.md POSTGRES_IMAGE_TAG=13-alpine POSTGRES_DATA_PATH=./volumes/db/var/lib/postgresql/data POSTGRES_USER=mmuser POSTGRES_PASSWORD=mmuser_password POSTGRES_DB=mattermost # Nginx ## The nginx container will use a configuration found at the NGINX_MATTERMOST_CONFIG. The config aims ## to be secure and uses a catch-all server vhost which will work out-of-the-box. For additional settings ## or changes ones can edit it or provide another config. Important note: inside the container, nginx sources ## every config file inside */etc/nginx/conf.d* ending with a *.conf* file extension. ## Inside the container the uid and gid is 101. The folder owner can be set with ## `sudo chown -R 101:101 ./nginx` if needed. NGINX_IMAGE_TAG=alpine ## The folder containing server blocks and any additional config to nginx.conf NGINX_CONFIG_PATH=./nginx/conf.d NGINX_DHPARAMS_FILE=./nginx/dhparams4096.pem CERT_PATH=./volumes/web/cert/cert.pem KEY_PATH=./volumes/web/cert/key-no-password.pem #GITLAB_PKI_CHAIN_PATH=<path_to_your_gitlab_pki>/pki_chain.pem #CERT_PATH=./certs/etc/letsencrypt/live/${DOMAIN}/fullchain.pem #KEY_PATH=./certs/etc/letsencrypt/live/${DOMAIN}/privkey.pem ## Exposed ports to the host. Inside the container 80 and 443 will be used HTTPS_PORT=443 HTTP_PORT=80 # Mattermost settings ## Inside the container the uid and gid is 2000. The folder owner can be set with ## `sudo chown -R 2000:2000 ./volumes/app/mattermost`. MATTERMOST_CONFIG_PATH=./volumes/app/mattermost/config MATTERMOST_DATA_PATH=./volumes/app/mattermost/data MATTERMOST_LOGS_PATH=./volumes/app/mattermost/logs MATTERMOST_PLUGINS_PATH=./volumes/app/mattermost/plugins MATTERMOST_CLIENT_PLUGINS_PATH=./volumes/app/mattermost/client/plugins MATTERMOST_BLEVE_INDEXES_PATH=./volumes/app/mattermost/bleve-indexes ## Bleve index (inside the container) MM_BLEVESETTINGS_INDEXDIR=/mattermost/bleve-indexes ## This will be 'mattermost-enterprise-edition' or 'mattermost-team-edition' based on the version of Mattermost you're installing. #MATTERMOST_IMAGE=mattermost-enterprise-edition MATTERMOST_IMAGE=mattermost-team-edition MATTERMOST_IMAGE_TAG=latest ## Make Mattermost container readonly. This interferes with the regeneration of root.html inside the container. Only use ## it if you know what you're doing. ## See https://github.com/mattermost/docker/issues/18 MATTERMOST_CONTAINER_READONLY=false ## The app port is only relevant for using Mattermost without the nginx container as reverse proxy. This is not meant ## to be used with the internal HTTP server exposed but rather in case one wants to host several services on one host ## or for using it behind another existing reverse proxy. APP_PORT=8065 ## Configuration settings for Mattermost. Documentation on the variables and the settings itself can be found at ## https://docs.mattermost.com/administration/config-settings.html ## Keep in mind that variables set here will take precedence over the same setting in config.json. This includes ## the system console as well and settings set with env variables will be greyed out. ## Below one can find necessary settings to spin up the Mattermost container MM_SQLSETTINGS_DRIVERNAME=postgres MM_SQLSETTINGS_DATASOURCE=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable&connect_timeout=10 ## Example settings (any additional setting added here also needs to be introduced in the docker-compose.yml) MM_SERVICESETTINGS_SITEURL=https://${DOMAIN}
Noch anzupassen:
DOMAIN: hier gebt ihr die identische Domain wie bei Traefik an
5. Mattermost starten
Nun können wir Mattermost starten. Gebt dazu folgendes ein:
docker compose -f /opt/containers/mattermost/docker-compose.yml up
Euch sollte nun immer folgender Fehler angezeigt werden.
Jetzt können wir Mattermost wieder mit “STRG+C” beenden. Nun beheben wir den Fehler. Dazu gebt ihr folgendes ein:
chown -R 2000:2000 /opt/containers/mattermost/volumes/app/mattermost
Nun starten wir Mattermost erneut.
docker compose -f /opt/containers/mattermost/docker-compose.yml up -d
Geht nun nach einigen Minuten auf eure Homepage mattermost.euredomain.de und ihr solltet folgendes sehen:
Zuerst füllen wir das Formular aus. Anschließend könnt ihr Mattermost bereits nutzen.
6. Quellen
https://docs.mattermost.com/overview/index.html
https://github.com/mattermost/mattermost-docker
https://hub.docker.com/u/mattermost
Hallo,
Vielen Dank für die tolle Anleitung? Ich hätte ein Frage.
Warum wird der PlugIn-Marketplace nicht aktiviert, wenn ich die Konfiguration entsprechend ändere(in der config.json)?
VG
Hallo,
hat jemand auch das Problem dass er auf der Mobil App der Meldung vorliegen hat dass vom Server keine Benachrichtigungen versendet werden können. Es sind alle Einstellungen die dafür verantwortlich sind auf “wahr” gesetzt.
Auch gibt es ein Upload Fehler wenn ich aus Nextcloud heraus eine Datei über Matterbridge etc. an Mattermost senden möchte.
Hat dazu jemand eine Idee.
Vielen Dank und viele Grüße Andreas
Moin,
mittlerweile ist das hier benutzte Docker-Image deprecated und der neue Weg berücksichtigt kein Docker-Compose-File, sondern ein .env-File.
Wie implementiere ich traefik hier korrekt? Arbeitet ihr an einem Update der Anleitung? 🙂
Danke und liebe Grüße.
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..
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).
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/