Eigener Matrix-Homeserver mit Docker einrichten

Veröffentlicht von brun am

Matrix ist ein Freies Kommunikationsprotokoll für Kurznachrichten. Der Funktionsumfang entspricht nahezu dem des bekannten US-Amerikanischen Messengers, jedoch ist das Matrix Protokoll Open-Source und läuft auf dem eigenen Server.
Es werden ebenfalls Sprach- und Videoanrufe zwischen 2 Personen sowie in Gruppenchats unterstützt.
Da es sich bei „der Matrix“ um ein dezentrales Netzwerk handelt, ist ebenfalls eine Kommunikation mit anderen Nutzern möglich, welche ein Benutzerkonto auf einem anderen Server (z.B. ihrem eingenen Homeserver) besitzen.

Wir verwenden Synapse als Server, welches eine Matrix Implementierung speziell für Heimserver ist.
Zusätzlich installieren wir diverse „Addons“:

  • element-web – Ein Webclient zum Zugriff auf den Server, von welchem aus Nachrichten versendet werden können
  • synapse-admin – Administrations-Webpanel für die Benutzerverwaltung des Servers

Die Einrichtung erfolgt auf einem Docker-Server mithilfe von docker-compose. Zur Installation dieser Tools bitte den Beitrag „Docker im Proxmox LXC Container betreiben“ lesen. Die Installation muss nicht unter Verwendung von Proxmox erfolgen sondern kann auch auf jedem anderen Linux-Server erfolgen (dann den 1. Schritt einfach überspringen).

Die docker-compose.yml befinden sich in meiner docker-compose-homeserver- Repository auf Github:

Entweder die gesamte Repo klonen:

git clone https://github.com/dustinbrun/docker-compose-homeserver

Oder die Ordner synapse und matrix-extensions seperat erstellen und die darin enthaltenen Dateien heruntenladen.

mkdir synapse
cd synapse
wget https://raw.githubusercontent.com/dustinbrun/docker-compose-homeserver/main/synapse/docker-compose.yml

cd ..
mkdir matrix-extentions
cd matrix-extentions
wget https://raw.githubusercontent.com/dustinbrun/docker-compose-homeserver/main/matrix-extensions/docker-compose.yml
mkdir element-web-config
cd element-web-config
wget https://raw.githubusercontent.com/dustinbrun/docker-compose-homeserver/main/matrix-extensions/element-web-config/config.json

1. Serverinstallation

Als erstes muss im Ordner synapse-data eine homeserver.yaml Datei erzeugt werden, weche die Serverkonfiguration enthält. Im unten genannten Befehl die Variablen für den Servernamen anpassen (Beim ersten ausführen des Befehls werden zunächst die benötigten Daten heruntergeladen, dies kann einen Moment dauern).
Die erzeugten Dateien anschließend in den Datenordner verschieben:

cd ..
cd synapse

docker run -it --rm \
    --mount type=volume,src=synapse-data,dst=/data \
    -e SYNAPSE_SERVER_NAME=my.matrix.host \
    -e SYNAPSE_REPORT_STATS=yes \
    matrixdotorg/synapse:latest generate

mkdir synapse-data
mv  /var/lib/docker/volumes/synapse-data/_data/ synapse-data
docker volume rm synapse-data/

Die homeserver.yaml Datei kann anschließend noch weiter angepasst werden. Es kann beispielsweise eingestellt werden, dass Nachrichten, die älter als X Tage sind vom Server gelöscht werden um Speicherplatz zu sparen.

nano synapse-data/homeserver.yaml

Wenn die Konfiguration abgeschlossen ist kann der Server auch schon gestartet werden. Dazu einfach den folgenden Befehl ausführen. Vorher sicherstellen, dass man sich in dem Ordner befindet, wecher die docker-compose.yml-Datei enthält:

docker-compose up -d

Zum Testen kann man nun SERVER-IP:8008 aufrufen. Man sollte die folgende Seite sehen:

Admin Benutzer erstellen:

Um den ersten Benutzer zu erstellen, muss zunächst ein Terminal innerhalb des Containers geöffnet werden. Dies kann entweder mittels Portainer (Anleitung zur Installation von Portainer ist im Beitrag Docker im Proxmox LXC Container betreiben enthalten) erfolgen, oder mit folgendem Befehl, der auf dem Docker-Server ausgeführt werden muss:

docker exec -it synapse_synapse_1 bash

(Wobei synapse_synapse_1 der Containername ist und eventuell anders lauten kann)

Innerhalb des Containers dann folgenden Befehl ausführen:

register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml --admin

Es erfolgt dann eine Abfrage des Benutzernamens und ein Passwort muss erstellt werden.

Wenn das alles funktioniert, können wir mit den Erweiterungen weitermachen:

2. Erweiterungen installieren

Zuerst müssen in der Datei element-web-config/config.json die Serverparameter angepasst werden, welche wir im ersten Schritt festgelegt haben. Dies betrifft den Servername und die Server-URL. Wenn der Web-Messenger nur intern erreichbar sein soll kann für die URL: „SERVER-IP:8008“ eingetragen werden. Der Rest der Datei kann unverändert bleiben. Danach die Container starten:

cd ..
cd matrix-extentions
nano element-web-config/config.json

docker-compose up -d

Wenn alles funktioniert können nun folgende Webseiten aufgerufen werden:

  • SERVER-IP:92 – synapse-admin
  • SERVER-IP:91 – element-web

In synapse-admin können anschließend neue Benutzer angelegt werden (Die Anmeldedaten sind die eines Admin-Benutzers des Synapse-Servers, sowie als Heimserver-URL „http://SERVER-IP:8008“), und der Spaß kann beginnen!!!

Als Messenger ist ebenfalls die App „Element“ für Smartphones und Tablets verfügbar.

3. Server aus dem Internet erreichbar machen

Um den Server auch von außen erreichbar zu machen, muss im Router eine Portfreigabe erstellt werden, weche auf SERVER-IP:8008 zeigt. Fall man keine Statische IP-Addresse besitzt muss ein DynDns-Dienst benutzt werden. Ich kann dafür Dyndns-Service empfehlen. Die Einrichtung dieses Dienstes im Router ist auf der Webseite ebenfalls beschrieben.

Es ist NICHT notwendig den element-web Port freizugeben und auf keinen Fall sollte das synapse-admin Interface freigegeben werden.

Weitere Möglichkeiten

Wem die hier installierten „Addons“ noch nicht reichen, der sollte einen Blick auf das matrix-docker-ansible-deploy Github-Projekt werfen, welches einen wesentlich größeren Funktionsumfang mit noch mehr zusätzlichen Plugins bietet.

Ein Interessanter Vortrag über die Funktionsweise von Matrix und einer Demonstration von element-web ist hier zu finden: https://chemnitzer.linux-tage.de/2021/de/programm/beitrag/189

Kategorien: IT

6 Kommentare

Marko · 1. Juni 2022 um 10:44

Hi, die Einrichtung hat super geklappt. Eine Frage habe ich:
Wie mache ich ein update von z.B. 1.57 auf 1.60? Wenn ich in Portainer ein recreate (mit pull latest image) erhalte ich direkt den Fehler „failure mount point /data“.

Muss ich nochmal „docker-compose up -d“ ausführen? Oder muss ich per Shell in den Container rein und ein „pip install –upgrade matrix-synapse“ durchführen?

    brun · 11. Juni 2022 um 14:56

    Hallo Marko,
    da der Container nicht mit Hilfe von Portainer erstellt wurde, würde ich eher davon abraten Veränderungen (bzw. Upgrades) über das Portainer-Webinterface durchzuführen. Stattdessen würde ich lieber die docker-compose.yml-Datei anpassen: Den Image-Namen von matrixdotorg/synapse:latest abändern auf matrixdotorg/synapse:v1.60.0 und anschließend erneut docker-compose up -d ausführen. Damit sollte das Upgrade funktionieren. Ich hoffe ich konnte dir weiterhelfen.
    LG

Jack Stone · 9. November 2022 um 14:04

Welches Konto nutze ich denn für das Admin portal nachdem ich deiner Anleitung 1zu1 gefolgt bin?

    brun · 13. November 2022 um 20:16

    Hallo,
    es können die Anmeldedaten eines beliebigen Admin-Benutzers des Matrix-Servers verwendet werden. Mir ist aufgefallen, dass ich im Beitrag auch vergessen habe zu erwähnen wie ein Admin-Benutzer erstellt werden kann. Ich habe nun eine Entsprechende Anleitung ergänzt und den Beitrag aktualisiert.
    LG

Paul · 10. Januar 2023 um 17:45

Ich bin auf der Suche nach einer Anleitung wie ich den Server konfiguriere.
Ich habe die Anleitung von Marius Synology mit dem Docker erfolgreich umgesetzt. Sehr ähnlich wie deine. Und nun, wo alles läuft, frage ich mich, wie kann ich zum Beispiel, die Dateimenge der Benutzer eingrenzen, oder einstellen, wie viele Menschen sich am tag registrieren dürfen. Oder wo kann ich Benutzer löschen? Leider bin ich Amateur. Gibt es dafür eine Webansicht?

    brun · 15. Januar 2023 um 11:36

    Hallo,
    die Benutzerverwaltung kann über das synapse-admin-Webinterface erfolgen. Bezüglich des Löschens von Benutzern scheint es nur möglich zu sein diese zu Deaktivieren. Für das vollständige Löschen gibt es wohl soweit ich weiß auch in der Konsole keine Möglichkeit. Aber durch das Deaktivieren kann der jeweilige Benutzer jedenfalls sein Konto nicht weiter nutzen. Viele weitere Konfigurationen können über die „homeserver.yaml“-Datei des Servers erfolgen, also leider ohne Webansicht. Dort gibt es aber auch die Möglichkeit sogenannte retention policies und purge jobs anzulegen, welche alte Nachrichten automatisch löschen können. Das ganze ist in dieser Datei auch gut beschrieben.
    LG

Schreibe einen Kommentar

Avatar-Platzhalter

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