Logo Gray

Matrix- Synapse Installationsanleitung

Betriebssystem: Debian 12

Ressourcen: (kleiner geht vermutlich auch)
CPU:2 vCore
RAM:2 GB
SSD:60 GB

Benötigte Ports:

PortProtokollBeschreibungÖffentlich?
443TCPHTTPS (Matrix-API + Element-Web)Ja
80TCPHTTP (nur Weiterleitung)Optional
8448TCPFöderation (Matrix-Kommunikation)Ja (wenn Föderation geplant)
8008TCPLokale Synapse HTTP-APINein (nur intern)
				
					sudo apt-get upgrade

				
			
				
					sudo apt-get install -y lsb-release wget apt-transport-https certbot python3-certbot-nginx coturn postgresql

				
			
				
					sudo wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg

				
			
				
					echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" |
    sudo tee /etc/apt/sources.list.d/matrix-org.list
				
			
				
					sudo apt-get update

				
			
				
					sudo apt-get install matrix-synapse-py3 libpq5 -y

				
			
domain für matrix server abfage

Domain für Matrix server (nicht element web client falls vorgesehen) eingeben.

telemetry data
				
					su - postgres

				
			
				
					createuser --pwprompt synapse_user

				
			

2 * passwort ohne sonderzeichen

				
					createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse_user synapse

				
			
				
					exit
				
			
				
					cd /etc/matrix-synapse/

				
			
				
					sudo nano homeserver.yaml

				
			

ACHTUNG wir ersetzen folgende sektion:

				
					database:
  name: "sqlite3"
  args:
    database: "/data/homeserver.db"
				
			

Mit (strg + k) zum löschen der Zeilen

Das static-auth-secret in der turnserver.conf muss dasselbe sein wie das turn_shared_secret, das du in der YAML-Konfigurationsdatei von Matrix Synapse eingetragen hast.

				
					database:
  name: psycopg2
  args:
    user: synapse_user
    password: <zuvor_gesetztes_synapse_pass>
    database: synapse
    host: localhost
    cp_min: 5
    cp_max: 10
	
registration_shared_secret: "RANDOM STRING"
	
turn_uris: [ "turn:matrix.yoururl.com?transport=udp", "turn:matrix.yoururl.com?transport=tcp" ]
turn_shared_secret: "[your secret key here]"
turn_user_lifetime: 86400000
turn_allow_guests: true
				
			

Setzte 2 mal deine matrix domain, synapse pw, und random string (den du dir ausdenkst und merkst)

strg + s, strg + x

				
					sudo nano /etc/turnserver.conf

				
			

strg + w, suche nach: 

use-auth-secret

static-auth-secret=[your secret key here]

realm=matrix.deine_domain.de

entferne das # vor jeder zeile

bei static-auth-secret=north
trage den secret key aus der homserver.yml ein.

Enable prometheus exporter
# If enabled the turnserver will expose an endpoint with stats on a prometheus format
# this endpoint is listening on a different port to not conflict with other configurations.
#
# You can simply run the turnserver and access the port 9641 and path /metrics
#
# For more info on the prometheus exporter and metrics
# https://prometheus.io/docs/introduction/overview/
# https://prometheus.io/docs/concepts/data_model/
#
#prometheus

strg + s, strg + x

				
					certbot certonly --nginx -d matrix.deine_domain.de
				
			
				
					sudo nano /etc/nginx/sites-available/default
				
			
Ohne Federation
				
					server {
    listen 80;
        listen [::]:80;
    server_name matrix.deine_domain.de;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name matrix.deine_domain.de;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/matrix.deine_domain.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/matrix.deine_domain.de/privkey.pem;

    location / {
        proxy_pass http://localhost:8008;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

server {
    listen 8448 ssl default_server;
    listen [::]:8448 ssl default_server;
    server_name matrix.deine_domain.de;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/matrix.deine_domain.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/matrix.deine_domain.de/privkey.pem;
    location / {
        proxy_pass http://localhost:8008;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

				
			

port 8448 öffnen

				
					# Redirect HTTP to HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name matrix.deine_domain.de;
    return 301 https://$host$request_uri;
}

# HTTPS für Web-Client und Federation
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name matrix.deine_domain.de;

    # TLS-Zertifikate
    ssl_certificate /etc/letsencrypt/live/matrix.deine_domain.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/matrix.deine_domain.de/privkey.pem;

    # Sicherheitsoptimierungen für TLS
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;

    # HSTS (optional, aber empfohlen)
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    location / {
        proxy_pass http://localhost:8008;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket-Unterstützung
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

# HTTPS für Federation (Port 8448)
server {
    listen 8448 ssl http2;
    listen [::]:8448 ssl http2;
    server_name matrix.deine_domain.de;

    # TLS-Zertifikate
    ssl_certificate /etc/letsencrypt/live/matrix.deine_domain.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/matrix.deine_domain.de/privkey.pem;

    # Sicherheitsoptimierungen für TLS
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;

    location / {
        proxy_pass http://localhost:8008;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket-Unterstützung
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

				
			

Teste federation unter https://federationtester.matrix.org/

				
					sudo systemctl restart coturn.service nginx matrix-synapse.service

				
			
				
					sudo systemctl enable nginx matrix-synapse.service coturn.service

				
			
				
					cd /etc/matrix-synapse/

				
			

Folgend legen wir den ersten Admin an, ohne das -a am ende wäre ein normaler User. Der Pfad zur Homeserver.yaml muss korrekt sein. 

				
					register_new_matrix_user -u USERNAME -p PASS -c /etc/matrix-synapse/homeserver.yaml -a