Matrix Synapse installieren: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
 
(56 dazwischenliegende Versionen von 9 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Diese Anleitung beschreibt, wie man den Matrix-Homeserver Synapse auf der Managed Hosting Plattform von Hostsharing installieren kann.  
Der Matrix Server ''Synapse'', der sogenannte 'Homeserver', ist aktuell die einzige vollständige serverseitige Implementierung des Matrix-Protokolls.
 
 
{{Textkasten|gelb|Work in Progress|Leider funktioniert die Server-zu-Server-Kommunikation von Synapse hinter dem Apache-Proxy mit den genannten Rewrite-Rules nicht. Bitten Sie dazu den Service, Ihren Apache VHost individuell für den Matrix Server anzupassen.}}
 
Synapse wird bei Hostsharing als ''eigener Daemon'' betrieben. Der Betrieb ist im Shared Hosting anmelde- und kostenpflichtig. Daher empfehlen wir für den Betrieb einen ''Managed Server''.
 
Diese Anleitung beschreibt, wie man den Matrix-Homeserver Synapse auf der Managed Hosting Plattform von Hostsharing installieren kann. Dabei sind die User-IDs nach dem Schema @user:beispiel.de aufgebaut, der Homeserver an sich ist unter matrix.beispiel.de erreichbar.


== Vorbereitungen ==
== Vorbereitungen ==


Mit Hilfe von HSAdmin wird angelegt:
Mit Hilfe von HSAdmin werden angelegt:
# Ein User als Service-User mit ''/bin/bash'' als Shell, zum Beispiel Beispiel: ''xyz00-matrix''
# Ein User als Service-User mit ''/bin/bash'' als Shell, zum Beispiel Beispiel: ''xyz00-matrix''
# Eine Domain mit ''xyz00-matrix'' als Domain-Administrator, zum Beispiel ''matrix.beispiel.de''
# Eine Domain mit ''xyz00-matrix'' als Domain-Administrator, zum Beispiel ''matrix.beispiel.de''
Zeile 9: Zeile 16:
# Eine Postgresql-Datenbank ''xyz00_matrixdb'' mit Datenbank-Owner ''xyz00_matrixuser''
# Eine Postgresql-Datenbank ''xyz00_matrixdb'' mit Datenbank-Owner ''xyz00_matrixuser''


Verwendete IP-Ports der Server-Dienste:
Verwendeter IP-Port für den Server-Dienst:
# Monit: localhost:32800
# Synapse: localhost:32801
# Synapse: localhost:32801


== Installation von Synapse ==
== Installation von Synapse ==


Installationsanleitung basierend auf https://github.com/matrix-org/synapse/blob/master/INSTALL.md#installing-from-source
Installationsanleitung basierend auf https://matrix-org.github.io/synapse/latest/setup/installation.html#installing-as-a-python-module-from-pypi


Als User ''xyz00-matrix" ein Python3 virtualenv erstellen
Auf Debian Buster muss ein neueres Python, z.B. Python 3.9 installiert werden, siehe [https://wiki.hostsharing.net/index.php?title=Eigenes_Python_installieren#Installation_mit_pyenv Eigenes Python mit pyenv installieren].


    mkdir -p ~/synapse
Als User ''xyz00-matrix" ein Python3 virtualenv mit Python 3.9 erstellen
    virtualenv -p python3 ~/synapse/env
    source ~/synapse/env/bin/activate
    pip install --upgrade pip
    pip install --upgrade setuptools


Synapse an sich installieren
<syntaxhighlight lang="shell">
mkdir -p ~/synapse
cd ~/synapse
pipenv install --python 3.9.18
</syntaxhighlight>


    pip install matrix-synapse
Synapse und Postgres-Dependencies installieren


Jinja2 und Postgres-Python-Bindings installieren
<syntaxhighlight lang="shell">
cd ~/synapse
pipenv shell
pipenv install matrix-synapse[postgres]
</syntaxhighlight>


    pip install jinja2 psycopg2
Initiale Konfiguration mit richtigem server-name "beispiel.de" generieren, außerdem im laufenden Betrieb keine Statistiken an Matrix.org senden


Initiale Konfiguration generieren, im laufenden Betrieb keine Statistiken an Matrix.org senden
<syntaxhighlight lang="shell">
cd ~/synapse
pipenv run python -m synapse.app.homeserver --server-name beispiel.de --config-path homeserver.yaml --generate-config --report-stats=no
</syntaxhighlight>


    cd ~/synapse
== Konfiguration von Synapse ==
    python -m synapse.app.homeserver --server-name matrix.beispiel.de --config-path homeserver.yaml --generate-config --report-stats=no
 
== Konfiguration von Synapse


In die initial generierte Konfiguration muss noch die Port- und Datenbank-Konfiguration eingetragen werden:
In die initial generierte Konfiguration muss noch die Port- und Datenbank-Konfiguration eingetragen werden:
Zeile 44: Zeile 54:
Port: Innerhalb der listener-section den Port 8008 auf 32801 (wie initial definiert) ändern, alles andere beibehalten:
Port: Innerhalb der listener-section den Port 8008 auf 32801 (wie initial definiert) ändern, alles andere beibehalten:


      - port: 32801
<syntaxhighlight lang=yaml line>
        tls: false
- port: 32801
        bind_addresses: ['::1', '127.0.0.1']
    tls: false
        type: http
    bind_addresses: ['::1', '127.0.0.1']
        x_forwarded: true
    type: http
    x_forwarded: true
</syntaxhighlight>


Postgres-Datenbank:
Postgres-Datenbank:
<syntaxhighlight lang=yaml line>
database:
    # The database engine name
    name: "psycopg2"
    # Arguments to pass to the engine
    args:
    host: "localhost"
    database: "xyz00_matrixdb"
    user: "xyz00_matrixuser"
    password: "meinPasswort"
    cp_min: 5
    cp_max: 10
</syntaxhighlight>


    database:
== Starten der Dienste  ==
      # The database engine name
      name: "psycopg2"
      # Arguments to pass to the engine
      args:
        host: "localhost"
        database: "xyz00_matrixdb"
        user: "xyz00_matrixuser"
        password: "meinPasswort"
        cp_min: 5
        cp_max: 10


== Starten der Dienste  ==
Der ''Synapse''-Dienst wird hier als Service-Unit im SystemD des Users eingetragen.


Zum Start aller notwendigen Dienste wird in dieser Anleitung ''monit'' benutzt. Hier ein Beispiel für eine Datei ''.monitrc'' (überlange Zeilen werden hier im Wiki umgebrochen)
Lege dazu die folgende Datei an: ''~/.config/systemd/user/synapse.service'' mit dem Inhalt:
<syntaxhighlight lang="ini" line>
[Unit]
Description=Synapse


Das monitpassword auf jeden Fall durch ein sicheres Passwort ersetzen:
[Service]
Type=simple
WorkingDirectory=%h/synapse
Environment=LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
ExecStart=pipenv run python -m synapse.app.homeserver --config-path=%h/synapse/homeserver.yaml


    set daemon 60
[Install]
        with start delay 120
WantedBy=default.target
    set logfile /home/pacs/xyz00/users/matrix/monit/var/monit.log
</syntaxhighlight>
    set idfile /home/pacs/xyz00/users/matrix/monit/var/monit.id
    set statefile /home/pacs/xyz00/users/matrix/monit/var/monit.state
    set mailserver localhost
    set mail-format { from: monit@matrix.beispiel.de }
    set alert matrix@matrix.beispiel.de
    set httpd port 32800 address xyz00.hostsharing.net
        allow matrix:monitpassword
    check process synapse with pidfile /home/pacs/xyz00/users/matrix/synapse/homeserver.pid
        start program "/bin/bash -c 'export VIRTUAL_ENV=$HOME/synapse/env && export PATH=$VIRTUAL_ENV/bin:$PATH && cd $HOME/synapse && synctl start'"
        stop program "/bin/bash -c '/bin/kill $( cat $HOME/synapse/homeserver.pid )'"


== Cronjobs ==
Durch Aufruf der folgenden Kommandos wird der Dienst aktiviert und gestartet:
<syntaxhighlight lang="shell" lines>
systemctl --user daemon-reload
systemctl --user enable synapse.service
systemctl --user start synapse.service
</syntaxhighlight>
== Einrichten des Apache VHost ==


''Cron'' wird für eine Aufgabe genutzt:
Die ''~/doms/matrix.beispiel.de/.htaccess'' mit dem Editor der Wahl öffnen und
* Start von monit nach einem Server Reboot
folgende Konfiguration einfügen:
<syntaxhighlight lang=apache line>
DirectoryIndex disabled
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* http://localhost:32801%{REQUEST_URI} [NE,proxy]
RequestHeader set X-Forwarded-Proto "https"
</syntaxhighlight>
== Well-Known unter beispiel.de ==


Einrichten der crontab mit ''cronttab -e''
Damit die User-Accounts das Format @user:beispiel.de haben, der Server aber unter matrix.beispiel.de erreichbar ist, müssen noch folgende zwei Dateien unter der Domain beispiel.de abgelegt werden:


HOME=/home/pacs/xyz00/users/matrix
https://beispiel.de/.well-known/matrix/server
MAILTO=matrix@matrix.beispiel.de
<syntaxhighlight lang=json line>
{
@reboot /usr/bin/monit -c $HOME/.monitrc
    "m.server": "matrix.beispiel.de:443"
}
</syntaxhighlight>


== Einrichten des Apache VHost ==
https://beispiel.de/.well-known/matrix/client
<syntaxhighlight lang=json line>
{
    "m.homeserver": {
        "base_url": "https://matrix.beispiel.de"
    },
    "m.identity_server": {
        "base_url": "https://vector.im"
    }
}
</syntaxhighlight>


Die ''~/doms/matrix.beispiel.de/.htaccess'' mit dem Editor der Wahl öffnen und
Für die muss noch der CORS-Header Access-Control-Allow-Origin "*" gesetzt werden, damit die Datei aus beliebigem Riot-Web im Browser abrufbar ist. Dazu in den Ordner .well-known/matrix/ folgende .htaccess anlegen:
folgende Konfiguration einfügen:
<syntaxhighlight lang=apache line>
<IfModule mod_headers.c>
  Header set Access-Control-Allow-Origin "*"
</IfModule>
</syntaxhighlight>


DirectoryIndex disabled
Die Dokumentation dazu findet man unter https://matrix.org/docs/spec/server_server/r0.1.2#get-well-known-matrix-server und https://matrix.org/docs/spec/client_server/r0.5.0#get-well-known-matrix-client
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* http://localhost:32801%{REQUEST_URI} [NE,proxy]
RequestHeader set X-Forwarded-Proto "https"


== Update von Synapse ==
== Update von Synapse ==


source ~/synapse/env/bin/activate
mit pipenv:
pip install -U matrix-synapse
<syntaxhighlight lang=shell>
monit restart synapse
systemctl --user stop synapse.service
cd ~/synapse
source .venv/bin/activate || pipenv shell
pipenv install update
systemctl --user start synapse.service
</syntaxhighlight>
 
oder falls Synapse mit pip verwaltet wird:
 
<syntaxhighlight lang=shell>
systemctl --user stop synapse.service
cd ~/synapse
source venv/bin/activate
pip freeze > requirements.txt
sed -i "s/==.*//g" requirements.txt
pip install -r requirements.txt --upgrade
systemctl --user start synapse.service
</syntaxhighlight>
Falls Monit verwendet wird statt systemctl:
 
<syntaxhighlight lang=shell>
monit stop synapse
#... updaten ...
monit start synapse
</syntaxhighlight>
 
Wenn die Föderation für den Synapse Server aktiviert ist, kann mit dem [https://federationtester.matrix.org/ Matrix Federation Tester] die eigene Instanz auf die laufende Version geprüft werden. Als Server nicht matrix.example.org eingeben, sondern den öffentlichen Namen, wo auch die Benutzernamen drauf laufen, z.B. example.org
 
Ansonsten ist die laufende Version auch über die URL https://matrix.example.org/_synapse/admin/v1/server_version zu erfahren.
 
== Element-Web ==
 
Element-Web ist aus Server-Seite eine rein statische html+javascript-Kombination, daher:
 
* Account und Domain anlegen (separat von der Synapse-Domain)
* [https://github.com/element-hq/element-web/releases/latest aktuelles element-web release] .tgz herunterladen
* Symlink von htdocs-ssl auf entpacktes element-web-Verzeichnis
* config.sample.json in config.json kopieren und Matrix-Homeserver-Einträge anpassen
* Piwik aus config.json entfernen
 
== SAML mit Synapse ==
 
Synapse unterstützt mit Version 1.1.0 SAML. Dazu wie folgt vorgehen:
 
Das Paket xmlsec1 muss installiert sein:
 
<syntaxhighlight lang=shell>
$ xmlsec1  --version
xmlsec1 1.2.23 (openssl)
</syntaxhighlight>
 
Das Python-Paket pysaml2 installieren
 
<syntaxhighlight lang=shell>
cd ~/synapse
pipenv shell
pipenv install pysaml2
</syntaxhighlight>
 
In der homeserver.yaml die SAML-Direktiven einkommentieren, hier mit dem Beispiel eines SAML IdP unter https://login.beispiel.de/simplesaml/saml2/idp/metadata.php:
 
<syntaxhighlight lang=yaml line>
# Once SAML support is enabled, a metadata file will be exposed at
# https://<server>:<port>/_matrix/saml2/metadata.xml, which you may be able to
# use to configure your SAML IdP with. Alternatively, you can manually configure
# the IdP to use an ACS location of
# https://<server>:<port>/_matrix/saml2/authn_response.
#
saml2_config:
    sp_config:
        # point this to the IdP's metadata. You can use either a local file or
        # (preferably) a URL.
        metadata:
        #local: ["saml2/idp.xml"]
        remote:
            - url: https://login.beispiel.de/simplesaml/saml2/idp/metadata.php
</syntaxhighlight>
Wichtig ist außerdem, dass die public_baseurl in der homeserver.yaml gesetzt ist, damit Synapse weiß, wie es erreichbar ist und dies in seine SP-Metadaten einbauen kann:
<syntaxhighlight lang=yaml line>
public_baseurl: https://matrix.beispiel.de/
</syntaxhighlight>
Die Service-Provider-Konfiguration als XML bekommt man von Synapse dann wie schon in der homeserver.yaml als Kommentar beschrieben, unter https://matrix.beispiel.de/_matrix/saml2/metadata.xml
 
Diese dann in den SAML-IdP-importieren und dann sollte der Single-Sign-On via SAML funktionieren.
 
== Federation Sender Worker für Synapse ==
 
Zur Parallelisierung bietet Synapse das Konzept "Worker" an, die spezifische Aufgaben übernehmen, damit der Hauptprozess diese nicht durchführen muss.
 
Details dazu: https://github.com/matrix-org/synapse/blob/master/docs/workers.md
 
Ein einfach einzurichtender Worker, der auch viel Last abfedert, ist der Federation Sender Worker, da das Verschicken des Federation-Traffics 10-50% der Serverlast ausmacht.
 
In der homeserver.yaml die Worker-Konfiguration aktivieren:
<syntaxhighlight lang=yaml line>
## Worker ##
worker_app: synapse.app.homeserver
daemonize: true
</syntaxhighlight>
 
und dazugehörige Listener (Abschnitt listener:) aktivieren:
<syntaxhighlight lang=yaml line>
# The TCP replication port
- port: 32892
  bind_address: '127.0.0.1'
  type: replication
# The HTTP replication port
- port: 32893
  bind_address: '127.0.0.1'
  type: http
  resources:
  - names: [replication]
</syntaxhighlight>
 
Funktionen, die Worker machen sollen, in der homeserver.yaml deaktivieren:
<syntaxhighlight lang=yaml line>
# disable federation sending here, use worker for it
send_federation: False
</syntaxhighlight>
Dann Verzeichnis synapse/workers anlegen, darin federation_sender.yaml:
<syntaxhighlight lang=yaml line>
worker_app: synapse.app.federation_sender
 
# The replication listener on the synapse to talk to.
worker_replication_host: 127.0.0.1
worker_replication_port: 32892
worker_replication_http_port: 32893
 
worker_daemonize: True
worker_pid_file: /home/pacs/xyz00/users/matrix/synapse/federation_sender.pid
worker_log_config: /home/pacs/xyz00/users/matrix/synapse/federation_sender.log.config
</syntaxhighlight>
.monitrc um worker erweitern:
<syntaxhighlight lang=shell line>
check process federation_sender with pidfile /home/pacs/xyz00/users/matrix/synapse/federation_sender.pid
    start program "/bin/bash -c 'export VIRTUAL_ENV=$HOME/synapse/env && export PATH=$VIRTUAL_ENV/bin:$PATH && cd $HOME/synapse && synctl -w workers/federation_sender.yaml start'"
    stop program "/bin/bash -c '/bin/kill $( cat $HOME/synapse/federation_sender.pid )'"
</syntaxhighlight>
Monit neu laden und synapse und federation_sender neustarten:
 
<syntaxhighlight lang=shell>
monit reload
monit restart all
</syntaxhighlight>
 
Nach Updates ebenfalls immer Hauptprozess und alle Worker neustarten
 
<syntaxhighlight lang=shell>
monit restart all
</syntaxhighlight>
 
== Sliding Sync Proxy ==
Zum Zeitpunkt dieser Anleitung werden aktiv neue Element Anwendungen (Element X) und ein neues Syncverfahren entwickelt um Matrix performanter und weniger ressourcenhungrig zu machen. Bei stärkerer Matrix Nutzung können die neuen Anwendungen besonders mobil schon eine große Entlastung sein.
 
<strong>Ende 2024 wurden grundlegende Funktionen direkt in Synapse implementiert. Der Proxy wird nicht länger weiterentwickelt und sollte deinstalliert werden (nicht vergessen die .well-known zurück zu ändern).</strong> Auch der 3rdparty Server [[Conduit]] bringt nativ Support für Sliding Sync.</strong>
 
== Links ==


== TODO ==
* https://matrix.org/docs/projects/server/synapse
* https://github.com/element-hq/synapse
* https://github.com/element-hq/synapse/blob/master/INSTALL.md
* https://github.com/matrix-org/sliding-sync
* https://matrix.org/docs/spec/
* https://www.hostsharing.net/loesungen/matrix/
* https://codeberg.org/tpokorra/hs.ansible/src/branch/main/playbooks/synapse
* https://codeberg.org/tpokorra/hs.ansible/src/branch/main/playbooks/element


* riot-web?
[[Kategorie:Messenger]]
* SimpleSAML mit Wordpress-Userdb
[[Kategorie:Software]]
* Synapse mit pysaml gegen SimpleSAML
[[Kategorie:Eigene Daemons]]
[[Kategorie:Installationsanleitungen]]
[[Kategorie:Ansible Playbook]]

Aktuelle Version vom 18. November 2024, 18:28 Uhr

Der Matrix Server Synapse, der sogenannte 'Homeserver', ist aktuell die einzige vollständige serverseitige Implementierung des Matrix-Protokolls.


Work in Progress

Leider funktioniert die Server-zu-Server-Kommunikation von Synapse hinter dem Apache-Proxy mit den genannten Rewrite-Rules nicht. Bitten Sie dazu den Service, Ihren Apache VHost individuell für den Matrix Server anzupassen.


Synapse wird bei Hostsharing als eigener Daemon betrieben. Der Betrieb ist im Shared Hosting anmelde- und kostenpflichtig. Daher empfehlen wir für den Betrieb einen Managed Server.

Diese Anleitung beschreibt, wie man den Matrix-Homeserver Synapse auf der Managed Hosting Plattform von Hostsharing installieren kann. Dabei sind die User-IDs nach dem Schema @user:beispiel.de aufgebaut, der Homeserver an sich ist unter matrix.beispiel.de erreichbar.

Vorbereitungen

Mit Hilfe von HSAdmin werden angelegt:

  1. Ein User als Service-User mit /bin/bash als Shell, zum Beispiel Beispiel: xyz00-matrix
  2. Eine Domain mit xyz00-matrix als Domain-Administrator, zum Beispiel matrix.beispiel.de
  3. Einen Postgresql-User xyz00_matrixuser mit Passwort meinPasswort
  4. Eine Postgresql-Datenbank xyz00_matrixdb mit Datenbank-Owner xyz00_matrixuser

Verwendeter IP-Port für den Server-Dienst:

  1. Synapse: localhost:32801

Installation von Synapse

Installationsanleitung basierend auf https://matrix-org.github.io/synapse/latest/setup/installation.html#installing-as-a-python-module-from-pypi

Auf Debian Buster muss ein neueres Python, z.B. Python 3.9 installiert werden, siehe Eigenes Python mit pyenv installieren.

Als User xyz00-matrix" ein Python3 virtualenv mit Python 3.9 erstellen

mkdir -p ~/synapse
cd ~/synapse
pipenv install --python 3.9.18

Synapse und Postgres-Dependencies installieren

cd ~/synapse
pipenv shell
pipenv install matrix-synapse[postgres]

Initiale Konfiguration mit richtigem server-name "beispiel.de" generieren, außerdem im laufenden Betrieb keine Statistiken an Matrix.org senden

cd ~/synapse
pipenv run python -m synapse.app.homeserver --server-name beispiel.de --config-path homeserver.yaml --generate-config --report-stats=no

Konfiguration von Synapse

In die initial generierte Konfiguration muss noch die Port- und Datenbank-Konfiguration eingetragen werden:

Port: Innerhalb der listener-section den Port 8008 auf 32801 (wie initial definiert) ändern, alles andere beibehalten:

- port: 32801
    tls: false
    bind_addresses: ['::1', '127.0.0.1']
    type: http
    x_forwarded: true

Postgres-Datenbank:

database:
    # The database engine name
    name: "psycopg2"
    # Arguments to pass to the engine
    args:
    host: "localhost"
    database: "xyz00_matrixdb"
    user: "xyz00_matrixuser"
    password: "meinPasswort"
    cp_min: 5
    cp_max: 10

Starten der Dienste

Der Synapse-Dienst wird hier als Service-Unit im SystemD des Users eingetragen.

Lege dazu die folgende Datei an: ~/.config/systemd/user/synapse.service mit dem Inhalt:

[Unit]
Description=Synapse

[Service]
Type=simple
WorkingDirectory=%h/synapse
Environment=LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
ExecStart=pipenv run python -m synapse.app.homeserver --config-path=%h/synapse/homeserver.yaml

[Install]
WantedBy=default.target

Durch Aufruf der folgenden Kommandos wird der Dienst aktiviert und gestartet:

systemctl --user daemon-reload
systemctl --user enable synapse.service
systemctl --user start synapse.service

Einrichten des Apache VHost

Die ~/doms/matrix.beispiel.de/.htaccess mit dem Editor der Wahl öffnen und folgende Konfiguration einfügen:

DirectoryIndex disabled
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* http://localhost:32801%{REQUEST_URI} [NE,proxy]
RequestHeader set X-Forwarded-Proto "https"

Well-Known unter beispiel.de

Damit die User-Accounts das Format @user:beispiel.de haben, der Server aber unter matrix.beispiel.de erreichbar ist, müssen noch folgende zwei Dateien unter der Domain beispiel.de abgelegt werden:

https://beispiel.de/.well-known/matrix/server

{
    "m.server": "matrix.beispiel.de:443"
}

https://beispiel.de/.well-known/matrix/client

{
    "m.homeserver": {
        "base_url": "https://matrix.beispiel.de"
    },
    "m.identity_server": {
        "base_url": "https://vector.im"
    }
}

Für die muss noch der CORS-Header Access-Control-Allow-Origin "*" gesetzt werden, damit die Datei aus beliebigem Riot-Web im Browser abrufbar ist. Dazu in den Ordner .well-known/matrix/ folgende .htaccess anlegen:

<IfModule mod_headers.c>
  Header set Access-Control-Allow-Origin "*"
</IfModule>

Die Dokumentation dazu findet man unter https://matrix.org/docs/spec/server_server/r0.1.2#get-well-known-matrix-server und https://matrix.org/docs/spec/client_server/r0.5.0#get-well-known-matrix-client

Update von Synapse

mit pipenv:

systemctl --user stop synapse.service
cd ~/synapse
source .venv/bin/activate || pipenv shell
pipenv install update
systemctl --user start synapse.service

oder falls Synapse mit pip verwaltet wird:

systemctl --user stop synapse.service
cd ~/synapse
source venv/bin/activate
pip freeze > requirements.txt
sed -i "s/==.*//g" requirements.txt
pip install -r requirements.txt --upgrade
systemctl --user start synapse.service

Falls Monit verwendet wird statt systemctl:

monit stop synapse
#... updaten ...
monit start synapse

Wenn die Föderation für den Synapse Server aktiviert ist, kann mit dem Matrix Federation Tester die eigene Instanz auf die laufende Version geprüft werden. Als Server nicht matrix.example.org eingeben, sondern den öffentlichen Namen, wo auch die Benutzernamen drauf laufen, z.B. example.org

Ansonsten ist die laufende Version auch über die URL https://matrix.example.org/_synapse/admin/v1/server_version zu erfahren.

Element-Web

Element-Web ist aus Server-Seite eine rein statische html+javascript-Kombination, daher:

  • Account und Domain anlegen (separat von der Synapse-Domain)
  • aktuelles element-web release .tgz herunterladen
  • Symlink von htdocs-ssl auf entpacktes element-web-Verzeichnis
  • config.sample.json in config.json kopieren und Matrix-Homeserver-Einträge anpassen
  • Piwik aus config.json entfernen

SAML mit Synapse

Synapse unterstützt mit Version 1.1.0 SAML. Dazu wie folgt vorgehen:

Das Paket xmlsec1 muss installiert sein:

$ xmlsec1  --version
xmlsec1 1.2.23 (openssl)

Das Python-Paket pysaml2 installieren

cd ~/synapse
pipenv shell
pipenv install pysaml2

In der homeserver.yaml die SAML-Direktiven einkommentieren, hier mit dem Beispiel eines SAML IdP unter https://login.beispiel.de/simplesaml/saml2/idp/metadata.php:

# Once SAML support is enabled, a metadata file will be exposed at
# https://<server>:<port>/_matrix/saml2/metadata.xml, which you may be able to 
# use to configure your SAML IdP with. Alternatively, you can manually configure
# the IdP to use an ACS location of
# https://<server>:<port>/_matrix/saml2/authn_response.
#
saml2_config:
    sp_config:
        # point this to the IdP's metadata. You can use either a local file or
        # (preferably) a URL.
        metadata:
        #local: ["saml2/idp.xml"]
        remote:
            - url: https://login.beispiel.de/simplesaml/saml2/idp/metadata.php

Wichtig ist außerdem, dass die public_baseurl in der homeserver.yaml gesetzt ist, damit Synapse weiß, wie es erreichbar ist und dies in seine SP-Metadaten einbauen kann:

public_baseurl: https://matrix.beispiel.de/

Die Service-Provider-Konfiguration als XML bekommt man von Synapse dann wie schon in der homeserver.yaml als Kommentar beschrieben, unter https://matrix.beispiel.de/_matrix/saml2/metadata.xml

Diese dann in den SAML-IdP-importieren und dann sollte der Single-Sign-On via SAML funktionieren.

Federation Sender Worker für Synapse

Zur Parallelisierung bietet Synapse das Konzept "Worker" an, die spezifische Aufgaben übernehmen, damit der Hauptprozess diese nicht durchführen muss.

Details dazu: https://github.com/matrix-org/synapse/blob/master/docs/workers.md

Ein einfach einzurichtender Worker, der auch viel Last abfedert, ist der Federation Sender Worker, da das Verschicken des Federation-Traffics 10-50% der Serverlast ausmacht.

In der homeserver.yaml die Worker-Konfiguration aktivieren:

## Worker ##
worker_app: synapse.app.homeserver
daemonize: true

und dazugehörige Listener (Abschnitt listener:) aktivieren:

# The TCP replication port
- port: 32892
  bind_address: '127.0.0.1'
  type: replication
# The HTTP replication port
- port: 32893
  bind_address: '127.0.0.1'
  type: http
  resources:
   - names: [replication]

Funktionen, die Worker machen sollen, in der homeserver.yaml deaktivieren:

# disable federation sending here, use worker for it
send_federation: False

Dann Verzeichnis synapse/workers anlegen, darin federation_sender.yaml:

worker_app: synapse.app.federation_sender

# The replication listener on the synapse to talk to.
worker_replication_host: 127.0.0.1
worker_replication_port: 32892
worker_replication_http_port: 32893

worker_daemonize: True
worker_pid_file: /home/pacs/xyz00/users/matrix/synapse/federation_sender.pid
worker_log_config: /home/pacs/xyz00/users/matrix/synapse/federation_sender.log.config

.monitrc um worker erweitern:

check process federation_sender with pidfile /home/pacs/xyz00/users/matrix/synapse/federation_sender.pid
    start program "/bin/bash -c 'export VIRTUAL_ENV=$HOME/synapse/env && export PATH=$VIRTUAL_ENV/bin:$PATH && cd $HOME/synapse && synctl -w workers/federation_sender.yaml start'"
    stop program "/bin/bash -c '/bin/kill $( cat $HOME/synapse/federation_sender.pid )'"

Monit neu laden und synapse und federation_sender neustarten:

monit reload
monit restart all

Nach Updates ebenfalls immer Hauptprozess und alle Worker neustarten

monit restart all

Sliding Sync Proxy

Zum Zeitpunkt dieser Anleitung werden aktiv neue Element Anwendungen (Element X) und ein neues Syncverfahren entwickelt um Matrix performanter und weniger ressourcenhungrig zu machen. Bei stärkerer Matrix Nutzung können die neuen Anwendungen besonders mobil schon eine große Entlastung sein.

Ende 2024 wurden grundlegende Funktionen direkt in Synapse implementiert. Der Proxy wird nicht länger weiterentwickelt und sollte deinstalliert werden (nicht vergessen die .well-known zurück zu ändern). Auch der 3rdparty Server Conduit bringt nativ Support für Sliding Sync.

Links