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:

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, 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

2 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

Schreibe einen Kommentar

Avatar-Platzhalter

Deine E-Mail-Adresse wird nicht veröffentlicht.