GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So installieren Sie Matrix Synapse Homeserver mit Docker

Matrix ist ein Open-Source-Standard (Protokoll) für VoIP, Instant Messaging und Videoanrufe, also Echtzeitkommunikation. Es bietet End-to-End-Verschlüsselung zusammen mit Unterstützung für Brücken zu verschiedenen anderen Messaging-Alternativen wie Slack, IRC, Telegram oder jedem anderen XMPP-Client. Es funktioniert auch mit Verbindungen mit geringer Bandbreite.

In diesem Tutorial zeige ich Ihnen, wie Sie Matrix Homeserver Synapse mithilfe von Docker-Containern installieren.

Was ist ein Matrix-Homeserver?

Matrix an sich ist nur eine Spezifikation und es gibt viele Implementierungen des Matrix-Protokolls, die öffentlich verfügbar sind.

Homeserver sind im Grunde alle auf einem Server bereitgestellten Implementierungen, auf die Sie über jeden Matrix-Client wie Element zugreifen können.

Die Frage, die sich stellen kann, ist, warum private Homeserver einrichten, wenn einige bereits öffentlich verfügbar sind?

Nun, für den Anfang können Sie Ihren privaten Homeserver mit Ihren Freunden, Ihrer Familie oder Ihren Kollegen teilen und ihn als Ihr tägliches Kommunikationsmedium verwenden. Sofern Sie sich nicht mit einem Benutzer von einem anderen Homeserver unterhalten, sind alle Daten auf Ihrem Server sicher und geschützt.

Dies gibt Ihnen die Kontrolle über jeden Aspekt, den öffentliche Homeserver nicht bieten können.

Bereitstellung der Synapse Matrix-Homserver-Implementierung mit Docker-Containern

In diesem Tutorial verwende ich Synapse, eine beliebte Matrix-Homeserver-Implementierung. Synapse wurde in Python geschrieben und vom Kernteam von Matrix entwickelt.

Wir vom Linux Handbook bevorzugen Docker gegenüber der nativen Bereitstellung, daher behandeln die folgenden Abschnitte die Synapse-Bereitstellung, die mit Docker durchgeführt wird.

Voraussetzung

  • Ein Linux-System/Server. Wir empfehlen die Verwendung von Linode für die schnelle Bereitstellung eines Linux-Servers in der Cloud.
  • Eine funktionierende Domain und Zugriff auf ihre DNS-Einträge (es sei denn, Sie möchten sie auf localhost einrichten)
  • Du solltest sowohl docker als auch docker-compose installiert haben. Sie können unserer Anleitung zur Installation von Docker und Docker Compose auf CentOS folgen.
  • Ich glaube, Sie kennen sich mit den wichtigsten Linux-Befehlen aus und haben keine Angst davor, das Terminal zum Bearbeiten von Konfigurationsdateien zu verwenden.
  • Grundlegende Docker-Kenntnisse werden Ihnen helfen, aber Sie können dem Tutorial auch ohne Docker folgen.

Schritt 1:Reverse-Proxy einrichten

Bevor Sie sich mit Synapse die Hände schmutzig machen, müssen Sie zuerst Ihren Reverse-Proxy-Container und seinen begleitenden Let's Encrypt-Container für TLS-Zertifikate einrichten (Sie wollen https, vertrauen Sie mir).

Konfigurieren des Reverse-Proxy-Containers

In einer Produktionsumgebung verwenden Sie docker run ... nicht verwenden Sie docker-compose . Lassen Sie uns also den jwilder/nginx-proxy konfigurieren als Reverse-Proxy.

Erstellen Sie ein Verzeichnis namens reverse-proxy und wechseln Sie in dieses neu erstellte Verzeichnis:

mkdir reverse-proxy && cd reverse-proxy

Öffnen Sie nun Ihren bevorzugten Texteditor und erstellen Sie eine Datei mit dem Namen docker-compose.yml , und fügen Sie den folgenden Inhalt hinzu:

version: "3.3"

services:
    proxy:
        image: "jwilder/nginx-proxy"
        container_name: "proxy"
        volumes:
            - "certs:/etc/nginx/certs"
            - "vhost:/etc/nginx/vhost.d"
            - "html:/usr/share/nginx/html"
            - "/run/docker.sock:/tmp/docker.sock:ro"
        networks: ["server"]
        restart: "always"
        ports:
            - "80:80"
            - "443:443"

Hier definieren Sie also zuerst Ihren Dienst mit dem Namen proxy . Die wichtigsten Merkmale, die Sie beachten sollten, sind:

  • Die Volumes certs, vhost und html werden zwischen jwilder/nginx-proxy geteilt und jrcs/letsencrypt-nginx-proxy-companion Behälter.
  • Der Docker-Socket ist schreibgeschützt unter /tmp/docker.sock gemountet .
  • Es verwendet ein anderes Netzwerk als das Standard-Bridge-Netzwerk.
  • Die Ports 80 und 443 sind gebunden, für http bzw. https.

Letsencrypt-nginx-proxy-companion konfigurieren

Fügen Sie am Ende derselben Compose-Datei Folgendes hinzu

letsencrypt:
        image: "jrcs/letsencrypt-nginx-proxy-companion"
        container_name: "letsencrypt"
        volumes:
            - "certs:/etc/nginx/certs"
            - "vhost:/etc/nginx/vhost.d"
            - "html:/usr/share/nginx/html"
            - "/run/docker.sock:/var/run/docker.sock:ro"
        environment:
            NGINX_PROXY_CONTAINER: "proxy"
        networks: ["server"]
        restart: "always"
        depends_on: ["proxy"]

Hier haben Sie einen anderen Dienst namens letsencrypt definiert. Lassen Sie uns auch diese durchgehen:

  • Alle Volumes des vorherigen Dienstes sind auch hier an den gleichen Stellen gemountet.
  • Der Docker-Socket ist schreibgeschützt an /var/run/docker.sock gebunden .
  • Die Umgebungsvariable NGINX_PROXY_CONTAINER auf den Containernamen des Reverse-Proxy-Containers gesetzt, in unserem Fall „proxy“.
  • Es nutzt dasselbe "Server"-Netzwerk.

Fügen Sie am Ende dieser beiden Dienstbeschreibungen die Volume-Definitionen und die Netzwerkdefinition hinzu, wie unten:

networks:
    server:
        external: true

volumes:
    certs:
    vhost:
    html:

Zwei wichtige Dinge, die hier zu beachten sind:

  1. Sie werden eine separate Compose-Datei für Synapse verwenden. Auf diese Weise haben Sie eine modulare Bereitstellung und können einen Dienst einfach herunterfahren, ohne andere zu beeinträchtigen, indem Sie den Reverse-Proxy und den Companion mithilfe einer anderen YAML-Datei bereitstellen.
  2. Das Netzwerk ist extern. Das dient dazu, Probleme mit anderen Containern zu vermeiden, die nicht dasselbe Netzwerk teilen, weil docker-compose benennt seine Volumes und Netzwerke, wenn es automatisch erstellt wird. Das bringt uns also zum Aufbau des Netzwerks. Verwenden Sie den Befehl docker network create server um das Netzwerk zu erstellen.

Nachdem alles fertig ist, speichern Sie die Datei und beenden Sie den Editor.

Jetzt ist es an der Zeit, Ihren Reverse-Proxy-Server zu starten.

docker-compose up -d

Schritt 2:Synapse einrichten

Jetzt ist es an der Zeit, dass Sie sich endlich auf das Gute konzentrieren. Die Bereitstellung von Synapse ist also wirklich ein zweistufiger Prozess.

Zuerst brauchen Sie es, um eine Konfiguration zu generieren, als Nächstes räumen Sie die Konfiguration auf und stellen unseren Homeserver bereit.

Beginnen wir damit, die Compose-Datei zu erhalten.

Konfiguration generieren

Erstellen Sie ein separates Verzeichnis mit dem Namen "synapse" und wechseln Sie dorthin.

mkdir synapse && cd synapse

Erstellen Sie eine Datei namens docker-compose.yml und öffne es, du kennst die Übung, oder?

Stellen Sie sicher, dass Sie die richtigen Werte für sub.domain.com verwenden in der yml-Datei hier:

version: "3.3"

services:
    synapse:
        image: "matrixdotorg/synapse:latest"
        container_name: "synapse"
        volumes:
            - "./data:/data"
        environment:
            VIRTUAL_HOST: "sub.domain.com"
            VIRTUAL_PORT: 8008
            LETSENCRYPT_HOST: "sub.domain.com"
            SYNAPSE_SERVER_NAME: "sub.domain.com"
            SYNAPSE_REPORT_STATS: "yes"
        networks: ["server"]


networks:
    server:
        external: true

Dies ist, wie es aussieht, eine Standard-Compose-Datei, aber einige herausragende Optionen werden unten erklärt:

  • Sie verwenden einen Bind-Mount anstelle eines Volumes, weil die Konfigurationsdatei dort generiert wird und Sie sie bearbeiten müssen. Sie können sicherlich Volumes verwenden, aber dann müssen Sie die Datei bearbeiten, die sich in /var/lib/docker/volumes/<name>/_data befindet .
  • Die Umgebungsvariablen VIRTUAL_HOST &LETSENCRYPT_HOST sind für die letsencrypt- und Reverse-Proxy-Container, die die erforderlichen Konfigurationsänderungen zusammen mit den Zertifikaten generieren, ohne dass Sie manuell eingreifen müssen.
  • Stellen Sie sicher, dass SYNAPSE_SERVER_NAME verweist auf den FQDN Ihres Synapse-Servers (zusammen mit der Subdomain).
  • Legen Sie VIRUAL_PORT fest auf 8008. Der Synapse-Container stellt den HTTP-Port 8008 bereit, damit seine Clients damit kommunizieren können.
  • Stellen Sie schließlich sicher, dass dieser Container dasselbe Netzwerk wie der Reverse-Proxy-Container verwendet, da die Container sonst nicht kommunizieren können, was wiederum den gesamten Prozess unterbricht.

Bestätigen Sie, dass Sie die IP des Servers zum A-Eintrag Ihres DNS hinzugefügt haben und ein CNAME-Eintrag auf die genaue Subdomain verweist.

Erstellen Sie data Verzeichnis und führen Sie den folgenden Befehl aus

docker-compose run --rm synapse generate

Dadurch wird die Konfigurationsdatei in ./data mit dem Namen „homeserver.yaml“ generiert.

Synapse konfigurieren

Es gibt viele konfigurierbare Optionen in der homeserver.yaml -Datei, die nicht Gegenstand dieses Tutorials sind. Ich schlage vor, dass Sie die Kommentare in dieser Datei durchgehen und hier lesen.

Stellen Sie vorerst nur die folgenden Änderungen sicher:

  • Der server_name Variable wird auf die Subdomain Ihrer Wahl gesetzt, wie in der Umgebungsvariable SYNAPSE_SERVER_NAME festgelegt .
  • TLS ist auf „false“ gesetzt. Sie verwenden einen Reverse-Proxy, sodass TLS über Ihren Webserver abgewickelt wird. Lass den Hafen in Ruhe.
  • Stellen Sie sicher, dass enable_registration auf true gesetzt ist, damit Sie sich anmelden und Ihren Homeserver nutzen können.

Speichern Sie die Datei und beenden Sie sie.

Stellen Sie den Synapse Matrix Homeserver bereit

Jetzt, da alles an seinem Platz ist, können Sie Synapse mit einem so einfachen Befehl wie

starten
docker-compose up -d

Jetzt ist Ihr Homeserver einsatzbereit. Wenn Sie die Subdomain in einem Webbrowser besuchen, sollten Sie eine Nachricht wie diese sehen:

PostgreSQL für die Datenbank verwenden [optional]

Standardmäßig verwendet synapse SQLite für seine Datenbank. Nun, das ist gut zum Testen und für den gelegentlichen Gebrauch, aber für einen wichtigeren Anwendungsfall empfehle ich die Verwendung von PostgreSQL.

PostgreSQL zur Synapse-Compose-Datei hinzufügen

Wechseln Sie in das Synapse-Verzeichnis, falls Sie sich noch nicht darin befinden, und öffnen Sie docker-compose.yml . Fügen Sie dieser Compose-Datei die folgenden Zeilen hinzu.

postgresql:
        image: postgres:latest
        restart: always
        environment:
            POSTGRES_PASSWORD: somepassword
            POSTGRES_USER: synapse
            POSTGRES_DB: synapse
            POSTGRES_INITDB_ARGS: "--encoding='UTF8' --lc-collate='C' --lc-ctype='C'"
        volumes:
            - "postgresdata:/var/lib/postgresql/"
        networks: ["server"]

Der POSTGRES_INITDB_ARGS Variable ist sehr notwendig. Es legt die Sortierung, den ctype und die Kodierung fest, die für die Postgres-Datenbank verwendet werden. Diese sind absolut notwendig, damit die Synapse funktioniert. Fügen Sie das Volume zum Volumes-Abschnitt hinzu:

volumes:
    postgresdata:

Synapse konfigurieren

Jetzt müssen Sie Synapse über die postgresql-Datenbank informieren. Dazu bearbeiten Sie die alte homeserver.yaml Datei. Öffnen Sie diese Datei und finden Sie die folgenden Zeilen heraus:

database:
    name: sqlite3
    args:
        database: /path/to/homeserver.db

Entfernen Sie diese, da wir sie nicht mehr benötigen. Fügen Sie stattdessen Folgendes hinzu:

database:
    name: psycopg2
    args:
        user: synapse
        password: somepassword
        host: postgresql
        database: synapse
        cp_min: 5
        cp_max: 10

Der Name der Datenbank ist psycopg2, was ein PostgreSQL-Adapter für Python ist.

Schauen Sie genau hin, Sie werden die Ähnlichkeiten zwischen dieser und den Umgebungsvariablen erkennen, die Sie für den postgresql-Container eingerichtet haben.

Was den Host betrifft, verwenden Sie docker-compose und ein benutzerdefiniertes Netzwerk, kann Synapse den Dienstnamen automatisch auflösen. Darüber brauchen Sie sich keine Sorgen zu machen.

Speichern Sie die Datei und beenden Sie sie.

Bereitstellen

Nun, was bleibt wirklich zu tun? Stellen Sie es bereit.

docker-compose up -d

Testen Sie die Synapse-Matrix-Homeserver-Bereitstellung

Ihr Homeserver ist bereit. Testen wir es. Matrix ist nur ein Protokoll, Synapse ist nur eine Implementierung. Sie benötigen einen Matrix-Client, um ihn wie ein Messaging-Tool verwenden zu können.

Hier ist eine Liste verschiedener verfügbarer Matrix-Clients. Element ist wahrscheinlich einer der beliebtesten Matrix-Clients, die Sie verwenden können.

Wenn Sie den Matrix-Client installiert haben, führen Sie ihn aus. Erstellen Sie hier ein Konto.

Füllen Sie auf der Registrierungsseite alle Details aus und geben Sie auf dem Homeserver die Subdomain ein, die Sie zuvor verwendet haben. Klicken Sie auf Registrieren.

Jetzt haben Sie eine perfekt funktionierende Synapse-Bereitstellung, die Sie mit Ihrer Familie oder Ihren Freunden verwenden können, ohne sich Gedanken darüber machen zu müssen, wo Ihre Daten gespeichert sind oder ähnliches.

Föderation in Synapse mit Docker einrichten [optional]

Föderation ist im Grunde die Fähigkeit, mit Benutzern auf einem anderen Homeserver zu kommunizieren.

Wenn Ihre Benutzer-ID beispielsweise @coolguy:coolserver.me ist, können Sie jemanden wie @Greatme:awesome.us in einen Raum auf Ihrem Homeserver einladen.

Ebenso können Sie auch Räumen beitreten, die auf anderen Homeservern gehostet werden.

Wenn Sie Synapse bereits ausführen, müssen Sie die Container nicht stoppen. Sie müssen nur Änderungen an Ihrem NGINX-Proxy-Container vornehmen. Dies besteht aus nicht mehr als drei kurzen und einfachen Schritten.

Es gibt ein paar Möglichkeiten, Federation zum Laufen zu bringen, aber diejenige, die meiner Meinung nach extrem einfach zu befolgen ist und nur minimale Änderungen an Ihrem bestehenden Setup erfordert, heißt Portdelegierung.

Standardmäßig versucht jeder Matrixserver, einen anderen Matrixserver über Port 8443 zu erreichen. Der folgende Prozess weist die anderen Server grundsätzlich an, einen anderen Port zu verwenden. Da https bereits an Port 443 funktioniert, delegieren Sie einfach den Standard-Matrix-Kommunikationsport an 443.

Schritt 1:Erstellen Sie eine Konfigurationsdatei für unseren Reverse-Proxy

Rufen Sie das Nginx-Reverse-Proxy-Verzeichnis auf. Erstellen Sie eine Datei namens synapse-federation . Fügen Sie dieser Datei den folgenden Text hinzu:

location /.well-known/matrix/server {
    return 200 '{"m.server": "$VIRTUAL_HOST:443"}';
}

Ändern Sie $VIRTUAL_HOST auf den entsprechenden Wert, der im Grunde die Domäne ist, auf der Ihre Matrixinstanz bereitgestellt wird (festgelegt gemäß der docker-compose-Datei von synapse).

Schritt 2:docker-compose.yml bearbeiten

Öffnen Sie Ihre docker-compose.yml Datei und fügen Sie dem Volumes-Array einen weiteren Eintrag hinzu:

 - ./synapse-federation:/etc/nginx/vhost.d/$VIRTUAL_HOST

Ändern Sie erneut $VIRTUAL_HOST auf den entsprechenden Wert.

Schritt 3:Starten Sie den Proxy-Server neu

Jetzt müssen Sie den Proxy-Server neu starten.

docker-compose up -d proxy

Dadurch wird der Reverse-Proxy-Container neu erstellt. Sie müssen sich keine Sorgen machen, dass vorherige Konfigurationen verloren gehen, es sei denn, Sie haben nach der Bereitstellung etwas manuell geändert. Die Konfiguration ist dynamisch, also wird alles gut.

Änderungen testen

Sie können die Änderungen auf zwei Arten testen.

Versuchen Sie, einem Raum wie #servers:matrix.org beizutreten . Führen Sie den folgenden Befehl aus, wenn Sie jq haben installiert:

curl https://federationtester.matrix.org/api/report?server_name=$VIRTUAL_HOST --silent | jq -r '.FederationOK'

Oder verwenden Sie dieses Hack-y:

curl https://federationtester.matrix.org/api/report?server_name=$VIRTUAL_HOST --silent | awk '/FederationOK/ {print $2}'

Dies sollte "true" ausgeben. Und natürlich $VIRTUAL_HOST ändern zu der Domain, die Ihre Synapse-Instanz bedient.

War es hilfreich?

Ich hoffe, das war für Sie genauso hilfreich wie die Erfahrung für mich. Wenn Sie weitere Artikel wie diesen wünschen, können Sie dies unten kommentieren. Wenn Sie auf ein Problem stoßen, hinterlassen Sie einen Kommentar und ich werde versuchen, Ihnen zu helfen.


Linux
  1. So installieren Sie Docker unter Ubuntu 18.04 / Ubuntu 18.10 / Ubuntu 19.04

  2. So installieren Sie Docker mit Ansible [Debian/Ubuntu]

  3. So installieren Sie WordPress mit Docker

  4. Wie installiere ich Docker unter Ubuntu 18.04?

  5. So installieren Sie Docker unter Ubuntu 22.04

So installieren Sie Gitea mit Docker unter Ubuntu 20.04

So installieren Sie Docker unter Debian 10

So installieren Sie Docker unter CentOS

So installieren Sie Gitea auf Ubuntu mit Docker

So installieren Sie Matrix Synapse unter Ubuntu 20.04

So installieren Sie Docker unter Ubuntu 18.04