Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung Synology / NAS 11.09.2026 · 11 min Lesezeit

Mattermost auf dem Synology NAS installieren: Team-Chat als Slack-Alternative

Mattermost als selbstgehosteter Slack-Ersatz auf dem Synology NAS: Zwei-Container-Stack mit PostgreSQL, korrekte UID-2000-Berechtigungen, HTTPS-Reverse-Proxy und SMTP, mit Verifikationsschritt nach jeder Station.

Neue Version verfügbar: Mattermost Team Edition 12.0.1. Diese Anleitung wird überarbeitet. Beschrieben ist Mattermost Team Edition 11.7.11.

WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Schwarzes NAS auf einem Holzregal mit Pflanze, Vase und leeren Sprechblasen, im Hintergrund ein Fenster mit Seeblick

Mattermost ist eine Open-Source-Plattform für Team-Chat mit Channels, Threads und Dateiablage und eine Alternative zu Slack oder Microsoft Teams. Sie läuft als Zwei-Container-Stack aus PostgreSQL und der Mattermost-App auf jedem Synology-NAS mit DSM 7.2 und Container Manager. Die Daten bleiben auf dem eigenen NAS, die Team Edition ist kostenlos.

Voraussetzungen

  • Synology NAS mit DSM 7.2 oder höher, x86_64-Architektur (Intel/AMD-CPU)
  • Mindestens 2 GB RAM im NAS (empfohlen: 4 GB), mindestens 5 GB freier Speicher
  • Container Manager in DSM installiert und aktiviert
  • SSH-Zugang zum NAS, aktiviert unter Systemsteuerung > Terminal & SNMP (für den chown-Befehl zwingend erforderlich)
  • Eigene Domain oder Synology DDNS (z. B. name.synology.me) für eine erreichbare HTTPS-URL
  • SSL-Zertifikat für HTTPS, entweder von Let's Encrypt oder ein eigenes Zertifikat, in DSM unter Systemsteuerung > Sicherheit > Zertifikat
  • SMTP-Zugangsdaten (optional, aber empfohlen für Nutzereinladungen und Passwort-Reset)

Schritt 1: Ordnerstruktur im Synology File Station anlegen

Öffnen Sie in DSM die File Station und navigieren Sie nach /volume1/docker. Legen Sie dort den Ordner mattermost an, und darin folgende sieben Unterordner:

  • config: Konfigurationsdatei config.json
  • data: Nutzer-Uploads und Anhänge
  • logs: Anwendungslogs
  • plugins: Server-Plugins
  • client: Client-seitige Plugins
  • indexes: Bleve-Volltext-Suchindex
  • db: PostgreSQL-Datenbankdaten

Verifizieren: Prüfen Sie per SSH, ob alle sieben Unterordner vorhanden sind:

ls /volume1/docker/mattermost/

Erwartete Ausgabe:

client  config  data  db  indexes  logs  plugins

Schritt 2: Verzeichnis-Berechtigungen per SSH setzen (UID 2000)

Der Mattermost-Container läuft intern mit UID/GID 2000:2000, nicht als Root. Alle Mattermost-Datenverzeichnisse auf dem NAS-Host müssen diesem Nutzer gehören, sonst verweigert der Container den Start mit einem „permission denied“-Fehler.

Verbinden Sie sich per SSH mit dem NAS und führen Sie diesen Befehl aus:

sudo chown -R 2000:2000 \
  /volume1/docker/mattermost/config \
  /volume1/docker/mattermost/data \
  /volume1/docker/mattermost/logs \
  /volume1/docker/mattermost/plugins \
  /volume1/docker/mattermost/client \
  /volume1/docker/mattermost/indexes
sudo chmod -R 755 \
  /volume1/docker/mattermost/config \
  /volume1/docker/mattermost/data \
  /volume1/docker/mattermost/logs \
  /volume1/docker/mattermost/plugins \
  /volume1/docker/mattermost/client \
  /volume1/docker/mattermost/indexes

Das db-Verzeichnis für PostgreSQL bleibt mit den Standard-Berechtigungen; PostgreSQL legt darin beim ersten Start selbst einen Unterordner mit passenden Rechten an.

Verifizieren: Prüfen Sie die Eigentümer-Zuweisung:

ls -la /volume1/docker/mattermost/

Alle sechs Mattermost-Verzeichnisse (alles außer db) sollten 2000 2000 als Eigentümer zeigen, z. B. drwxr-xr-x 1 2000 2000 ... config.

Schritt 3: Compose-Datei im Container Manager anlegen

Öffnen Sie in DSM den Container Manager, wechseln Sie in den Reiter Projekt und klicken Sie auf Erstellen. Geben Sie als Projektname mattermost ein und wählen Sie über Pfad festlegen den Ordner /docker/mattermost. Wählen Sie als Quelle docker-compose.yml erstellen, fügen Sie folgenden Inhalt ein und ersetzen Sie SICHERES_DB_PASSWORT durch ein starkes eigenes Passwort (mindestens 14 Zeichen) und https://chat.example.synology.me durch Ihre tatsächliche öffentliche HTTPS-URL:

services:
  db:
    image: postgres:18-alpine
    container_name: mattermost-db
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    pids_limit: 100
    read_only: true
    tmpfs:
      - /tmp
      - /var/run/postgresql
    volumes:
      - /volume1/docker/mattermost/db:/var/lib/postgresql
    environment:
      TZ: Europe/Berlin
      POSTGRES_USER: mmuser
      POSTGRES_PASSWORD: SICHERES_DB_PASSWORT
      POSTGRES_DB: mattermost
    networks:
      - mattermost-net

  mattermost:
    image: mattermost/mattermost-team-edition:11.7.11
    container_name: mattermost-app
    restart: unless-stopped
    depends_on:
      - db
    security_opt:
      - no-new-privileges:true
    pids_limit: 200
    tmpfs:
      - /tmp
    ports:
      - "8065:8065"
    volumes:
      - /volume1/docker/mattermost/config:/mattermost/config
      - /volume1/docker/mattermost/data:/mattermost/data
      - /volume1/docker/mattermost/logs:/mattermost/logs
      - /volume1/docker/mattermost/plugins:/mattermost/plugins
      - /volume1/docker/mattermost/client:/mattermost/client/plugins
      - /volume1/docker/mattermost/indexes:/mattermost/bleve-indexes
    environment:
      TZ: Europe/Berlin
      MM_SQLSETTINGS_DRIVERNAME: postgres
      MM_SQLSETTINGS_DATASOURCE: postgres://mmuser:SICHERES_DB_PASSWORT@db:5432/mattermost?sslmode=disable&connect_timeout=10
      MM_BLEVESETTINGS_INDEXDIR: /mattermost/bleve-indexes
      MM_SERVICESETTINGS_SITEURL: https://chat.example.synology.me
      # SMTP (optional: Kommentarzeichen entfernen und befüllen für E-Mail-Benachrichtigungen)
      # MM_EMAILSETTINGS_SMTPSERVER: smtp.example.com
      # MM_EMAILSETTINGS_SMTPPORT: "587"
      # MM_EMAILSETTINGS_CONNECTIONSECURITY: STARTTLS
      # MM_EMAILSETTINGS_SMTPUSERNAME: user@example.com
      # MM_EMAILSETTINGS_SMTPPASSWORD: APP_PASSWORT
      # MM_EMAILSETTINGS_SENDEMAILNOTIFICATIONS: "true"
    networks:
      - mattermost-net

networks:
  mattermost-net:
    driver: bridge

Vier wichtige Punkte zur Compose-Datei:

  • Das Image mattermost/mattermost-team-edition:11.7.11 gehört zur ESR-Reihe 11.7 (Extended Support Release, Support bis 15. Mai 2027); auf Docker Hub gibt es inzwischen 11.7.14. Die monatlichen Feature-Releases (Stand Oktober 2026: 12.0.1) erhalten nur rund drei Monate Support, Sie müssten also etwa vierteljährlich aktualisieren. Kein :latest in Produktion, die offizielle Doku empfiehlt explizite Versions-Tags.
  • Ab PostgreSQL 18 erwartet das offizielle Image den Mount auf /var/lib/postgresql und legt die Daten selbst in einem Unterordner pro Hauptversion ab. Ein Mount auf /var/lib/postgresql/data (wie bei PostgreSQL 16 und 17) führt zu einer Neustart-Schleife des Datenbank-Containers.
  • Der Hostname im Datasource-String (@db:5432) entspricht dem Service-Namen im Docker-Netzwerk, nicht localhost.
  • Alle Werte stehen hier direkt als Klartextwerte in der Compose-Datei. Der Container Manager liest auch eine .env-Datei aus dem Projektordner, dafür müssten Sie die Werte in der Compose-Datei als Variablen schreiben.

Verifizieren: Prüfen Sie vor dem Start, dass SICHERES_DB_PASSWORT an beiden Stellen (unter db und im Datasource-String) identisch ist und dass MM_SERVICESETTINGS_SITEURL mit https:// beginnt und Ihre echte Domain enthält. Der Container Manager zeigt YAML-Syntaxfehler direkt im Editor an.

Schritt 4: Stack starten und DB-Migration beobachten

Klicken Sie zweimal auf Weiter und dann auf Fertig, um den Stack hochzufahren. Docker lädt die Images und startet beide Container, das Terminal endet mit Exit Code: 0. Beim ersten Start führt Mattermost alle Datenbank-Migrationen aus, auf einer DS920+ war der Server nach rund einer Minute bereit.

Verfolgen Sie den Fortschritt per SSH:

sudo docker logs mattermost-app -f

Verifizieren: Die Logs stehen im JSON-Format, die Meldung steht im Feld msg. Migrationen und Start sind fertig, wenn diese Meldung erscheint:

Server is listening on [::]:8065

In den ersten Sekunden ist Failed to ping DB normal, solange PostgreSQL noch startet. Hören die Verbindungsfehler zu PostgreSQL nicht auf, prüfen Sie, ob das Passwort an beiden Stellen der Compose-Datei übereinstimmt und ob der Container mattermost-db läuft. Beenden Sie die Anzeige mit Ctrl+C.

Container Manager, Liste Projekt: grüner Status (1), Projekt mattermost (2), 2 Container (3)
Projekt läuft: 1 grüner Status, 2 Projekt mattermost, 3 zwei Container.

Schritt 5: Reverse Proxy im Synology Application Portal einrichten

Mattermost hört intern auf HTTP-Port 8065. Für den Produktivbetrieb muss der Synology Reverse Proxy HTTPS 443 auf diesen Port übersetzen. Gehen Sie in DSM zu Systemsteuerung > Anmeldeportal > Erweitert > Reverse Proxy und legen Sie über Erstellen einen neuen Eintrag an. Vergeben Sie einen beliebigen Reverse-Proxy-Namen, zum Beispiel mattermost, und tragen Sie diese Werte ein:

FeldWert
Quelle: ProtokollHTTPS
Quelle: Hostnamechat.example.synology.me
Quelle: Port443
Ziel: ProtokollHTTP
Ziel: Hostnamelocalhost
Ziel: Port8065

Aktivieren Sie anschließend die WebSocket-Unterstützung, sonst fehlen Echtzeit-Updates (neue Nachrichten, Tipp-Indikatoren). Wechseln Sie im Proxy-Eintrag auf den Tab Benutzerdefinierte Kopfzeile, klicken Sie auf Erstellen und wählen Sie WebSocket. DSM legt dann diese beiden Einträge an:

Header-NameWert
Upgrade$http_upgrade
Connection$connection_upgrade

Port 443 muss in Systemsteuerung > Sicherheit > Firewall von außen erreichbar sein. Öffnen Sie Port 8065 nicht direkt.

Verifizieren: Rufen Sie im Browser https://chat.example.synology.me auf. Sie sollten die Mattermost-Seite mit der Frage „Where would you like to view this?“ sehen. Ein SSL-Fehler deutet auf ein fehlendes Zertifikat hin; ein „502 Bad Gateway“ zeigt, dass der Reverse Proxy den Container nicht erreicht (Container läuft noch nicht oder falscher Port).

Schritt 6: Erstadmin einrichten und System-Konfiguration prüfen

Beim ersten Aufruf klicken Sie auf View in Browser, danach erscheint die Seite Create your account. Legen Sie dort E-Mail-Adresse, Benutzernamen und ein starkes Passwort für den ersten Administrator-Account fest. Danach ist der Setup-Wizard deaktiviert, weitere Admins ernennen Sie über System Console > Nutzer > Rolle ändern.

Nach der Erstanmeldung empfehlen sich folgende Prüfpunkte in der System Console (Produktname oben links > System Console):

  • Environment > Web Server: Prüfen Sie, ob „Site URL“ korrekt auf Ihre HTTPS-URL zeigt.
  • Environment > SMTP: Nutzen Sie bei konfiguriertem SMTP den Test-Button.
  • Experimental > Bleve: Aktivieren Sie die Bleve-Suche und bestätigen Sie den Indexierungspfad.
  • Environment > Push Notification Server: Senden Sie eine Test-Push-Benachrichtigung.

Verifizieren: Erstellen Sie einen zweiten Test-Nutzer per Einladungslink und senden Sie eine Direktnachricht. Wenn die Nachricht in Echtzeit erscheint (ohne manuelles Reload), funktionieren WebSocket-Verbindung und Reverse Proxy korrekt.

Schritt 7: SMTP für E-Mail-Benachrichtigungen aktivieren (optional)

Für Einladungen, Passwort-Reset und Benachrichtigungen braucht Mattermost einen SMTP-Relay. Stoppen Sie das Projekt mit Stopp, denn der Reiter YAML-Konfigurationen ist schreibgeschützt, solange es läuft. Entfernen Sie dort die Kommentarzeichen vor den entsprechenden Zeilen, ergänzen Sie die letzte Zeile aus diesem Block und ersetzen Sie die Platzhalter:

      MM_EMAILSETTINGS_SMTPSERVER: smtp.example.com
      MM_EMAILSETTINGS_SMTPPORT: "587"
      MM_EMAILSETTINGS_CONNECTIONSECURITY: STARTTLS
      MM_EMAILSETTINGS_SMTPUSERNAME: user@example.com
      MM_EMAILSETTINGS_SMTPPASSWORD: APP_PASSWORT
      MM_EMAILSETTINGS_SENDEMAILNOTIFICATIONS: "true"
      MM_EMAILSETTINGS_REQUIREEMAILVERIFICATION: "true"

Klicken Sie danach auf Speichern und wählen Sie Projekt erstellen und starten (Image neu erstellen), damit die Umgebungsvariablen übernommen werden. Ein bloßer Neustart des Containers liest die Compose-Datei nicht neu ein.

Verifizieren: Gehen Sie in der System Console zu Environment > SMTP und klicken Sie auf Test Connection. Senden Sie danach eine Einladungs-E-Mail an eine externe Adresse und prüfen Sie die Zustellung.

Technische Eckdaten

ParameterWert
Mattermost-Imagemattermost/mattermost-team-edition:11.7.11 (ESR, Support bis 15.05.2027)
PostgreSQL-Imagepostgres:18-alpine (Mount auf /var/lib/postgresql)
Web-Port (intern)8065/TCP (HTTP, nur für Reverse Proxy)
Calls/WebRTC-Port8443/TCP+UDP (optional, nur Calls-Plugin)
Container-UID/GID2000:2000 (alle Mattermost-Volumes)
RAM-Bedarfetwa 500 MB bis 1 GB (empfohlen: max. 4 GB mem_limit)
Lizenz Team Editionkostenlos, MIT-Lizenz, kein Nutzer-Limit

Troubleshooting / Typische Fehler

  • Container startet nicht / „permission denied“: Der Container startet ständig neu, im Log steht could not create config file: open /mattermost/config/config.json: permission denied. Die Mattermost-Verzeichnisse gehören noch nicht UID 2000. Lösung: Führen Sie den SSH-Befehl aus Schritt 2 erneut aus und starten Sie den Container neu.
  • Log meldet „SiteURL must be set“: MM_SERVICESETTINGS_SITEURL fehlt oder ist leer. Stoppen Sie das Projekt, tragen Sie den Wert im Reiter YAML-Konfigurationen ein, klicken Sie auf Speichern und wählen Sie Projekt erstellen und starten (Image neu erstellen).
  • „connect: connection refused“ (DB-Verbindungsfehler): Der Hostname im Datasource-String ist falsch, er muss der Service-Name im Docker-Netzwerk sein (db), nicht localhost.
  • WebSocket schlägt fehl / Echtzeit-Updates fehlen: Synology Reverse Proxy hat keine WebSocket-Header. Lösung: Fügen Sie im Reverse-Proxy-Eintrag die benutzerdefinierten Header Upgrade: $http_upgrade und Connection: $connection_upgrade hinzu (Schritt 5).
  • E-Mail-Einladungen kommen nicht an: Entweder SMTP nicht konfiguriert, oder der SMTP-Server blockiert E-Mails aus dem Docker-Netzwerk (172.x.x.x). Lösung: Nutzen Sie einen authentifizierten SMTP-Relay mit App-Passwort.
  • Mobile Push-Benachrichtigungen funktionieren nicht: Die NAS-URL ist nicht aus dem Internet erreichbar. Lösung: Richten Sie DynDNS oder Synology QuickConnect ein. Alternativ betreiben Sie einen eigenen ntfy-Push-Proxy auf dem Synology NAS.
  • Datenbank-Container startet ständig neu, Log meldet „unused mount/volume“: Das Datenverzeichnis ist auf /var/lib/postgresql/data gemountet. PostgreSQL 18 erwartet /var/lib/postgresql. Korrigieren Sie bei einer Neuinstallation den Mount in der Compose-Datei und erstellen Sie das Projekt neu. Liegen in dem Ordner bereits Daten einer älteren PostgreSQL-Version, ist ein Upgrade per Dump und Restore nötig; einfach das Image auf 18 zu wechseln funktioniert nicht.
  • Update schlägt fehl: Überspringen Sie nie mehr als eine Hauptversion gleichzeitig (z. B. 9.x, dann 10.x, dann 11.x), denn DB-Migrationen müssen sequenziell laufen. Erstellen Sie vor jedem Update einen PostgreSQL-Dump.

Häufige Fragen

Team Edition oder Enterprise Edition: Was braucht ein KMU?

Für die meisten KMU reicht die Team Edition: unbegrenzte Nutzer und Channels, Threads, Dateiablage, Volltext-Suche und mobile Apps. Die Enterprise Edition wird erst nötig bei Active-Directory-/LDAP-SSO, SAML, erweiterten Compliance-Features oder Gäste-Accounts. Der einzige Unterschied beim Deployment ist der Image-Name: mattermost-enterprise-edition statt mattermost-team-edition.

Wie prüfe ich, ob die DB-Migration erfolgreich war?

Prüfen Sie nach dem ersten Start die Logdatei:

sudo grep -c "Server is listening" /volume1/docker/mattermost/logs/mattermost.log

Eine Zahl ab 1 zeigt, dass Migration und Start durchgelaufen sind; danach erscheint unter http://NAS-IP:8065 die Mattermost-Startseite. Ist die DSM-Firewall aktiv, muss Port 8065 dafür im Heimnetz freigegeben sein.

Wie viel Speicher braucht Mattermost langfristig?

Die Datenbank startet mit etwa 50 bis 200 MB für kleine Teams. Uploads im data-Verzeichnis erreichen schnell mehrere Gigabyte; ein Speicher-Quota auf /volume1/docker/mattermost/data in DSM ist empfehlenswert.

Mattermost vs. Microsoft Teams: Was taugt Mattermost wirklich?

Mattermost bietet volle Datenkontrolle, lässt sich on-premise betreiben und hat in der Team Edition kein Nutzer-Limit. Nachteile: keine native Videokonferenz (nur über das optionale Calls-Plugin) und kein integrierter Office-365-Workflow. Einen Vergleich aus KMU-Sicht bietet Microsoft Teams für KMU einrichten und absichern.

Was ist mit dem Calls-Plugin für Sprach- und Videoanrufe?

Das Calls-Plugin ermöglicht Sprach- und Videoanrufe im Browser und benötigt zusätzlich Port 8443 (UDP/TCP) für WebRTC. Das Plugin ist in der Team Edition enthalten, der Port muss aber in der Compose-Datei unter ports eingetragen und in der Synology-Firewall freigeschaltet werden.

Wie gehe ich bei einem Mattermost-Update vor?

Stoppen Sie das Projekt, ändern Sie im Reiter YAML-Konfigurationen den Image-Tag auf die neue Version, klicken Sie auf Speichern und wählen Sie Projekt erstellen und starten (Image neu erstellen). Mattermost führt die DB-Migration automatisch beim Start durch. Der Wechsel von einer ESR zur nächsten ESR ist laut Mattermost direkt unterstützt. Lesen Sie vor jedem Update die Important Upgrade Notes in der Mattermost-Dokumentation. Erstellen Sie vor jedem Update, solange das Projekt noch läuft, einen PostgreSQL-Dump:

sudo docker exec mattermost-db pg_dump -U mmuser mattermost > /volume1/docker/mattermost/backup_$(date +%Y%m%d).sql

Fazit

Mattermost auf dem Synology NAS ist ein Slack-Ersatz für KMU-Teams, die Wert auf Datenkontrolle legen. Der Compose-Stack ist in etwa einer Stunde aufgesetzt. Die wichtigsten Fallstricke sind die UID-2000-Berechtigungen auf dem Host, die korrekte MM_SERVICESETTINGS_SITEURL und die WebSocket-Header im Reverse Proxy.

Weiterführende Anleitungen und Quellen

Offizielle Quellen: Alle technischen Details basieren auf der offiziellen Mattermost-Dokumentation (docs.mattermost.com) und dem offiziellen Mattermost-Docker-Repository auf GitHub (github.com/mattermost/docker). Upgrade-Hinweise: Important Upgrade Notes, Release-Übersicht: Mattermost Server Releases. Orientierung für den Synology-Ablauf bot die Anleitung von mariushosting.