Matrix Server · 25 min read · Oct 27, 2025

So installieren und erstellen Sie einen Chat-Server mit Matrix Synapse und Element auf Rocky Linux 9

Matrix ist ein offener Standard für dezentrale und Ende-zu-Ende-verschlüsselte Kommunikation. Es ist eine Sammlung von Servern und Diensten, die über eine standardisierte API miteinander kommunizieren, die in Echtzeit synchronisiert. Es verwendet Homeserver, um Kontoinformationen und Chatverlauf zu speichern. Wenn ein Homeserver ausfällt, können andere Server aufgrund der Natur der Dezentralisierung weiterhin ohne Probleme kommunizieren. Sie können einen von jemand anderem gehosteten Matrix-Homeserver verwenden oder Ihren eigenen hosten, um die Kontrolle über Ihre Daten zu behalten.

In diesem Tutorial lernen Sie, wie Sie einen Chat-Server mit Synapse installieren und erstellen, einer Homeserver-Implementierung von Matrix. Element ist ein Matrix-Webclient, der mit dem Matrix React SDK erstellt wurde. Dies ermöglicht es Ihnen, Matrix-Chat im Web anzubieten. Sie können den Server auch mit jedem anderen Matrix-Client verwenden. Wir werden auch den Coturn-Server installieren, um Sprach- und Videoanrufe zu ermöglichen. Der Coturn-Dienst ist optional, wenn Sie nicht daran interessiert sind, ihn zu verwenden.

Voraussetzungen

  1. Ein Server, der Debian 12 ausführt.
  2. Ein Nicht-Sudo-Benutzer mit Root-Rechten.
  3. Die unkomplizierte Firewall (UFW) ist aktiviert und läuft.
  4. Vollständig qualifizierte Domainnamen (FQDN) für Matrix, Element und Coturn, die auf Ihren Server verweisen. Wir werden matrix.example.com, element.example.com und coturn.example.com für die drei Dienste verwenden.
  5. Stellen Sie sicher, dass alles aktualisiert ist. $ sudo dnf update
  • Einige Pakete, die Ihr System benötigt. $ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y Einige dieser Pakete sind möglicherweise bereits auf Ihrem System installiert.

Schritt 1 - Firewall konfigurieren

Bevor Sie Pakete installieren, besteht der erste Schritt darin, die Firewall zu konfigurieren, um die Ports für HTTP, HTTPS und Synapse zu öffnen. Rocky Linux verwendet die Firewalld-Firewall. Überprüfen Sie den Status der Firewall.

$ sudo firewall-cmd --state
running

Die Firewall arbeitet mit verschiedenen Zonen, und die öffentliche Zone ist die Standardzone, die wir verwenden werden. Listen Sie alle Dienste und Ports auf, die in der Firewall aktiv sind.

$ sudo firewall-cmd --zone=public --list-all

Es sollte die folgende Ausgabe anzeigen.

public
  target: default
  icmp-block-inversion: no
  interfaces: enp1s0
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

Öffnen Sie die HTTP-, HTTPS- und Synapse-Ports in der Firewall.

$ sudo firewall-cmd --zone=public --add-port=8448/tcp
$ sudo firewall-cmd --zone=public --add-service=http
$ sudo firewall-cmd --zone=public --add-service=https

Überprüfen Sie den Status der Firewall erneut.

$ sudo firewall-cmd --zone=public --list-all

Sie sollten eine ähnliche Ausgabe sehen.

public
  target: default
  icmp-block-inversion: no
  interfaces: enp1s0
  sources: 
  services: cockpit dhcpv6-client http https ssh
  ports: 8448/tcp
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

Machen Sie alle Änderungen dauerhaft und laden Sie die Firewall neu, um die Änderungen zu aktivieren.

$ sudo firewall-cmd --runtime-to-permanent
$ sudo firewall-cmd --reload

Schritt 2 - PostgreSQL installieren und konfigurieren

Rocky Linux 9 wird standardmäßig mit PostgreSQL 13 ausgeliefert. Wir werden PostgreSQL 16 aus dem offiziellen Repository verwenden.

Installieren Sie das PostgreSQL RPM-Repository.

$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Deaktivieren Sie das integrierte PostgreSQL-Modul.

$ sudo dnf -qy module disable postgresql

Jetzt können Sie PostgreSQL mit dem folgenden Befehl installieren.

$ sudo dnf install -y postgresql16-server postgresql16-contrib postgresql16-devel

sudo dnf install postgresql16-devel

export PATH=$PATH:/usr/pgsql-16/bin

Das postgresql-contrib-Paket enthält einige zusätzliche Dienstprogramme.

Überprüfen Sie die Version.

$ psql --version
psql (PostgreSQL) 16.1

Initialisieren Sie die PostgreSQL-Datenbank.

$ sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
Initializing database ... OK

Aktivieren Sie den PostgreSQL-Dienst.

$ sudo systemctl enable postgresql-16

Starten Sie den PostgreSQL-Dienst.

$ sudo systemctl start postgresql-16

Überprüfen Sie den Status des PostgreSQL-Dienstes.

$ sudo systemctl status postgresql-16
? postgresql-16.service - PostgreSQL 16-Datenbankserver
     Loaded: loaded (/usr/lib/systemd/system/postgresql-16.service; enabled; preset: disabled)
     Active: active (running) since Tue 2024-01-30 11:55:26 UTC; 10s ago
       Docs: https://www.postgresql.org/docs/16/static/
    Process: 9610 ExecStartPre=/usr/pgsql-16/bin/postgresql-16-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
   Main PID: 9615 (postgres)
      Tasks: 7 (limit: 12225)
     Memory: 17.4M
        CPU: 98ms
     CGroup: /system.slice/postgresql-16.service
             ??9615 /usr/pgsql-16/bin/postgres -D /var/lib/pgsql/16/data/
             ??9616 "postgres: logger "
             ??9617 "postgres: checkpointer "
             ??9618 "postgres: background writer "
             ??9620 "postgres: walwriter "
             ??9621 "postgres: autovacuum launcher "
             ??9622 "postgres: logical replication launcher "

Jan 30 11:55:26 matrix.example.com systemd[1]: Starting PostgreSQL 16-Datenbankserver...
Jan 30 11:55:26 matrix.example.com postgres[9615]: 2024-01-30 11:55:26.482 UTC [9615] LOG:  redirecting log output to logging collector process
Jan 30 11:55:26 matrix.example.com postgres[9615]: 2024-01-30 11:55:26.482 UTC [9615] HINT:  Future log output will appear in directory "log".
Jan 30 11:55:26 matrix.example.com systemd[1]: Started PostgreSQL 16-Datenbankserver.

Sie können sehen, dass der Dienst standardmäßig aktiviert und ausgeführt wird.

Melden Sie sich beim postgres-Systemkonto an.

$ sudo -su postgres

Erstellen Sie einen neuen Datenbankbenutzer und eine Datenbank für PostgreSQL. Sie werden bei der Erstellung des Benutzers nach einem Passwort gefragt.

$ createuser --pwprompt synapse
$ createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse synapsedb

Verlassen Sie das postgres-Konto.

$ exit

Schritt 3 - Matrix Synapse installieren

Matrix Synapse hat kein vorgefertigtes Paket für CentOS-basierte Distributionen wie Rocky Linux. Daher werden wir es als Python-Modul von PyPI installieren.

Der erste Schritt besteht darin, die Voraussetzungen zu installieren, die erforderlich sind, damit Synapse funktioniert. Wir benötigen auch das EPEL-Repository, das das Paket python3-virtualenv enthält.

$ sudo dnf install epel-release
$ sudo dnf install --enablerepo=crb libtiff-devel libjpeg-devel libzip-devel \
                 freetype-devel libwebp-devel libxml2-devel libxslt-devel \
                 libpq-devel  python3-virtualenv libffi-devel openssl-devel \
                 python3-devel libicu-devel
$ sudo dnf groupinstall "Development Tools"
$ sudo dnf install postgresql16-devel

Erstellen Sie ein Verzeichnis für Synapse.

$ mkdir -p ~/synapse

Erstellen Sie eine Python-virtuelle Umgebung in dem genannten Verzeichnis.

$ virtualenv -p python3 ~/synapse/env

Aktivieren Sie die virtuelle Umgebung.

$ source ~/synapse/env/bin/activate

Stellen Sie sicher, dass Sie die neueste Version von pip und setuptools haben.

(env) $ pip install --upgrade pip
(env) $ pip install --upgrade setuptools

Installieren Sie Matrix Synapse.

(env) $ pip install "matrix-synapse[postgres]"

Dies wird Synapse von PyPI herunterladen und installieren, zusammen mit den Python-Bibliotheken, die es in einer virtuellen Umgebung im ~/synapse/env-Ordner verwendet. Es wird auch die PostgreSQL-Python-Bibliothek installieren, die erforderlich ist, damit Synapse mit dem PostgreSQL-Server verbunden werden kann. Der obige Befehl ist eine Kombination der Befehle pip install matrix-synapse und pip install psycopg2.

Der nächste Schritt besteht darin, eine Konfigurationsdatei mit einigen grundlegenden Einstellungen zu generieren. Wechseln Sie in das Synapse-Verzeichnis.

(env) $ cd ~/synapse

Führen Sie den folgenden Befehl aus, um die Konfigurationsdatei zu generieren.

(env) $ python -m synapse.app.homeserver \
    --server-name matrix.example.com \
    --config-path homeserver.yaml \
    --generate-config \
    --report-stats=[yes|no]

Der Wert der Variablen --server-name ist ein Teil Ihrer Matrix-ID. Geben Sie Ihren Matrix-Domainnamen als Wert ein. Dies wird als Ihre Homeserver-Adresse fungieren.

Sie können wählen, ob Sie anonymisierte Statistiken über Ihren Homeserver an Matrix zurücksenden möchten oder nicht, über die Variable --report-stats. Wählen Sie yes oder no nach Ihrem Ermessen.

Sie erhalten die folgende Ausgabe.

Generating config file homeserver.yaml
Generating log config file /home/navjot/synapse/matrix.example.com.log.config which will log to /home/navjot/synapse/homeserver.log
Generating signing key file /home/navjot/synapse/matrix.example.com.signing.key
A config file has been generated in 'homeserver.yaml' for server name 'matrix.example.com'. Please review this file and customise it to your needs.

Sie können diese Einstellungen später in der Datei ~/synapse/homeserver.yaml oder /home//synapse/homeserver.yaml ändern. Die von dem obigen Befehl generierten Schlüssel ermöglichen es Ihrem Homeserver, sich gegenüber anderen Homeservern zu identifizieren.

Es ist Zeit, den Matrix-Server zu starten. Stellen Sie sicher, dass Sie sich im Synapse-Verzeichnis befinden und die virtuelle Umgebung aktiv ist.

Starten Sie den Homeserver.

(env) $ synctl start

Sie sollten eine ähnliche Ausgabe sehen.

This server is configured to use 'matrix.org' as its trusted key server via the
'trusted_key_servers' config option. 'matrix.org' is a good choice for a key
server since it is long-lived, stable and trusted. However, some admins may
wish to use another server for this purpose.

To suppress this warning and continue using 'matrix.org', admins should set
'suppress_key_server_warning' to 'true' in homeserver.yaml.
--------------------------------------------------------------------------------
started synapse.app.homeserver(homeserver.yaml)

Um den Server zu stoppen, führen Sie den folgenden Befehl aus.

(env) $ synctl stop

Deaktivieren Sie die virtuelle Umgebung.

(env) $ deactivate

Schritt 4 - Nginx installieren

Für die Produktionsumgebung wird empfohlen, den Synapse-Server über einen Nginx-Proxy auszuführen.

Rocky Linux 9 wird mit einer älteren Version von Nginx ausgeliefert. Sie müssen das offizielle Nginx-Repository verwenden, um die neueste Version zu installieren.

Erstellen und öffnen Sie die Datei /etc/yum.repos.d/nginx.repo zur Bearbeitung.

$ sudo nano /etc/yum.repos.d/nginx.repo

Fügen Sie den folgenden Code ein.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Sobald Sie fertig sind, speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Wir werden das Nginx-Mainline installieren, also aktivieren Sie das Paket dafür.

$ sudo dnf config-manager --enable nginx-mainline

Installieren Sie Nginx.

$ sudo dnf install nginx -y

Überprüfen Sie die Installation.

$ nginx -v
nginx version: nginx/1.25.3

Aktivieren und starten Sie den Nginx-Serverdienst.

$ sudo systemctl enable nginx --now

Überprüfen Sie den Status des Dienstes.

$ sudo systemctl status nginx
? nginx.service - nginx - Hochleistungs-Webserver
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
     Active: active (running) since Tue 2024-01-30 12:50:34 UTC; 4s ago
       Docs: http://nginx.org/en/docs/
    Process: 10810 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 10811 (nginx)
      Tasks: 3 (limit: 12225)
     Memory: 3.1M
        CPU: 24ms
     CGroup: /system.slice/nginx.service
             ??10811 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??10812 "nginx: worker process"
             ??10813 "nginx: worker process"

Schritt 5 - SSL installieren

Wir müssen Certbot installieren, um das SSL-Zertifikat zu generieren. Wir werden dafür den Snapd-Paketinstaller verwenden. Da Rocky Linux ihn nicht mitliefert, installieren Sie den Snapd-Installer. Er benötigt das EPEL (Extra Packages for Enterprise Linux)-Repository, um zu funktionieren. Da wir es jedoch bereits in Schritt 3 installiert haben, können wir direkt fortfahren.

Installieren Sie das Snapd-Paket.

$ sudo dnf install snapd -y

Aktivieren und starten Sie den Snap-Dienst.

$ sudo systemctl enable snapd --now

Installieren Sie das Snap-Core-Paket und stellen Sie sicher, dass Ihre Version von Snapd auf dem neuesten Stand ist.

$ sudo snap install core
$ sudo snap refresh core

Erstellen Sie die erforderlichen Links, damit Snapd funktioniert.

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

Installieren Sie Certbot.

$ sudo snap install --classic certbot

Verwenden Sie den folgenden Befehl, um sicherzustellen, dass der Certbot-Befehl ausgeführt werden kann, indem Sie einen symbolischen Link zum Verzeichnis /usr/bin erstellen.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Überprüfen Sie die Certbot-Version.

$ certbot --version
certbot 2.8.0

Führen Sie den folgenden Befehl aus, um ein SSL-Zertifikat zu generieren.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d matrix.example.com

Der obige Befehl lädt ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/matrix.example.com auf Ihrem Server herunter.

Generieren Sie ein Diffie-Hellman-Gruppen-Zertifikat.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Überprüfen Sie den Zeitplan des Certbot-Erneuerungsdienstes.

$ systemctl list-timers

Sie finden snap.certbot.renew.service als einen der Dienste, die geplant sind.

NEXT                        LEFT         LAST                        PASSED      UNIT                         ACTIVATES                   ----------------------------------------------------------------------------------------------------------------------------------  
Tue 2024-01-30 14:37:50 UTC 29min left   Tue 2024-01-30 13:05:13 UTC 1h 3min ago dnf-makecache.timer          dnf-makecache.service
Tue 2024-01-30 15:13:00 UTC 1h 4min left -                           -           snap.certbot.renew.timer     snap.certbot.renew.service
Wed 2024-01-31 00:00:00 UTC 9h left      Tue 2024-01-30 06:35:44 UTC 7h ago      logrotate.timer              logrotate.service

Führen Sie einen Testlauf des Prozesses durch, um zu überprüfen, ob die SSL-Erneuerung einwandfrei funktioniert.

$ sudo certbot renew --dry-run

Wenn Sie keine Fehler sehen, sind Sie bereit. Ihr Zertifikat wird automatisch erneuert.

Schritt 6 - SELinux konfigurieren

SELinux verhindert, dass Sie einen Systemdienst ausführen, dessen Binärdatei sich im Home-Verzeichnis eines Benutzers befindet. Aus diesem Grund wird, wenn wir eine Dienstdatei für Synapse erstellen, SELinux dies blockieren. Um das Problem zu umgehen, müssen wir den folgenden Befehl ausführen, um zuzulassen, dass die Python-Binärdatei als Systemdienst ausgeführt wird.

$ sudo chcon -R -t bin_t /home/username/synapse/env/bin/python

Wenden Sie die Richtlinie an, um Verbindungen zu externen Hosts zuzulassen.

$ sudo setsebool -P httpd_can_network_connect 1

Wenden Sie die Richtlinie an, um Nginx den Zugriff auf PostgreSQL zu ermöglichen.

$ sudo setsebool -P httpd_can_network_connect_db 1

Schritt 7 - Matrix Systemd-Dienst erstellen

Der Status des Synapse-Dienstes wird nach einem Neustart nicht gespeichert, was bedeutet, dass Sie den Server manuell starten müssen, wenn Sie den Server neu starten. Um dieses Problem zu umgehen, müssen wir die Systemd-Datei dafür erstellen.

Bevor Sie damit fortfahren, stellen Sie sicher, dass der Synapse-Dienst gestoppt ist.

$ cd ~/synapse
$ source env/bin/activate
(env) $ synctl stop
(env) $ deactivate

Erstellen und öffnen Sie die Datei matrix-synapse.service im Verzeichnis /etc/systemd/system/ zur Bearbeitung.

$ sudo nano /etc/systemd/system/matrix-synapse.service

Fügen Sie den folgenden Code ein. Ersetzen Sie die Variable username durch Ihren Linux-Systembenutzer, unter dem Sie Synapse installiert haben.

# Dies setzt voraus, dass Synapse von einem Benutzer mit dem Namen username installiert wurde.
# Dies setzt voraus, dass Synapse in einer virtuellen Umgebung im
# Home-Verzeichnis des Benutzers installiert wurde: `/home/username/synapse/env`.

[Unit]
Description=Synapse Matrix homeserver
After=postgresql-16.service

[Service]
Type=notify
NotifyAccess=main
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-abort

WorkingDirectory=/home/username/synapse
ExecStart=/home/username/synapse/env/bin/python -m synapse.app.homeserver --config-path=/home/username/synapse/homeserver.yaml
SyslogIdentifier=matrix-synapse

# Passen Sie den Cache-Faktor bei Bedarf an
# Environment=SYNAPSE_CACHE_FACTOR=2.0

[Install]
WantedBy=multi-user.target

Sobald Sie fertig sind, speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Laden Sie den Dienstdaemon neu.

$ sudo systemctl daemon-reload

Aktivieren Sie den Matrix Synapse-Dienst.

$ sudo systemctl enable matrix-synapse

Starten Sie den Matrix Synapse-Dienst.

$ sudo systemctl start matrix-synapse

Überprüfen Sie den Dienststatus.

$ sudo systemctl status matrix-synapse

Sie sollten die folgende Ausgabe sehen.

? matrix-synapse.service - Synapse Matrix homeserver
     Loaded: loaded (/etc/systemd/system/matrix-synapse.service; enabled; preset: disabled)
     Active: active (running) since Tue 2024-01-30 14:20:20 UTC; 5s ago
   Main PID: 14687 (python)
      Tasks: 8 (limit: 12225)
     Memory: 77.6M
        CPU: 3.527s
     CGroup: /system.slice/matrix-synapse.service
             ??14687 /home/navjot/synapse/env/bin/python -m synapse.app.homeserver --config-path=/home/navjot/synapse/homeserver.yaml

Jan 30 14:20:16 matrix.example.com systemd[1]: Starting Synapse Matrix homeserver...
Jan 30 14:20:19 matrix.example.com matrix-synapse[14687]: This server is configured to use 'matrix.org' as its trusted key server via the
Jan 30 14:20:19 matrix.example.com matrix-synapse[14687]: 'trusted_key_servers' config option. 'matrix.org' is a good choice for a key
Jan 30 14:20:19 matrix.example.com matrix-synapse[14687]: server since it is long-lived, stable and trusted. However, some admins may
Jan 30 14:20:19 matrix.example.com matrix-synapse[14687]: wish to use another server for this purpose.
Jan 30 14:20:19 matrix.example.com matrix-synapse[14687]: To suppress this warning and continue using 'matrix.org', admins should set
Jan 30 14:20:19 matrix.example.com matrix-synapse[14687]: 'suppress_key_server_warning' to 'true' in homeserver.yaml.
Jan 30 14:20:19 matrix.example.com matrix-synapse[14687]: --------------------------------------------------------------------------------
Jan 30 14:20:20 matrix.example.com systemd[1]: Started Synapse Matrix homeserver.

Schritt 8 - Matrix Synapse konfigurieren

Bevor Sie fortfahren, erstellen Sie zuerst einen geheimen Registrierungsschlüssel. Der Schlüssel sollte gesichert werden, da er es jedem ermöglicht, einen neuen Benutzer zu registrieren, auch wenn die Registrierung deaktiviert ist.

$ echo "registration_shared_secret: '$(cat /dev/urandom | tr -cd '[:alnum:]' | fold -w 256 | head -n 1)'"
registration_shared_secret: '1y75ja0RUxvbWcS6SdZhakenukUwHHEjOXWC9Mu3FpO0QenOnpKRsc6NBZSxuzPcHYsOEuIQziwVjSZcP87dlWK4ZkIGYniurMqNsCYL4xg5xXs4bJDuTJH2CUXab4U9liv399lmkIZFaMpJCLxV9lVWB9mKHILYsjeLgGY5wAARv1SiK07bFsQOwKJGFqIvsUXmxymx5QCNDzTHw8R4ShqZ7elnnZrbdYk4r2f7qogERNHvQaRV7IEYUIOtMhVP'

Kopieren Sie die Ausgabe der obigen Zeile und speichern Sie sie.

Sie können den Matrix-Server über die Datei /home/username/synapse/homeserver.yaml konfigurieren. Öffnen Sie sie zur Bearbeitung.

$ nano ~/synapse/homeserver.yaml

Fügen Sie die Ausgabe des Registrierungsschlüssels am Ende der Datei ein.

Standardmäßig ist Synapse so konfiguriert, dass es die SQLite-Datenbank verwendet. Wir müssen sie bearbeiten, um die PostgreSQL-Anmeldeinformationen hinzuzufügen.

Suchen Sie den folgenden Abschnitt in der Datei und kommentieren Sie ihn aus, wie gezeigt.

#database:
#  name: sqlite3
#  args:
#    database: /home/navjot/synapse/homeserver.db

Fügen Sie den folgenden Abschnitt darunter hinzu. Ersetzen Sie das Feld your-password durch das PostgreSQL-Benutzerpasswort, das Sie in Schritt 3 erstellt haben. Ersetzen Sie localhost durch die IP-Adresse Ihres Servers, wenn Sie die Datenbank woanders hosten.

database:
  name: psycopg2
  args:
    user: synapse
    password: 'your-password'
    database: synapsedb
    host: localhost
    cp_min: 5
    cp_max: 10

Standardmäßig aktiviert Synapse Anwesenheitsindikatoren, die anzeigen, ob eine Person online ist. Dies kann zu einer hohen CPU-Auslastung führen, daher können Sie es deaktivieren. Fügen Sie die folgende Zeile am Ende hinzu.

presence:
  enabled: false

Sobald Sie fertig sind, speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Erstellen Sie einen neuen Matrix-Benutzer. Sie werden nach Ihrem Benutzernamen und Passwort gefragt. Da dies der erste Benutzer ist, den wir erstellen, geben Sie yes ein, wenn Sie gefragt werden, ob Sie den Benutzer zum Administrator machen möchten. Sie müssen die virtuelle Umgebung aktivieren, um den Benutzer zu erstellen.

$ cd ~/synapse
$ source env/bin/activate
(env) $ register_new_matrix_user -c homeserver.yaml http://localhost:8008
New user localpart [navjot]: navjot
Password: 
Confirm password: 
Make admin [no]: yes
Sending registration request...
Success!
(env) $ deactivate

Sie können sehen, dass wir im obigen Befehl den Port 8008 verwendet haben. Das liegt daran, dass es der Standardport ist, auf dem Matrix Synapse lauscht.

Standardmäßig ist die Registrierung neuer Benutzer deaktiviert, was bedeutet, dass Sie jeden Benutzer manuell wie oben registrieren müssen. Wenn Sie öffentliche Registrierungen öffnen möchten, können Sie dies tun, indem Sie die Datei homeserver.yaml bearbeiten.

Öffnen Sie sie erneut zur Bearbeitung.

$ nano ~/synapse/homeserver.yaml

Fügen Sie die folgende Zeile am Ende hinzu.

enable_registration: true

Standardmäßig erlaubt Synapse keine Registrierungen ohne E-Mail-Verifizierung. Um die E-Mail-Verifizierung zu aktivieren, fügen Sie die folgenden Zeilen ein.

registrations_require_3pid:
  - email

email:
  smtp_host: mail.example.com
  smtp_port: 587

  # Wenn der Mailserver keine Authentifizierung hat, überspringen Sie diese 2 Zeilen
  smtp_user: '[email protected]'
  smtp_pass: 'password'

  # Optional, erfordert Verschlüsselung mit STARTTLS
  require_transport_security: true

  app_name: 'HowtoForge Example Chat'  # definiert den Wert für %(app)s in notif_from und E-Mail-Betreff
  notif_from: "%(app)s <[email protected]>"

Um die E-Mail-Verifizierung zu deaktivieren, fügen Sie stattdessen die folgende Zeile ein.

enable_registration_without_verification: true

Sobald Sie fertig sind, speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Starten Sie Synapse neu, um die Konfiguration anzuwenden.

$ sudo systemctl restart matrix-synapse

Schritt 9 - Nginx konfigurieren

Öffnen Sie die Datei /etc/nginx/nginx.conf zur Bearbeitung.

$ sudo nano /etc/nginx/nginx.conf

Fügen Sie die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf; hinzu.

server_names_hash_bucket_size 64;

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Erstellen und öffnen Sie die Datei /etc/nginx/conf.d/synapse.conf zur Bearbeitung.

$ sudo nano /etc/nginx/conf.d/synapse.conf

Fügen Sie den folgenden Code ein.

# HTTPS durchsetzen
server {
    # Client-Port
    listen 80;
    listen [::]:80;
    server_name matrix.example.com;
    return 301 https://$host$request_uri;
}

server {
    server_name matrix.example.com;

    # Client-Port
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;

    # Föderationsport
    listen 8448 ssl default_server;
    listen [::]:8448 ssl default_server;

    access_log  /var/log/nginx/synapse.access.log;
    error_log   /var/log/nginx/synapse.error.log;

    # TLS-Konfiguration
    ssl_certificate /etc/letsencrypt/live/matrix.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/matrix.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/matrix.example.com/chain.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_prefer_server_ciphers on;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
    resolver_timeout 2s;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

    tcp_nopush on;
    gzip on;

    location ~ ^(/_matrix|/_synapse/client) {
            proxy_pass http://localhost:8008;
            proxy_http_version 1.1;

            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $host;

            # Nginx erlaubt standardmäßig nur Datei-Uploads bis zu 1M Größe
            # Erhöhen Sie client_max_body_size, um max_upload_size in homeserver.yaml zu entsprechen
            client_max_body_size 50M;
    }
}

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden. Die obige Konfiguration geht davon aus, dass die IP-Adressen der Domains example.com und matrix.example.com auf denselben Server verweisen. Wenn dies nicht der Fall ist, verwenden Sie die folgende Konfigurationsdatei für den Server example.com.

server {
    server_name example.com;

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    # TLS-Konfiguration
    ssl_certificate /etc/letsencrypt/live/matrix.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/matrix.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/matrix.example.com/chain.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_prefer_server_ciphers on;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
    resolver_timeout 2s;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;

    # Weiterleitung
    location ~ ^(/_matrix|/_synapse/client) {
            return 301 "https://matrix.example.com$request_uri";
    }

    # Client-Homeserver-Autodiscovery
    location /.well-known/matrix/client {
        default_type application/json;
        add_header Access-Control-Allow-Origin *;

        return 200 '{ "m.homeserver": { "base_url": "https://matrix.example.com" } }';
    }

    # Domain-Delegierung
    location /.well-known/matrix/server {
        default_type application/json;
        add_header Access-Control-Allow-Origin *;

        return 200 '{ "m.server": "matrix.example.com" }';
    }
}

Überprüfen Sie die Syntax der Nginx-Konfigurationsdatei.

$ sudo nginx -t
nginx: die Konfigurationsdatei /etc/nginx/nginx.conf hat die Syntax ok
nginx: Konfigurationsdatei /etc/nginx/nginx.conf Test war erfolgreich

Starten Sie den Nginx-Dienst neu.

$ sudo systemctl restart nginx

Schritt 10 - Coturn installieren

Sie müssen einen Traversal Using Relays around the NAT (TURN)-Server installieren, um Sprach- und Videoanrufe zu ermöglichen. Zu diesem Zweck werden wir das Coturn-Paket installieren. Wenn Sie diese Funktionalität nicht benötigen, können Sie diesen Schritt überspringen.

Installieren Sie Coturn.

$ sudo dnf install coturn

Öffnen Sie die TURN- und UDP-Ports.

$ sudo firewall-cmd --zone=public --add-port=3478/{tcp,udp}
$ sudo firewall-cmd --zone=public --add-port=5349/{tcp,udp}
$ sudo firewall-cmd --zone=public --add-port=49152-65535/udp
$ sudo firewall-cmd --runtime-to-permanent
$ sudo firewall-cmd --reload

Generieren Sie ein SSL-Zertifikat für Turn ( coturn.example.com).

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d coturn.example.com

Generieren Sie ein Authentifizierungsgeheimnis für Coturn.

$ echo "static-auth-secret=$(cat /dev/urandom | tr -cd '[:alnum:]' | fold -w 256 | head -n 1)"
static-auth-secret=u3ksgJ9X876sFMO00A8KabXwZvzVwCmV30wWvZ7DzGiepRwNRYSCTYzf2E8olNzdDHu7oO3XpT3l5bv5mVdhXEQ3pnoTWBquSVPFFBJtyD6y9gBxiMaD2TYTD2WohQLE9s7OKJVpkDeKTnZQnkmjrFadE3M9DRxPL1W5Lgdg6XLLKABgb5XGkutRgkJOV0JRH4sBYsot63fWq9mcGTm6nAMdIycvDVDOs7vhoeqRzcTbMF0wsfAHVJNhXpGGFDyZ

Öffnen Sie die Konfigurationsdatei zur Bearbeitung.

$ sudo nano /etc/coturn/turnserver.conf

Wir werden die Datei durchgehen und die Einstellungen aktivieren, die wir benötigen. Zuerst aktivieren Sie die Authentifizierungsmethode, indem Sie die Zeile use-auth-secret auskommentieren.

# Beachten Sie, dass use-auth-secret einige Teile von lt-cred-mech überschreibt.
# Die use-auth-secret-Funktion hängt intern von lt-cred-mech ab, sodass Sie, wenn Sie diese Option festlegen,
# sie automatisch intern aktivieren, als ob Sie beide aktiviert hätten.
#
# Beachten Sie, dass Sie nur einen Auth-Mechanismus gleichzeitig verwenden können! Dies liegt daran,
# dass beide Mechanismen die Validierung von Benutzernamen und Passwort auf unterschiedliche Weise durchführen.
#
# Verwenden Sie entweder lt-cred-mech oder use-auth-secret in der Konfiguration,
# um Verwirrung zu vermeiden.
#
use-auth-secret

Als nächstes konfigurieren wir die Variable static-auth-secret mit dem Wert, den wir oben erstellt haben. Wir benötigen dieses Geheimnis auch, um Synapse später zu konfigurieren.

# 'Statischer' Authentifizierungsgeheimniswert (eine Zeichenfolge) nur für die TURN-REST-API.
# Wenn nicht festgelegt, versucht der TURN-Server
# den 'dynamischen' Wert in der turn_secret-Tabelle
# in der Benutzerdatenbank (sofern vorhanden) zu verwenden. Der in der Datenbank gespeicherte Wert kann dynamisch geändert werden,
# daher wird dieser Modus als 'dynamisch' betrachtet.
#
static-auth-secret=u3ksgJ9X876sFMO00A8KabXwZvzVwCmV30wWvZ7DzGiepRwNRYSCTYzf2E8olNzdDHu7oO3XpT3l5bv5mVdhXEQ3pnoTWBquSVPFFBJtyD6y9gBxiMaD2TYTD2WohQLE9s7OKJVpkDeKTnZQnkmjrFadE3M9DRxPL1W5Lgdg6XLLKABgb5XGkutRgkJOV0JRH4sBYsot63fWq9mcGTm6nAMdIycvDVDOs7vhoeqRzcTbMF0wsfAHVJNhXpGGFDyZ

Der nächste Wert, den wir ändern müssen, ist das realm. Es bezieht sich auf die Domain, die wir für Coturn ausgewählt haben.

# Der Standardrealm, der für die Benutzer verwendet werden soll, wenn keine explizite
# Ursprung/Realm-Beziehung in der Datenbank gefunden wird oder wenn der TURN
# Server keine Datenbank verwendet (nur die Befehlszeileneinstellungen
# und die Benutzerdatei).
# Muss mit langfristigen Anmeldeinformationen verwendet werden
# Mechanismus oder mit der TURN-REST-API.
#
# Hinweis: Wenn der Standardrealm nicht angegeben ist, fällt der Realm auf den Host-Domainnamen zurück.
#       Wenn die Zeichenfolge des Domainnamens leer ist oder auf '(None)' gesetzt ist, wird sie als leere Zeichenfolge initialisiert.
#
realm=coturn.example.com

Als nächstes definieren Sie die Anzahl der Sitzungen und Sitzungen pro Benutzer. Wählen Sie einen Wert, der für Ihren Server funktioniert.

# Pro-Benutzer-Zuweisungsquote.
# Der Standardwert ist 0 (keine Quote, unbegrenzte Anzahl von Sitzungen pro Benutzer).
# Diese Option kann auch über die Datenbank für ein bestimmtes Realm festgelegt werden.
#
user-quota=12

# Gesamte Zuweisungsquote.
# Der Standardwert ist 0 (keine Quote).
# Diese Option kann auch über die Datenbank für ein bestimmtes Realm festgelegt werden.
#
total-quota=1200

Als nächstes müssen wir TCP deaktivieren, da VOIP UDP ist.

# Kommentieren Sie dies aus, wenn keine TCP-Relay-Endpunkte erlaubt sind.
# Standardmäßig sind TCP-Relay-Endpunkte aktiviert (wie in RFC 6062).
#
no-tcp-relay

Wir müssen auch den Speicherort der Zertifikate konfigurieren, die wir für Coturn erstellt haben.

# Zertifikatdatei.
# Verwenden Sie einen absoluten Pfad oder einen Pfad relativ zur
# Konfigurationsdatei.
# Verwenden Sie das PEM-Dateiformat.
#
cert=/etc/letsencrypt/live/coturn.example.com/fullchain.pem

# Private Schlüsseldatei.
# Verwenden Sie einen absoluten Pfad oder einen Pfad relativ zur
# Konfigurationsdatei.
# Verwenden Sie das PEM-Dateiformat.
#
pkey=/etc/letsencrypt/live/coturn.example.com/privkey.pem

Als nächstes müssen wir den Verkehr zu privaten IP-Bereichen deaktivieren und Peers an Multicast-Adressen verbieten, um die Sicherheit zu verbessern.

# Flag, das verwendet werden kann, um Peers an bekannten Broadcast-Adressen (224.0.0.0 und höher, und FFXX:*) zu verbieten.
# Dies ist eine zusätzliche Sicherheitsmaßnahme.
#
no-multicast-peers

...............

# Option, um spezifische IP-Adressen oder Bereiche von IP-Adressen zu erlauben oder zu verbieten.
# Wenn eine IP-Adresse sowohl als erlaubt als auch als verboten angegeben ist, wird die IP-Adresse
# als erlaubt betrachtet. Dies ist nützlich, wenn Sie einen Bereich von IP-Adressen verbannen möchten,
# mit Ausnahme einiger spezifischer IPs innerhalb dieses Bereichs.
#
# Dies kann verwendet werden, wenn Sie nicht möchten, dass Benutzer des TURN-Servers auf Maschinen zugreifen können,
# die vom TURN-Server erreichbar sind, aber ansonsten nicht aus dem Internet erreichbar sind
# (z. B. wenn der TURN-Server hinter einem NAT sitzt)
#
# Beispiele:
# denied-peer-ip=83.166.64.0-83.166.95.255
# allowed-peer-ip=83.166.68.45

denied-peer-ip=0.0.0.0-0.255.255.255
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
denied-peer-ip=192.0.0.0-192.0.0.255
denied-peer-ip=192.0.2.0-192.0.2.255
denied-peer-ip=192.88.99.0-192.88.99.255
denied-peer-ip=192.168.0.0-192.168.255.255
denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255
denied-peer-ip=240.0.0.0-255.255.255.255
denied-peer-ip=::1
denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
denied-peer-ip=::ffff:0.0.0.0-::ffff:255.255.255.255
denied-peer-ip=100::-100::ffff:ffff:ffff:ffff
denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff

Sobald Sie fertig sind, speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Starten Sie Coturn neu, um die Konfiguration anzuwenden.

$ sudo systemctl restart coturn

Öffnen Sie die Synapse-Konfiguration ( homeserver.yaml)-Datei, um Coturn-Einstellungen hinzuzufügen.

$ nano ~/synapse/homeserver.yaml

Fügen Sie die folgenden Zeilen ein. Ersetzen Sie den Wert turn_shared_secret durch den Wert von static-auth-secret aus der Datei etc urn urnserver.conf.

turn_uris: [ "turn:coturn.example.com?transport=udp", "turn:coturn.example.com?transport=tcp" ]
turn_shared_secret: 'static-auth-secret'
turn_user_lifetime: 86400000
turn_allow_guests: True

# vim:ft=yaml

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Starten Sie Synapse neu, um die Änderungen anzuwenden.

$ sudo systemctl restart matrix-synapse

Schritt 11 - Matrix aufrufen

Sie können auf Matrix Chat über den Webclient von Element unter https://app.element.io zugreifen. Klicken Sie auf die Schaltfläche Anmelden, um fortzufahren.

Element Web-Anmeldeseite

Klicken Sie auf den Link Bearbeiten unter Homeserver. Geben Sie matrix.example.com als Ihren Homeserver ein.

Element-Client benutzerdefinierter Homeserver

Wenn der Client Ihren Homeserver korrekt erkennt, wird die Grenze und der Text grün, andernfalls wird er rot angezeigt. Klicken Sie auf Weiter, um fortzufahren.

Element benutzerdefinierter Homeserver-Anmeldung

Geben Sie den Benutzernamen und das Passwort ein, die Sie in Schritt 8 bei der Konfiguration von Synapse erstellt haben. Klicken Sie auf die Schaltfläche Anmelden, um sich anzumelden. Sie werden aufgefordert, ein sicheres und verschlüsseltes Backup zu erstellen.

Matrix sicheres Backup

Wählen Sie die Option Geben Sie eine Sicherheitsphrase ein, um eine Sicherheitsphrase zu erstellen, die jedes Mal erforderlich ist, wenn Sie sich anmelden. Klicken Sie auf Weiter, um fortzufahren.

Element Sicherheitsphrase

Geben Sie eine Sicherheitsphrase ein und klicken Sie auf die Schaltfläche Weiter, um fortzufahren. Sie werden aufgefordert, sie auf dem nächsten Bildschirm erneut zu bestätigen.

Element Sicherheitsphrase bestätigen

Geben Sie die Phrase erneut ein und klicken Sie auf die Schaltfläche Weiter, um fortzufahren.

Element Sicherheits-Schlüssel-Popup

Sie erhalten eine Reihe von Sicherheits-Schlüsseln, die Sie verwenden können, wenn Sie Ihre Sicherheitsphrase vergessen. Klicken Sie auf die Schaltfläche Herunterladen, um sie zu speichern.

Klicken Sie auf die Schaltfläche Weiter, um fortzufahren.

Element Passwort überprüfen

Sie werden nach Ihrem Kontopasswort gefragt. Geben Sie das Passwort ein und klicken Sie auf die Schaltfläche Weiter, um das verschlüsselte Backup abzuschließen.

Element-Webclient-Dashboard

Wir haben einen Gruppen-Chatraum mit dem Namen HowtoForge erstellt, indem wir die Schaltfläche Eine Gruppen-Chat erstellen auf der Startseite verwendet haben. Sie erhalten das folgende Popup, wenn Sie auf die Schaltfläche klicken.

Erstellen Sie einen privaten Raum in Matrix

Sie können Mitglieder auf die Domain beschränken, indem Sie das erweiterte Menü öffnen und die Option auswählen. Beenden Sie die Erstellung des Raums, indem Sie auf die Schaltfläche Raum erstellen klicken.

Schritt 12 - Element installieren

Erstellen Sie ein Verzeichnis für Element.

$ sudo mkdir -p /var/www/html/element

Erstellen Sie eine neue Datei, um die neueste Element-Version abzurufen.

$ sudo nano /var/www/html/element/update.sh

Fügen Sie die folgenden Zeilen hinzu.

#!/bin/sh
set -e

install_location="/var/www/html/element"
latest="
$(curl -I https://github.com/element-hq/element-web/releases/latest | awk -F '/' '/^location/ {print  substr($NF, 1, length($NF)-1)}')"

cd "$install_location"

[ ! -d "archive" ] && mkdir -p "archive"
[ -d "archive/element-${latest}" ] && rm -r "archive/element-${latest}"
[ -f "archive/element-${latest}.tar.gz" ] && rm "archive/element-${latest}.tar.gz"

wget "https://github.com/element-hq/element-web/releases/download/${latest}/element-${latest}.tar.gz" -P "archive"
tar xf "archive/element-${latest}.tar.gz" -C "archive"

[ -L "${install_location}/current" ] && rm "${install_location}/current"
ln -sf "${install_location}/archive/element-${latest}" "${install_location}/current"
ln -sf "${install_location}/config.json" "${install_location}/current/config.json"

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Machen Sie die Datei ausführbar.

$ sudo chmod +x /var/www/html/element/update.sh

Führen Sie das Skript aus, um Element herunterzuladen.

$ sudo /var/www/html/element/update.sh

Schritt 13 - Element konfigurieren

Kopieren Sie die gleiche Element-Konfigurationsdatei.

$ sudo cp /var/www/html/element/current/config.sample.json /var/www/html/element/config.json

Öffnen Sie die Konfigurationsdatei zur Bearbeitung.

$ sudo nano /var/www/html/element/config.json

Suchen Sie die folgenden Zeilen.

"m.homeserver": {
    "base_url": "https://matrix-client.matrix.org",
    "server_name": "matrix.org"
},

Ändern Sie die Standardadresse des Matrix-Homeservers in Ihren Homeserver und entfernen Sie die Variable server_name.

"m.homeserver": {
    "base_url": "https://matrix.example.com",
    "server_name": "example.com"
},

Wenn Sie Ihren Namen anstelle von Element im Titel der Website verwenden möchten, ändern Sie den Markennamen.

"brand": "HowtoForge Example Chat",

Setzen Sie die Variable disable_guests auf true, um Gästen die Nutzung von Element zu verwehren.

"disable_guests": true,

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Generieren Sie ein SSL-Zertifikat für den Element-Client.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d element.example.com

Erstellen und öffnen Sie die Datei /etc/nginx/conf.d/element.conf zur Bearbeitung.

$ sudo nano /etc/nginx/conf.d/element.conf

Fügen Sie die folgenden Zeilen ein.

server {
    listen 80;
    listen [::]:80;
    server_name element.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;

    server_name element.example.com;

    root /var/www/html/element/current;
    index index.html;

    access_log  /var/log/nginx/element.access.log;
    error_log   /var/log/nginx/element.error.log;

    add_header Referrer-Policy "strict-origin" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-Frame-Options "SAMEORIGIN" always;

    # TLS-Konfiguration
    ssl_certificate /etc/letsencrypt/live/element.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/element.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/element.example.com/chain.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_prefer_server_ciphers on;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
    resolver_timeout 2s;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
}

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Überprüfen Sie die Syntax der Nginx-Konfigurationsdatei.

$ sudo nginx -t
nginx: die Konfigurationsdatei /etc/nginx/nginx.conf hat die Syntax ok
nginx: Konfigurationsdatei /etc/nginx/nginx.conf Test war erfolgreich

Starten Sie den Nginx-Dienst neu.

$ sudo systemctl restart nginx

Wir müssen die SELinux-Einstellungen konfigurieren, bevor wir auf Element zugreifen. Führen Sie die folgenden Befehle aus, um Element das Ausführen zu erlauben.

$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/element(/.*)?"
$ sudo restorecon -Rv /var/www/html/element/

Sie können auf den Element-Client über die URL https://element.example.com in Ihrem Browser zugreifen. Melden Sie sich an, und Sie werden zum App-Dashboard weitergeleitet. Sie werden aufgefordert, die App zuerst mit https://app.element.io zu verifizieren. Stellen Sie sicher, dass Sie in der ursprünglichen Element-App angemeldet sind, und Sie werden aufgefordert, die Emoji-Zeichen zuzuordnen. Sobald Sie verifiziert sind, erhalten Sie das folgende Dashboard.

Selbst gehostetes Element-Dashboard

Fazit

Damit endet unser Tutorial zur Installation des Matrix Synapse Chat-Servers zusammen mit Coturn und dem Element-Webclient unter Verwendung von Nginx als Proxy-Server auf einem Debian 12-Rechner. Wenn Sie Fragen haben, posten Sie diese in den Kommentaren unten.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.